За последние 24 часа нас посетили 59595 программистов и 1772 робота. Сейчас ищут 1506 программистов ...

Добавление сразу нескольких checkbox в базу данных.

Тема в разделе "PHP для новичков", создана пользователем prokuror_89, 15 май 2011.

  1. prokuror_89

    prokuror_89 Активный пользователь

    С нами с:
    13 янв 2011
    Сообщения:
    26
    Симпатии:
    0
    У меня на сайте есть несколько checkbox. Вот форма где они размещены:
    HTML:
    1.  
    2. <form name='form1' method='post' action='add_ogo.php'>
    3. <input type="checkbox" name="options" value="повна комплектація"  /> повна комплектація
    4. <input type="checkbox" name="options" value="шкіра"  />шкіра
    5. <input type="checkbox" name="options" value="кондиціонер" />кондиціонер
    6. <input type="checkbox" name="options" value="клімат контроль"  />клімат контроль
    7. <br>
    8. <input type='submit' name='submit' id='submit' value='Додати оголошення'>
    9. </form>
    10.  
    И файл обработчик:

    PHP:
    1.  
    2. if (isset($_POST['options'])){$options = $_POST['options'];}
    3. $result = mysql_query ("INSERT INTO avto (options) VALUES ('$options')");
    4. if ($result == 'true') {echo "<p>ваше оголошення додане  </p>";}
    5. else {echo "<p>ваше оголошення не додане</p>";}
    6.  
    Так вот у меня в базу добавляется только последний из выбранных. Например если я выбрал второй и третий checkbox то добавляется только третий. Как сделать что бы добавились оба. Заранее спасибо.
     
  2. toptyg

    toptyg Активный пользователь

    С нами с:
    15 май 2011
    Сообщения:
    4
    Симпатии:
    0
    ну дык постом тебе массив приходит(несколько значений) и обрабатывай их по отдельности(узнай размер массива), фильтруй значения, объединяй и пиши в бд.
     
  3. siiXth

    siiXth Активный пользователь

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    name у любых двух эл-тов должен быть разным
    вариант1: пронумеровать вручную options1 , options2 и т.д
    вариант2: кидать данные в массив. в данном случае name может быть одинаковым и иметь вид options[]
    в массив $_POST в ячейку options прийдёт массив c указанными данными

    чтобы лучше иметь представление как всё содержится закомментируйте инсёрт в базу и добавьте var_dump("$_POST");
    массив прийдёт только в указанном мною втором варианте , а в данном случае $_POST['options'] каждый раз перезаписывается выбранным эл-том доходя до последнего что и возвращает
     
  4. prokuror_89

    prokuror_89 Активный пользователь

    С нами с:
    13 янв 2011
    Сообщения:
    26
    Симпатии:
    0
    Попробовал этот вариант в форме:

    HTML:
    1. <form name='form1' method='post' action='add_ogo.php'>
    2.      <input type="checkbox" name="options[]" value="повна комплектація"  /> повна комплектація
    3.      <input type="checkbox" name="options[]" value="шкіра"  />шкіра
    4.      <input type="checkbox" name="options[]" value="кондиціонер" />кондиціонер
    5.      <input type="checkbox" name="options[]" value="клімат контроль"  />клімат контроль
    6.      <br>
    7.      <input type='submit' name='submit' id='submit' value='Додати оголошення'>
    8.      </form>
    9.  
    В обработчике все также оставил:

    PHP:
    1.  
    2. if (isset($_POST['options'])){$options = $_POST['options'];}
    3. $result = mysql_query ("INSERT INTO avto (options) VALUES ('$options')");
    4. if ($result == 'true') {echo "<p>ваше оголошення додане  </p>";}
    5. else {echo "<p>ваше оголошення не додане</p>";}
    6.  
    Теперь в базу заносится только одно слово Array. При использовании var_dump("$_POST"); как Вы советовали выводит string(5)"Array". Что я не так сделал подскажите пожалуйста? Буду очень признателен Вам за помощью
     
  5. Alex_pac

    Alex_pac Активный пользователь

    С нами с:
    11 апр 2011
    Сообщения:
    285
    Симпатии:
    1
    Адрес:
    Россия, Тольятти
    HTML:
    1.  <form name='form1' method='post' action='add_ogo.php'>
    2.      <input type="checkbox" name="options[]" value="повна комплектація"  /> повна комплектація
    3.      <input type="checkbox" name="options[]" value="шкіра"  />шкіра
    4.      <input type="checkbox" name="options[]" value="кондиціонер" />кондиціонер
    5.      <input type="checkbox" name="options[]" value="клімат контроль"  />клімат контроль
    6.      <br>
    PHP:
    1. <?php
    2. if (isset($_POST['options'])) {
    3.     $options = mysql_real_escape_string(implode(', ',$_POST['options']));
    4.     $query = "INSERT INTO avto (options) VALUES ('$options')";
    5.     die("запрос : ".$query);
    6.     /*$result = mysql_query ($query);
    7.     if ($result) {
    8.         echo "<p>ваше оголошення додане  </p>";
    9.     } else {
    10.         echo "<p>ваше оголошення не додане</p>";
    11.     }*/
    12. } else {
    13.     echo "чек боксы не отмечены";
    14. }
     
  6. siiXth

    siiXth Активный пользователь

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    гуглить , гуглить и ещё раз гуглить! каждое неизвестное слово
    я 4 раза повторил слово "массив" , а вы не попытались узнать что это и с чем его едят =)
    http://php.su/learnphp/datatypes/?array

    делайте как показал Alex_pac , в бд внесутся через запятую порядковые номера отмеченных инпутов (отсчёт с 0, про это написано в описании массивов) в последовательности в которой они были в хтмл (ф-ция implode в примере)
    можете использовать это при выводе и можете дальше обрабатывать ф-цией explode () разбив строку на номера инпутов.
     
    AlexProg нравится это.