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
    ?>