【发布时间】: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 但这是一个我还没有升级的旧网站..
【问题讨论】:
-
强制警告:请不要在生产中使用此代码..。清理你的查询以防止一些 XSS .. 你也检查过这个相关的问题吗? stackoverflow.com/questions/5640298/…
-
仅供参考,you shouldn't use
mysql_*functions in new code。它们不再维护and are officially deprecated。看到red box?改为了解prepared statements,并使用PDO 或MySQLi - this article 将帮助您决定哪一个最适合您。