Mysql 中的数据库不显示 html 和 php 中单选按钮的结果

Posted

技术标签:

【中文标题】Mysql 中的数据库不显示 html 和 php 中单选按钮的结果【英文标题】:Database in Mysql does not show the result for a radiobutton in html and php 【发布时间】:2021-10-04 13:43:47 【问题描述】:

我正在尝试使用 phphtmlmysql 处理联系表单。除单选按钮外,一切正常。当我选择“男性”按钮时,它不会在数据库中显示。 我试图用 ID 指定单选按钮,不幸的是这对我来说没有成功。你们能帮我解决这个问题吗?谢谢!

HTML

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Contact formulier</title>
</head>

<body>
<fieldset>
<legend>Contact Form</legend>
<form name="frmContact" method="post" action="contact.php">
<p>
<label for="Name">Name </label>
<input type="text" name="txtName" id="txtName">
</p>
<p>
    <input type="radio" name="gender" value="Male">Male</br>
    <input type="radio" name="gender" value="Female">Female
</p>
<p>
<label for="phone">Phone</label>
<input type="text" name="txtPhone" id="txtPhone">
</p>
<p>
<label for="message">Message</label>
<textarea name="txtMessage" id="txtMessage"></textarea>
</p>
<p>&nbsp;</p>
<p>
<input type="submit" name="Submit" id="Submit" value="Submit">
</p>
</form>
</fieldset>
</body>
</html> ``` 

PHP

// database connection code
// $con = mysqli_connect('localhost', 'database_user', 'database_password','database');

$con = mysqli_connect('localhost', 'root', '','db_connect');

// get the post records
$txtName = $_POST['txtName'];
$gender = $_POST['gender'];
$txtPhone = $_POST['txtPhone'];
$txtMessage = $_POST['txtMessage'];

// database insert SQL code
$sql = "INSERT INTO `tbl_contact` (`Id`, `fldName`, 'gender', `fldPhone`, `fldMessage`) VALUES ('0', '$txtName', '$gender', '$txtPhone', '$txtMessage')";

// insert in database 
$rs = mysqli_query($con, $sql);

if($rs)

    echo "Contact Records Inserted";
else
  echo "Contact records failed";


?> ``` 

【问题讨论】:

警告:您的代码容易受到 SQL 注入攻击。您应该使用参数化查询和准备好的语句来帮助防止攻击者通过使用恶意输入值来破坏您的数据库。 bobby-tables.com 给出了风险解释,以及如何使用 PHP / mysqli 安全地编写查询的一些示例。 切勿将未经处理的数据直接插入您的 SQL 中。按照您现在编写代码的方式,有人可以轻松窃取、错误更改甚至删除您的数据。 phpdelusions.net/mysqli 还包含使用 mysqli 编写安全 SQL 的好例子。另见mysqli documentation 和这个:How can I prevent SQL injection in PHP?。对查询进行参数化还将大大降低由于未转义或错误引用的输入值而导致意外语法错误的风险。 另外,切勿将您的 Web 应用程序配置为以 root 身份登录数据库。 Root 可以为所欲为,因此除了 SQL 注入漏洞之外,这只会让您的数据库成为一本可供黑客使用的开放书。而是专门为此应用程序创建一个单独的用户帐户,该帐户仅具有它实际需要才能正常工作的权限。甚至不要在开发或测试期间使用 root 帐户作为快捷方式,因为您还需要测试您的帐户权限 - 否则当您上线时,您可能会遇到与用户帐户设置相关的意外错误。 无论如何,您的代码中没有任何内容表明它不会专门保存“性别”值。您可能还有其他问题 - 由于缺少参数,并且您每次都插入相同的 ID 值 (0),但我看不到任何具体会阻止提交和保存性别值的内容。你有任何错误吗?您是否真的启用了错误报告(针对 PHP 和 mysqli) - 请参阅 How to get the actual mysqli error 【参考方案1】:

你应该把引号从'改为`

// database insert SQL code
$sql = "INSERT INTO `tbl_contact` (`Id`, `fldName`, `gender`, `fldPhone`, `fldMessage`) VALUES ('0', '$txtName', '$gender', '$txtPhone', '$txtMessage')";

或者你可以完全离开它们:

// database insert SQL code
$sql = "INSERT INTO tbl_contact (Id, fldName, gender, fldPhone, fldMessage) VALUES ('0', '$txtName', '$gender', '$txtPhone', '$txtMessage')";

【讨论】:

以上是关于Mysql 中的数据库不显示 html 和 php 中单选按钮的结果的主要内容,如果未能解决你的问题,请参考以下文章

PHP/HTML 表单不更新 MySQL

如何从 MySQL 数据库中存储和检索图像并使用 Php 将其显示在 html 中? [复制]

尝试使用 PHP 和 mysql 在 3 个 html 表中显示 87 行 mysql [关闭]

显示 MySQL 数据库中 php 中的所有表名

使用 PHP 选择并显示 MySQL 表中的所有字段以获取无限量的列

PHP mysql - 以表格形式显示数据库中的逗号分隔值