2012-12-12 2 views
-1

В настоящее время у меня есть фрагмент кода, который отображает четыре флажка и позволяет пользователю выбирать флажки, нажимать кнопку «Отправить», а данные через метод POST будут отправлены в базу данных (называемый «Таблицей»), где он будет храниться.POSTing Checkboxes с кнопкой Submit в базу данных MySQL

Обычно с помощью переключателя данные хранятся только в одном элементе. Но я заметил, что с помощью флажков элементы (для моего случая) могут варьироваться от нуля до четырех элементов. Поэтому моя проблема с моим кодом заключается в том, что сохраняется только один элемент, даже если я нажимаю все четыре. Я думаю, что мне нужно хранить элементы в виде массива, но как я могу хранить + извлекать упомянутые элементы в базу данных и из нее?

Ниже мой код:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 

<html> <!-- tells browser this is an HTML document --> 
<head> <!-- container of all head elements --> </head> 
<body> <!-- Begin the content of the document --> 

<? 

if (isset($_POST['formSubmit2'])){ 
    $category = $_POST['category']; 
    $accountID = $_POST['accountID']; 

mysql_query("UPDATE Spreadsheet SET category='$category' WHERE accountID='$accountID'"); 
} 

while($row = mysql_fetch_array($query)){ 

$values = array('0 - Luxury','1 - Brand','2 - Retailer','3 - B2B'); 

?> 

<form name ="category" method ="POST" action ="" > 

<? 

echo "<input type = 'hidden' name = 'accountID' value = '" . $row['accountID'] . "' >"; 
for($i = 0; $i < count($values); $i++){ 
?> 
<input type="checkbox" name="category" value="<?php echo $values[$i]; ?>" id="rbl_0" <? if($row['category'] == $i) echo "checked='checked'"; ?>/> 
<? echo $values[$i] ?><br> 

<? } ?> 

     <input type ="Submit" name ="formSubmit2" value ="Submit" /> 
     </form> 

</body> 
</html> 
+1

Да, есть много возможностей. что ты уже испробовал? Каков ваш конкретный вопрос?Что выявила проблема? – hakre

+0

Вместо повторения комментария hakre, я просто предлагаю вам изменить ваше объявление doctype на строки HTML5: '' (совершенно вне темы). –

ответ

0

Вместо передачи имени = "категория" установите его в "$ category []".

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

if (isset($_POST['formSubmit2'])){ 

    $submitted_category = $_POST['$category']; 
    $accountID = $_POST['accountID']; 

    // rest of your code... 

} 

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

+0

Это объяснение, которое я хотел реализовать, спасибо. EDIT: Я получаю сообщение об ошибке, когда я получаю «преобразование строки в строку 30», а строка 30 - mysql_query («UPDATE Spreadsheet SET category = '$ submitted_category» WHERE accountID =' $ accountID '); } Я делаю что-то неправильно? – faroskalin

+0

Должен ли я сериализовать $ category, как этот $ category = serialize ($ values) – faroskalin

+0

Извинения за поздний ответ. $ submitted_category в этом случае представляет собой массив категорий, выбранных пользователем. Таким образом, вы захотите обернуть цикл foreach вокруг него, чтобы получить доступ к каждому из них. (Попробуйте print_r ($ submitted_category), чтобы просмотреть содержимое и как получить к ним доступ) – TheGandhi

0

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

Вы также можете дать им имя массива, как category[] в результате чего-то вроде этого:

<input type="checkbox" name="category[]" value="value 1"/> value 1<br/> 
<input type="checkbox" name="category[]" value="value 2"/> value 2<br/> 
<input type="checkbox" name="category[]" value="value 3"/> value 3<br/> 

А потом получить их:

$categories = $_GET['category']; 

foreach($categories as $category){ 
    echo "Selected " . $category . "<br/>"; 
} 

Смотрите так же: How do I create arrays in a HTML ?Docs

0

You может сериализовать ваш массив, а затем сохранить его в столбце varchar в вашем DB

Сохранить:

$values = array(...); 
$data = serialize($values); 
// Store data in your database 

Получить:

// $data should come from your DB 
$values = unserialize($data); 
// Now values holds your array 
+0

Привет, пользователь: Где я могу поместить в свой код сериализацию и несериализацию? Мой код сверху. Спасибо. – faroskalin

0

Для отправки нескольких значений в запросе POST HTTP после отправки формы вам необходимо определить HTML массив.

Пожалуйста, обратитесь ниже фрагментом кода

<input type="checkbox" name="category[]" value="0"/>Luxury 
    <input type="checkbox" name="category[]" value="1"/> Brand 
    <input type="checkbox" name="category[]" value="2"/> Retailer 
    <input type="checkbox" name="category[]" value="3"/> B2B 

значение POST для флажка будет доступно через суперглобальную переменный $ _POST [ «категории»]

Здесь S_POST [ «категория»] будет доступна как массив. например $ _POST [ 'категории'] [0], $ _POST [ 'категории'] [1], $ _POST [ 'категории'] [2], $ _POST [ 'категории '] [3] Итак, вам нужно выполнить итерацию по массиву для установки отдельных значений для флажка.

+0

Благодарим вас за хорошее объяснение. Я попытаюсь реализовать это прямо сейчас и вернуться к вам. – faroskalin