2016-02-29 5 views
1

Как сохранить данные из массива CheckBox в базу данных

function check_uncheck(truefalse) { 
 
    var boxes = document.forms[0].chkboxarray.length; 
 
    var form = document.getElementById('checkForm'); 
 
    for (var i = 0; i < boxes; i++) { 
 
    if (truefalse) { 
 
     form.chkboxarray[i].checked = true; 
 
    } else { 
 
     form.chkboxarray[i].checked = false; 
 
    } 
 
    } 
 
}
<form name="checkForm" id="checkForm" method="post" action="checkboxes1.php"> 
 
    <input type="checkbox" name="chkboxarray" value="1" /><br /> 
 
    <input type="checkbox" name="chkboxarray" value="2" /><br /> 
 
    <input type="button" name="CheckAll" value="Check All Boxes" onclick="check_uncheck(true)" /> 
 
    <input type="button" name="UncheckAll" value="Uncheck All Boxes" onclick="check_uncheck(false)" /> 
 
    <input type="submit" value="Save"> 
 

 
</form> 
 

 
The snippet shows how it works without connection to a database

Я пытаюсь сохранить данные, которые передаются из контрольного списка в базу данных, но я застрял. Я думал о том, чтобы использовать foreach, но я не знаю, что в него положить.

я хоть положить его как:

foreach($_POST['id'] as $add){ 
insert into database... 
} 

Как это сделать?

Если я сделаю это, так как Fred-ii и xjstratedgebx предложили, где я только что изменил name="chkboxarray" to name="chkboxarray[]", тогда код javascript перестанет работать.

<?php 
include '../conec.php'; 
mysql_select_db("test",$conec)or die('Database does not exist.') or die(mysql_error()); 

$sql = mysql_query("SELECT * FROM user WHERE state='Not Signed Up'"); 
?> 

<form name="checkForm" id="checkForm" method="post" action="checkboxes1.php"> 
    <?php 
    while($row = mysql_fetch_array($sql)){ 
     $id = $row['id']; 
     $name = $row['name']; 
     $lName= $row['lName']; 
     $concate = $name.' '.$lName; 
     echo '<input type="checkbox" name="chkboxarray" value="'.$id.'" />'.$concate.'<br />'; 
    } 


    ?> 
    <!--<input type="checkbox" name="chkboxarray" value="1" /><br /> 
    <input type="checkbox" name="chkboxarray" value="2" /><br />--> 
    <input type="button" name="CheckAll" value="Check All Boxes" onclick="check_uncheck(true)" /> 
    <input type="button" name="UncheckAll" value="Uncheck All Boxes" onclick="check_uncheck(false)" /> 
    <input type="submit" value="Save"> 

</form> 

<script type="application/javascript"> 
function check_uncheck(truefalse){ 
    var boxes = document.forms[0].chkboxarray.length; 
    var form = document.getElementById('checkForm'); 
    for(var i=0;i < boxes;i++){ 
     if (truefalse) { 
      form.chkboxarray[i].checked=true; 
     } else { 
      form.chkboxarray[i].checked=false; 
     } 
    } 
} 
</script> 
+0

Не могли бы вы объяснить себе litlte немного лучше ? – wilsotobianco

+0

Что еще вам нужно знать? – learningbyexample

ответ

2

Если изменить имя своего флажка от «chkboxarray» до «chkboxarray []», то все коробки, которые проверяются при отправке формы будет проходить их значения в виде массива на сервер под ключ из "chkboxarray".

В принципе, изменить эту строку:

echo '<input type="checkbox" name="chkboxarray" value="'.$id.'" />'.$concate.'<br />'; 

To:

echo '<input type="checkbox" name="chkboxarray[]" value="'.$id.'" />'.$concate.'<br />'; 

В результате, если вы var_dump $_POST супер глобальные, вы должны увидеть что-то вроде:

array(1) { 
    [chkboxarray]=> 
    array(2) { 
     [0]=> 
     string(1) "3" 
     [1]=> 
     string(1) "4" 
    } 
} 

В приведенном выше примере флажки для идентификаторов 3 и 4 были проверены, поэтому они были отправлены на службу р.

Как только у вас есть этот массив, вставка его в вашу базу данных сильно зависит от того, что вы пытаетесь выполнить, и схемы вашей базы данных.

Надеюсь, что помогает.

Кроме того, справедливости ради, это именно то, что @Fred означало в его комментарии.

Edit 1

Чтобы сделать яваскрипт работы с изменением названия входного сигнала, вам необходимо обновить все места в вашем JavaScript, где вы ссылающиеся имя входа на новое имя (chkboxarray []).

Результирующий код должен выглядеть следующим образом:

<script type="application/javascript"> 
    function check_uncheck(truefalse) { 
     var boxes = document.forms[0]["chkboxarray[]"].length; 
     var form = document.getElementById('checkForm'); 
     for (var i = 0; i < boxes; i++) { 
      if (truefalse) { 
       form["chkboxarray[]"][i].checked = true; 
      } else { 
       form["chkboxarray[]"][i].checked = false; 
      } 
     } 
    } 
</script> 

Я создал скрипку, чтобы показать, что это работает для проверки/убрав все коробки: https://jsfiddle.net/solvomedia/3Ln468u3/

+0

* «Кроме того, справедливости ради, это именно то, что имел в виду @Fred в своем комментарии». * - Спасибо за упоминание. Меньше «ты» видел мой комментарий и говорил что-то об этом, на что я в итоге удалил. Я не получил ответа через 5 минут, и это срок, который у меня есть. Когда они не комментируют, я удаляю и двигаюсь дальше. Мой комментарий состоял только из 'name =" chkboxarray "' => 'name =" chkboxarray [] ", поэтому я решил, что они знают, что с этим делать, но, вероятно, не (* трудно сказать *). Я желаю вам успехов и надеюсь, что он решит код OP.* Cheers * –

+0

Извините, Fred-ii- я не комментировал, потому что, когда увидел, что я уже знал, что могу это сделать, но проблема в том, что мой код javascript больше не функционирует 'var boxes = document.forms [ 0] .chkboxarray.length; ' – learningbyexample

+0

Прошло много времени с тех пор, как я попытался получить поля формы с прямым JavaScript, и это не проверено, но попробуйте изменить эту строку на' var boxes = document.forms [0] ["chkboxarray [ ] "]. length;' – stratedge

Смежные вопросы