我想将选定的“选择表单”的值插入到我的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]')";
答案 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)";