2012-12-12 42 views
-1

目前,我有一段代码,显示四个复选框,并允许用户选择复选框,单击提交,并通过POST方法将数据发送到数据库(称为“电子表格”)将被存储。使用提交按钮复选框到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连词:'<!DOCTYPE HTML>'(非常题外话)。 –

回答

0

不是传入name =“category”,而是将其设置为“$ category []”。

您应该能够从$ _POST中检索它,将其设置为一个新变量,然后以您想要的方式进行操作。

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

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

    // rest of your code... 

} 

希望有所帮助。

+0

这是我想要实现的解释,谢谢。 编辑:我得到一个错误,我得到“数组到字符串转换30行”和第30行是 mysql_query(“更新电子表格SET类别='$ submitted_category'WHERE帐户ID ='$ accountID'”); } 我做错了什么? – faroskalin

+0

我是否应该像这样序列化$类别$ 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

你可以序列化您的数组,然后将其存储在数据库的varchar列中

节省:

$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

用于在表单提交的HTTP POST请求发送多个值,你需要定义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

相关问题