【问题标题】:Submiting multiple values from a dropdown menu in PHP从 PHP 的下拉菜单中提交多个值
【发布时间】:2012-11-30 19:58:26
【问题描述】:

我希望有人能够帮助我解决这个问题!

我正在用 php 开发一个 Web 应用程序,我想提交我的一位同事的活动。有时该活动由多个同事完成,因此我希望能够提交该活动,但以某种方式保存所有参与该活动的同事。

我决定使用下拉菜单,即 php 中的 select 标签。 html代码如下:

<div id="placeholder">
<SELECT id="activeMember" NAME=name>
    <OPTION VALUE=0>Choose
    <OPTION VALUE=1>Mark
    <OPTION VALUE=2>James
    <OPTION VALUE=3>Emily
 </SELECT>

<button type="button" name="add" onclick="Add();">+</button>​

下面是javascript代码:

var _counter = 0;
function Add() {
    _counter++;
    var oClone = document.getElementById("activeMember").cloneNode(true);
    oClone.id += (_counter + "");
    document.getElementById("placeholder").appendChild(oClone);
}​

你可以在这个LINK上看到它是如何工作的

按下提交按钮时,会调用另一个脚本,将活动保存在我的数据库中:

$connection = mysql_connect("$host", "$username", "$password") or die("cannot connect");
mysql_select_db("$db_name") or die("cannot select DB");

$member = $_POST['name'];
$summary = $_POST['summary];
$date = date("l F d, Y");
$query = mysql_query("INSERT INTO activities (member, activitySummary, date) VALUES ( '" . $member . "', '" . $summary . "', $date."' )");

现在我的问题来了。当我选择 Mark and James 时,如果 James 是第二个选择的人,那么只有在我提交表单后才会为他保存活动。马克一直被忽略。此外,如果选择了 Mark、James 和 Emily,则仅为 Emily 保存活动。因此,表单仅保存最后选择的同事的活动。

有没有人知道如何避免这种情况并成功为一项活动保存多个同事/成员?

【问题讨论】:

  • 旁注:1) 清理您的输入!,2) 不要将mysql_ 函数用于新开发。看PDOMySQLi
  • 1) 你能详细说明一下吗?你所说的“消毒”到底是什么意思,2)你能说出为什么吗?一切似乎都正常。
  • 当然。 1) 通过在查询中使用逐字输入,您很容易受到SQL injection 的攻击。为了帮助使用mysql_ 库缓解这种情况,请在查询中使用mysql_real_escape_string($member)(以及其他值)。 2) mysql_ 扩展是旧的,不再积极开发,并且将被弃用(很快?)。 PDO 和 MySQLi 更新且功能更丰富,提供面向对象的使用和参数化查询(SQL 注入预防技术比盲串转义更好)。这是一条评论的大量信息,但希望这是一个开始。
  • 忘记了 this link 的 MySQL API 比较。使用旧的 mysql_ 扩展本身并没有错误,但建议您使用较新的扩展,以便您的代码更加面向未来,并且您可以利用更强大的功能。跨度>

标签: php drop-down-menu multiple-value


【解决方案1】:

将您的输入重命名为&lt;SELECT id="activeMember" NAME="name[]"&gt;,然后当数据被提交时,它将在一个数组中。

你必须修改你的 PHP 代码来处理传入的数组。

$members = $_POST['name'];
$summary = $_POST['summary'];
$date = date('l F d, Y');

foreach ($members as $member) {
    if (empty($member)) {
        continue;
    }

    $query = mysql_query("INSERT INTO `activities` (`member`, `activitySummary`, `date`) VALUES ( '{$member}', '{$summary}', '{$date}' )");
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多