Php 处理来自多个选择字段的数据
我有一个多选字段,设计如下:Php 处理来自多个选择字段的数据,php,mysql,arrays,forms,multi-select,Php,Mysql,Arrays,Forms,Multi Select,我有一个多选字段,设计如下: <select name="deductions[]" multiple="multiple"> <option>Option 1</option> <option>Option 2</option> <option>.......</option> </select> 选择1 选择2 ....... 我想使用PHPPost从上面的select字段中获取db的值 &
<select name="deductions[]" multiple="multiple">
<option>Option 1</option>
<option>Option 2</option>
<option>.......</option>
</select>
选择1
选择2
.......
我想使用PHPPost从上面的select字段中获取db的值
<?php
$deds=$_POST['deductions'];
$deds_joined=join(',',$deds);
$sql=mysql_query("insert into mytable(deduction) values($deds_joined)");
/*code continues*/
试试看
首先:
。它们不再得到维护。看到了吗?相反,学习,并使用,或-将帮助您决定哪一个。如果您选择PDO
遵循这一建议变得比以往任何时候都重要,ext/MySQL现在已被弃用,使用它将发出E_弃用的
错误,从PHP5.5开始,有一天它将从核心语言中完全删除。话虽如此,以下内容适用于所有数据库的所有驱动程序
在接下来的解释中,我将假设您出于某种原因无法使用MySQLi或PDO(请注意,这里唯一令人满意的原因是它们不可用,“我不知道如何使用它们”不是借口),并且您被迫使用ext/MySQL。如果您能够使用任何一个较新的驱动程序,那么您就能够使用准备好的语句,而这些都不适用。所以,考虑到这一点
下面我们来看看前面的答案有什么不对。这主要围绕转义用户输入。它使用的mysql\u real\u escape\u string()
是一种毫无意义的方法。这应该用于转义单个字符串文字,而绝对不能转义任何其他文字。它不能用于有效地转义数字,也不能用于转义SQL中不仅仅是值的部分
以下两个代码片段显示了正确的方法,具体取决于数据是什么,关键是数据的类型
如果值是字符串(通常是CHAR
或VARCHAR
字段),我们将执行以下操作:
但在这种情况下,值通常只是数字,在这种情况下,我们需要做的就是确保PHP使用正确的数据类型表示它们,因为当它们转换回字符串以用于查询时,它们将自动安全:
// First convert the array values to integers
$deds = array();
foreach ($_POST['deductions'] as $ded) {
$deds[] = (int) $ded;
}
// Now join them together in an SQL syntax
$deds_joined = join('), (', $deds);
// Now they can safely be used in the query
$query = "INSERT INTO mytable (deduction) VALUES ($deds_joined)";
这段代码显然假设数据是整数类型,只需将(int)
转换为(float)
即可轻松处理浮点
还值得注意的是,字符串方法也可以安全且成功地用于数值,因为MySQL还将值转换为正确的类型。但一般来说,在查询中使用正确的类型表示传递数据会更好、更高效。我也遇到了同样的问题,这对我很有帮助。以表格形式收集数据
<form action="page.php" method="post">
<select name="requests[]" multiple="multiple=" class="selectpicker">
<option value="one">one</option>
<option value="two">two</option>
<option value="three">three</option>
<option value="four">four</option>
<option value="five">five</option>
<option value="six">six</option>
</select>
<input type="submit" value="submit" />
</form>
一
二
三
四
五
六
将其用作page.php
<?php
$contents = ob_get_contents(); //used this this to generate a variable that can be posted ?>
<?php ob_start(); ?>
<?php
$requests=$_POST['requests'];
if ($requests){
foreach ($requests as $request){echo $request,','."";}
}
?>
<?php $contents = ob_get_contents();//a variable that was generated ?>
<?php
$h =$contents; // just renaming
$sql = "INSERT INTO mytable (requests) VALUES (:h)";//dont forget to connect to you database
$q = $db->prepare($sql);
$q->execute(array(':h'=>$h));
header("location: mypage.php?"); //redirect to a page after posting into mytable
?>
很好,我们正在取得进展。我已经成功地将它作为我想要的1,2,3放在db中。
<form action="page.php" method="post">
<select name="requests[]" multiple="multiple=" class="selectpicker">
<option value="one">one</option>
<option value="two">two</option>
<option value="three">three</option>
<option value="four">four</option>
<option value="five">five</option>
<option value="six">six</option>
</select>
<input type="submit" value="submit" />
</form>
<?php
$contents = ob_get_contents(); //used this this to generate a variable that can be posted ?>
<?php ob_start(); ?>
<?php
$requests=$_POST['requests'];
if ($requests){
foreach ($requests as $request){echo $request,','."";}
}
?>
<?php $contents = ob_get_contents();//a variable that was generated ?>
<?php
$h =$contents; // just renaming
$sql = "INSERT INTO mytable (requests) VALUES (:h)";//dont forget to connect to you database
$q = $db->prepare($sql);
$q->execute(array(':h'=>$h));
header("location: mypage.php?"); //redirect to a page after posting into mytable
?>