【问题标题】:Checkbox insert 1 or 0 into SQL database复选框将 1 或 0 插入 SQL 数据库
【发布时间】:2016-06-09 21:04:24
【问题描述】:

我正在建立一个系统,该系统对一个问题有很多答案。因此用户可以点击一个按钮来动态添加答案。我希望用户能够勾选正确答案旁边的复选框,然后将其插入数据库(1 是正确的)。

这是我所拥有的:

HTML:

<div id="answers">
 <label class="answer">
  Answer:
   <input type="text" name="ab_name[]" value=""/>
    Correct?
   <input type="checkbox" name="ab_correct[]" value="0">
 </label>
</div>

PHP

$ab_name = $_POST['ab_name'];
$ab_correct = $_POST['ab_correct'];

$sql = "INSERT INTO answers_bank (`ab_name`, `ab_correct` ) VALUES (:ab_name, :ab_correct )";
$stmt = $db->prepare($sql);

foreach ($_POST['ab_name'] as $ab_name) {
$stmt->bindValue(':ab_name', $ab_name);
$stmt->bindValue(':ab_correct', $ab_correct);
$stmt->execute();
}

像这样:

SQL 插入ab_name,但ab_correct 始终设置为1,无论是否勾选。请问有这方面的指导吗?

【问题讨论】:

  • 你并没有循环遍历 $ab_correct 数组。
  • 如果ab_correct没有被选中就不会发送,你是在运行JS来检查吗? $ab_correct$_POST['ab_correct'] 是数组。

标签: php mysql checkbox pdo


【解决方案1】:

您可以使用for 循环而不是foreach。好吧,首先,您需要确保两个数组具有相同数量的元素。

if(count($_POST['ab_name']) != count($_POST['ab_correct']))
    exit('Not same amount of elements.');

然后,遍历它们中的每一个。

for($i=0; $i<count($_POST['ab_name']); $i++){
    $stmt->bindValue(':ab_name', $_POST['ab_name'][$i]);
    $stmt->bindValue(':ab_correct', $_POST['ab_correct'][$i]);
    $stmt->execute();
}

【讨论】:

  • 感谢您的回答。它没有达到好的退出语句。但是我收到:“SQLSTATE[HY093]:无效的参数号:绑定变量的数量与令牌的数量不匹配”
  • 糟糕,您必须在 for 循环中添加 $stmt = $db-&gt;prepare($sql); 才能每次重置绑定。
  • 原来是我将 SQL 放在 for 循环之后而不是之前。已解决谢谢!
【解决方案2】:
if(isset($_POST['$ab_correct'])){$update = 1;}else{$update = 0;}

foreach ($_POST['ab_name'] as $ab_name) {
$stmt->bindValue(':ab_name', $ab_name);
$stmt->bindValue(':ab_correct', $update);
$stmt->execute();

}

【讨论】:

  • 谢谢 - 这就是我想要的,似乎如果勾选其中一个复选框,它将为我不理解的所有答案插入 1
猜你喜欢
  • 2015-07-19
  • 2014-04-17
  • 1970-01-01
  • 2014-06-01
  • 2010-09-19
相关资源
最近更新 更多