【问题标题】:sending multiple records to MySQL from multiple select box从多个选择框向 MySQL 发送多条记录
【发布时间】:2009-06-30 12:29:02
【问题描述】:

我正在尝试根据从多选框中选择的选项数量将多行插入到 MySQL 表中。目前它正在插入一行(无论选择了多少选项),但每次“策略名称”列都是空的。

关于如何插入多行以及为什么不将选项值发送到表中的任何想法?

这是表格:

<form method="POST" action="update4.php">

<input type="hidden" name="id" value="1">

<p class="subheadsmall">Strategies</p>

<p class="sidebargrey">

<?php

            $result = mysql_query("SELECT strategyname FROM sslink WHERE study_id = '{$_GET['id']}'");
                if (!$result) {
                    die("Database query failed: " . mysql_error());
                }

while($row = mysql_fetch_array($result)) {
    $strategyname = $row['strategyname'];


    echo $strategyname.'<br />';
}

?>
        <p class="subheadsmall">Add a strategy... (hold down command key to select more than one)</p>

<select name="strategylist" multiple="multiple">
     <?php

            $result = mysql_query("SELECT * FROM strategies");
                if (!$result) {
                    die("Database query failed: " . mysql_error());
                }

while($row = mysql_fetch_array($result)) {
    $strategylist = $row['name'];
    $strategyname = htmlspecialchars($row['name']);
    echo '<option value="' . $strategylist . '" >' . $strategyname . '</option>' . '\n';
}

?>
</select>
    </p>



<input type="submit" class="box" id="editbutton" value="Update Article">

</form>

这就是将它发送到数据库的内容:

<?php
$id=$_POST['id'];
$test=$_POST['strategylist'];
$db="database";

$link = mysql_connect("localhost", "root", "root");
//$link = mysql_connect("localhost",$_POST['username'],$_POST['password']);
if (! $link)
die("Couldn't connect to MySQL");
mysql_select_db($db , $link) or die("Select Error: ".mysql_error());
//for($i=0;$i<sizeof($_POST["test"]);$i++)
//{
//$sql = "insert into tbl_name values ($_POST["test"][$i])"; }
//sql = "INSERT INTO table_name VALUES ('" . join(",",$_POST["test"]) . "')";
$result=mysql_query("INSERT INTO sslink (study_id, strategyname) VALUES ('$id','" . join(",",$_POST["strategylist"]) . "')")or die("Insert Error: ".mysql_error());
mysql_close($link);
print "Record added\n";
?>

【问题讨论】:

    标签: php mysql select


    【解决方案1】:

    几点:

    • 您的 select 需要命名为 strategylist[] 以便告诉 PHP 它将包含一个数组而不是单个值
    • 然后,您的插入代码需要遍历该数组,为其包含的每个元素创建一个新的插入,除非(看起来)您希望将所有这些选项连接到单个行的字段中。

    目前,您的表单只返回一个选项(从 PHP 的角度来看),所以它只会插入一行。

    要遍历数组,请使用如下代码:

    foreach($_POST["strategylist[]"] as $s) {
        # do the insert here, but use $s instead of $_POST["strategylist[]"]
        $result=mysql_query("INSERT INTO sslink (study_id, strategyname) " .
           "VALUES ('$id','" . join(",",$s) . "')")
            or die("Insert Error: ".mysql_error());
    }
    

    【讨论】:

    • 谢谢!我已经完成了您所说的操作,现在信息正在传递到数据库中。它将两个选项都选中,但插入同一行,用逗号分隔。理想情况下,我希望每个选项都放在自己的行中。我需要在哪里插入代码来迭代数组?感谢您的帮助!
    • 目前您在插入中使用 $_POST["strategylist[]"],但这是一个数组。我已经编辑了帖子以展示如何做到这一点。
    【解决方案2】:

    两件事:

    1. 如果您查看带有多项选择的页面的源代码,您能看到那里的&lt;option value="something"&gt; 行吗?值是否为空?我觉得奇怪的是,在你的文件顶部你使用的是$row['strategyname'],后来你使用的是$row['name']。我怀疑这可能是空的StrategyName 列的原因。

    2. 要处理多个选择,您应该将选择标签指定为

      <select name="strategylist[]" multiple="multiple">
      

      额外的[] 告诉PHP 形成一个包含所有选择的数组。然后你可以像这样循环数组:

      $strategylist = $_POST['strategylist'];
      for ($i = 0; $i < count($strategylist); $i++) {
          $strategyname = $strategylist[$i];
          // Insert a record...
      }
      

    【讨论】:

    • 一个好主意是检查和转义你插入到数据库中的任何内容,即使它的来源是你自己的输出。
    • 谢谢!我已经完成了您所说的操作,现在信息正在传递到数据库中。它将两个选项都选中,但插入同一行,用逗号分隔。理想情况下,我希望每个选项都放在自己的行中。我需要在哪里插入代码来迭代数组?感谢您的帮助!
    【解决方案3】:
    // first you need to define your output as one variable if you don't like the loop 
       if($_POST){
       $sum = implode(", ", $_POST[select2]);
       echo $sum.".";
    }
    // the variable sum is the one you are seeking for you can insert it to the database
    // if you want to enter every peiece of the array in a new field you should use
    // different select names
    

    【讨论】:

      猜你喜欢
      • 2021-03-11
      • 1970-01-01
      • 2010-11-15
      • 1970-01-01
      • 2022-01-24
      • 2011-09-17
      • 1970-01-01
      • 2016-08-13
      • 2023-03-15
      相关资源
      最近更新 更多