我想创建一个表单,其中用户插入数据,如名字,姓氏,年龄,邮件和位置,这些值在数据库中更新。所有变量都通过文本插入但位置1是下拉列表名单。 form.php文件是这样的:
<html>
<body>
<form action="insert.php" method="post">
Firstname: <input type="text" name="firstname">
Lastname: <input type="text" name="lastname">
Age: <input type="text" name="age">
mail:<input type="text" name="mail">
Location:<select name="education">
<option value="option1">option1</option>
<option value="option2">option2</option>
<option value="option3">option3</option></select>:<br />
<input type="submit">
</form>
</body>
</html>
这里是insert.php文件:
<?php
$firstname = trim(mysql_real_escape_string($_POST['firstname']));
$lastname = trim(mysql_real_escape_string($_POST['lastname']));
$age = trim(mysql_real_escape_string($_POST['age']));
$mail = trim(mysql_real_escape_string($_POST['mail']));
$location = trim(mysql_real_escape_string($_POST['location']));
$sql="INSERT INTO persons (firstname, lastname, age, mail, location)
VALUES
('$_POST[firstname]','$_POST[lastname]','$_POST[age]', '$_POST[mail]','$_POST[location]')";
if (!mysqli_query($con,$sql)) {
die('Error: ' . mysqli_error($con));
}
echo "1 record added";
mysqli_close($con);
?>
当我尝试使用此功能时,我会收到一条消息:
注意:未定义的索引:第11行的C:\ xampp \ htdocs \ family_guy \ insert.php中的位置
注意:未定义的索引:第16行的C:\ xampp \ htdocs \ family_guy \ insert.php中的位置 已添加1条记录
除location之外的所有值都保存在数据库中。 请帮我解决这个问题。
答案 0 :(得分:1)
首先:您无法在$_POST['location']
中获取位置值的原因是,表单字段名为education
。将其更改为location
即可。 - HTML标记中的name属性是$_POST
数组的键 - 因此必须匹配(即使是大小写)。
第二:使用您的代码可以进行SQL注入。您转义用户输入的数据$firstname = trim(mysql_real_escape_string($_POST['firstname']));
,但是,您使用$sql
中未转义的数据。你必须使用
$sql="INSERT INTO persons (firstname, lastname, age, mail, location)
VALUES
('$firstname','$lastname','$age', '$mail','$location')";
甚至更好的准备陈述:http://php.net/manual/de/mysqli.quickstart.prepared-statements.php
第三:你不应该混合mysqli_ *和mysql_ * API调用。
答案 1 :(得分:0)
你的错误一词
Location:<select name="education">
将其更改为
Location:<select name="location">
答案 2 :(得分:0)
您的位置信息名称为education
。将其更改为location
是:
Location:<select name="education">
应该是
Location:<select name="location">
答案 3 :(得分:0)
您的代码存在一些问题。
从<select name="education">
和$_POST['location']
开始,这应该是最有可能的,并且是您想要的<select name="location">
- 您使用了错误的名称。
mysql_
的函数=&gt; mysql_real_escape_string
。 in,以及使用mysql_real_escape_string
$firstname = trim(mysql_real_escape_string($_POST['firstname']));
应该读作(同时为其他人应用相同的函数语法)
$firstname = trim(mysqli_real_escape_string($con,$_POST['firstname']));
mysqli_
和mysql_
函数在代码执行期间(在同一页面上)或使用基于mysqli_
的数据库连接时不会混合在一起,这就是你的。 / p>
mysqli_query($con,$sql)
现在,您需要确保在使用$firstname = trim(mysqli_real_escape_string($con,$_POST['firstname']));
等之前已成功放置数据库连接。
另外,使用变量$firstname
等,而不是('$_POST[firstname]'...)";
,如('$firstname', '$lastname', '$age', '$mail', '$location')
。
因为在你的VALUES中使用$_POST[firstname]'
等,你没有使用mysql_real_escape_string()
函数,也没有使用POST数据;它就在那里,什么都不做。
mysql_real_escape_string()
的 旁注 - 应该如前所述mysqli_
。
据说,用use prepared statements做prepared statements或 PDO ,它更安全;)
另外,在打开<?php
标记后,将error reporting添加到文件的顶部。
error_reporting(E_ALL);
ini_set('display_errors', 1);
将触发/显示发现的任何错误。
相关功能链接:
mysqli_real_escape_string()
- 您应该使用的内容。
mysql_real_escape_string()
- 不与mysqli_
混合