对于所选的每个表单选项,添加到mysql

时间:2015-03-11 10:12:38

标签: php mysql forms select

我有一个多选形式:

<form method="post" action="register_results.php" name="registerform" class="form-horizontal" role="form">

    <div class="label">Select Name:</div>
    <select name="names" multiple="yes" size="15">
    <option value = "">---Select---</option>
    <?php
    while ( $row=mysqli_fetch_assoc($result)) {
      echo "<option value='".$row['registrant_name']."'>".$row['registrant_name']."</option>";
    }
    mysqli_close($con);
    ?>
    </select>  
</form>

register_results.php文件如下所示:

$registrant_name = $_POST['names'];
$event_result = $_POST['result'];


$query = "UPDATE events_regged SET result = $event_result WHERE event_name='event10' AND registrant_name=('$registrant_name') ";
$result = mysqli_query($con, $query);

如果在表单中选择了多个名称,我希望能够添加多个mysql行(每个用户名一行)。我怎么能这样做?

4 个答案:

答案 0 :(得分:2)

使用

<select name="names[]" multiple="yes" size="15">

而不是

<select name="names" multiple="yes" size="15">

并使用foreach

foreach($_POST['names'] as $value)
{
//your query goes here
}

答案 1 :(得分:1)

您的代码中需要进行一些更改

<select name="names" multiple="yes" size="15">
              ^^^^^

应该是

<select name="names[]" multiple size="15">

这将导致数组产生

的结果
$registrant_name = $_POST['names']

将是一个数组

答案 2 :(得分:0)

将表单选择元素名称从“names”更改为“names []”,然后您可以访问已发布值的数组 - 然后您可以迭代这些值。

答案 3 :(得分:0)

首先更改您的表单如下(在Sql中使用Id而不是名称(字符串)更优雅,更快):

<select name="ids[]" multiple size="15">
    <option value = "">---Select---</option>
     <?php
       while ( $row=mysqli_fetch_assoc($result)) {
      echo "<option value='".$row['registrant_id']."'>".$row['registrant_name']."</option>";
}
     mysqli_close($con);
?>
</select> 

在PHP中使用foreach:

 $registrant_ids = $_POST['ids'];
 $event_result = $_POST['result'];
 foreach($registrant_ids as $id)
   {
     $query = "UPDATE events_regged SET result = $event_result WHERE event_name='event10' AND registrant_id=".$id;
     $result = mysqli_query($con, $query);
   }