将html select form的值插入mysql数据库

时间:2014-02-25 10:42:45

标签: php html mysql forms

我想将选定的“选择表单”的值插入到我的mysql数据库中。

我怎样才能得到正确的价值?

<form action='' method='post'>
 <select name="myselectbox">
  <option name="myoption1" value="myoption1">myoption1</option>
  <option name="myoption2" value="myoption2">myoption2</option>
  <option name="myoption3" value="myoption3">myoption3</option>
  <option name="myoption4" value="myoption4">myoption4</option>
 </select>
<input type='submit' value='submit'/>
</form>
这样的事情? (这个显然不起作用..)

$sql = "INSERT INTO Entries (myoption1) VALUES ('$_POST[myselectbox]')";

4 个答案:

答案 0 :(得分:3)

您必须将select标记包装到表单标记中。

<form action='' method='post'>
<select name="myselectbox">
   <option name="myoption1" value="myoption1">myoption1</option>
   <option name="myoption2" value="myoption2">myoption2</option>
   <option name="myoption3" value="myoption3">myoption3</option>
   <option name="myoption4" value="myoption4">myoption4</option>
</select>
<input type='submit' value='submit'/>
</form>

提交表单后,您将获得$_POST['myselectbox']的post变量,该变量可以附加到mysql查询中,就像您已经做过的那样。但是为了更好的方式,不要只是这样添加它,但检查表单是否已提交,并且在附加之前是否可以使用后期变量。 例如:

if(!empty($_POST['myselectbox'])){
    /*.. do your query section... */
}

答案 1 :(得分:1)

您的SQL命令中有错误,$_POST需要将html名称包含在引号中,例如=&gt; $_POST['some_name']

$sql = "INSERT INTO Entries (myoption1) VALUES ('$_POST[myselectbox]')"; /* ^^ missing quotes here*/

以这种方式尝试:

$sql = "INSERT INTO Entries (myoption1) VALUES (".$_POST['myselectbox'].")";

答案 2 :(得分:1)

假设您的表单是正确的,并且将您想要的值发布到您的脚本中。

(您已将代码与echo一起使用以确保是这种情况?)

将数据发送到SQL语句并因此发送到mysql的最简单可靠的方法是使用预准备语句。

看看这里:http://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php

基本上你编写没有变量的SQL语句(替换为?)然后告诉mysql稍后用你的变量执行语句。它避免了逃避字符串的需要,并担心如何构建。

例如,您可能有:

// Connect to mysql

$mysqli = new mysqli('where your server is', 'my_user', 'my_password', 'world');

// Build the initial statement - easier to read as you don't have your string concatenation here

$stmt = $mysqli->prepare( "INSERT INTO Entries (myoption1) VALUES (?)" );

// Tell mysql that the '?' should be replaced with the value in your post array

$stmt->bind_param( "s", $POST['myselectbox'] );

// Execute the statement

$stmt->execute()

显然你也应该添加错误处理,但是文档涵盖了这个基础知识。

SQL注入

使用预准备语句的一个主要原因是它避免了SQL注入攻击。

还有其他方法,但在我看来,这是最简单的解决方案。

SQL注入攻击是指某人试图通过将“注入”其他SQL语句到您的语句中来更改正在运行的SQL语句的情况。

以您的代码为例,您可以执行以下语句:

$sql = "INSERT INTO Entries (myoption1) VALUES ('". $_POST['myselectbox'] ."')";

通常会收到(让我们建议)类似myoption1的内容。

这将导致SQL为:

INSERT INTO Entries (myoption1) VALUES ('myoption1');

如果有人决定,他们可以发送'='' OR '1'='1

这将导致SQL为:

INSERT INTO Entries (myoption1) VALUES (''='' OR '1'='1');

这显然是非常不同的。

或者,更糟糕的是发送'=')'; DROP TABLE Entries WHERE (''='

这将导致SQL为:

INSERT INTO Entries (myoption1) VALUES (''=''); DROP TABLE Entries WHERE (''='');

使用准备好的语句

简单地说,但是使用准备好的语句,你告诉mysql你发送的是一个文字字符串,用作参数。它绝不能被视为陈述本身的一部分,因此上述内容根本不可能。

更加安全。

我希望这更清楚。如果您想了解更多信息,我建议您独立研究......

答案 3 :(得分:0)

$value = mysql_real_escape_string($_POST['myselectbox']);    
$sql = "INSERT INTO Entries (myoption1) VALUES ($value)";