【问题标题】:PHP insert array from multiple checked checkbox and text input into mySQLPHP从多个选中的复选框和文本输入中插入数组到mySQL
【发布时间】:2017-09-14 12:28:50
【问题描述】:

我在尝试插入来自 php 中动态生成的表单的信息时遇到问题。 该表单由可变数量的输入组成,这些输入全部由四个输入元素组成。请看下面我的表单是如何生成的:

<?php $result = mysql_query("SELECT id,name,description FROM todo_q WHERE todo_id = $todo_id AND active = 'y'");
                while($todo_q=mysql_fetch_array($result)){

                                                echo '<label>';
                                                echo $todo_q['name'];
                                                echo '</label><br>'; 

                                                echo '<input type="checkbox" name="value[]" value="y" />';
                                                //echo '<input type="hidden" name="value[]" value="n" />';

                                                echo '<label>';
                                                echo $todo_q['description'];
                                                echo '</label><br>';
                                                echo '<input type="text" id="comment" name="comment[]">';

                                                echo '<input type="hidden" name="user_id[]" value="';
                                                echo $user_id;
                                                echo '" />';
                                                echo '<input type="hidden" name="todo_id[]" value="';
                                                echo $todo_q['id'];
                                                echo '" />';
                                                echo '<HR>';

                                                }?> 

这就是我尝试将信息插入 mySQL 的方式:

    $query = "INSERT INTO todo_a (value, comment, user_id, todo_id) VALUES ";
$query_parts = array();
for($x=0; $x<count($_POST["value"]); $x++){
    $query_parts[] = "('" . $_POST['value'][$x] . "','" . $_POST['comment'][$x] . "'," . $_POST['user_id'][$x] . "," . $_POST['todo_id'][$x] . ")";


    }
    $q_parts = $query_parts;

        foreach ($q_parts as $q_p){

            $insert = ($query .= implode(',', $query_parts));
            $result = mysql_query($insert);
        }

我遇到的问题是,当检查所有复选框和 cmets 时,所有内容都插入到数据库的右行,但如果我跳过检查一个复选框,那么它就会搞砸......

如果选中复选框和/或输入评论,我希望它插入一个新行。 谁能指出我正确的方向?

我试图放置一个隐藏的输入来获取未选中复选框的值,但我似乎没有工作..这就是我注释掉隐藏复选框的原因。

PS。我知道我应该使用 mysqli 但这是一个我还没有升级的旧网站..

【问题讨论】:

标签: php mysql checkbox


【解决方案1】:

您需要在输入复选框和注释名称中添加索引,例如:

$cbIndex = 0;
while($todo_q=mysql_fetch_array($result)){  
    echo '<label>';
    echo $todo_q['name'];
    echo '</label><br>'; 
    // Generate checkbox with index of current result
    echo '<input type="checkbox" name="value[' . $cbIndex . ']" value="y" />';
    // Generate comment with index of current result
    echo '<input type="text" id="comment" name="comment[' . $cbIndex . ']">';
    echo '<input type="hidden" name="user_id[' . $cbIndex . ']" value="';
    echo $user_id;
    echo '" />';
    echo '<input type="hidden" name="todo_id[' . $cbIndex . ']" value="';
    echo $todo_q['id'];
    echo '" />';
    echo '<HR>';
    // Inc of index
    $cbIndex++;
}

当您提交表单时,只有选中的复选框会出现在 $_POST["value"] 中:

foreach ($_POST["value"] as $cbIndex => $cbValue) {
    $query_parts[] = "('" . $_POST['value'][$cbIndex] . "','" . $_POST['comment'][$cbIndex] . "'," . $_POST['user_id'][$cbIndex] . "," . $_POST['todo_id'][$cbIndex] . ")";
    // or
    $query_parts[] = "('" . $cbValue . "','" . $_POST['comment'][$cbIndex] . "'," . $_POST['user_id'][$cbIndex] . "," . $_POST['todo_id'][$cbIndex] . ")";
}
...

顺便说一句,您不需要存储复选框的值,它将一直是 'y'。

INFO 这对于测试应用程序来说很好,但正如@Pogrindis 和@John Conde 所评论的那样,它不是安全代码。 MySQLi/PDO + prepare 语句将避免 SQL 注入。

【讨论】:

  • 感谢@camille 的建议。它似乎工作。而且我不会在“实时”应用程序中使用它。目前这只是一个测试。
  • 完美!很高兴能帮助你:-D
猜你喜欢
  • 2021-07-14
  • 2014-05-22
  • 2014-01-20
  • 1970-01-01
  • 2020-07-24
  • 2017-02-15
相关资源
最近更新 更多