2016-02-26 122 views
1

我正在設置一個系統,該問題有很多答案。因此用戶可以點擊一個按鈕來動態地添加答案。我希望用戶能夠勾選正確答案旁邊的複選框,然後將其插入數據庫(1正確)。複選框將1或0插入到SQL數據庫中

以下是我有:

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(); 
} 

像這樣:

This should give more of an idea:

的SQL插入ab_name,但ab_correct總是設置爲1,如果是勾號或未勾選。有關於此的任何指導?

+0

你不能通過$ ab_correct陣列循環雖然。 –

+0

如果'ab_correct'沒有被選中,它將不會被髮送,你是否運行JS來檢查它? '$ ab_correct'和'$ _POST ['ab_correct']'是數組。 – chris85

回答

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(); 
} 
+0

謝謝你的回答。它沒有達到很好的退出聲明。但是,我收到:「SQLSTATE [HY093]:無效的參數編號:綁定變量的數量與令牌的數量不匹配」 – StackMeUp123

+0

糟糕,您必須添加'$ stmt = $ db-> prepare($ sql);'循環以每次重置綁定。 –

+0

原來,這是我把我的SQL放在for循環之後而不是之前。答案已經解決了,謝謝! – StackMeUp123

0
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(); 

} 
+0

謝謝 - 這就是我所要做的,似乎如果勾選了其中一個複選框,它會爲所有我不明白的答案插入1 – StackMeUp123

相關問題