从mySql表的下拉列表中插入数据

时间:2014-08-15 16:02:36

标签: php mysql

我想创建一个表单,其中用户插入数据,如名字,姓氏,年龄,邮件和位置,这些值在数据库中更新。所有变量都通过文本插入但位置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之外的所有值都保存在数据库中。 请帮我解决这个问题。

4 个答案:

答案 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 statementsprepared statements PDO ,它更安全;)

另外,在打开<?php标记后,将error reporting添加到文件的顶部。

error_reporting(E_ALL);
ini_set('display_errors', 1);

将触发/显示发现的任何错误。


相关功能链接: