如何使用PHP将多个复选框条目输入数据库单列

时间:2012-10-05 06:55:41

标签: php mysql checkbox

我这里有一个绝对的初学者问题。我在将多个复选框条目放入数据库中的单个列时遇到问题。我用我的php尝试了一些不同的东西,但似乎无法正常工作。我尝试过使用序列化以及研究使用implode / explode。对不起,我基本上要求用勺子喂食,因为我知道这是一个简单的修复,我还没有能够得到任何工作。任何援助将不胜感激。谢谢!!!另外我有三个复选框是system,comm和其他,我确实有3个输入的括号,即使php还没有设置处理它们,所以现在我的DB仍然显示这些输入的数组。这是我的php

    <?php
$con = mysql_connect("localhost","Andrew","password");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("mydb", $con);

$sql="INSERT INTO persons (firstname, lastname, modelid, system, department, comm,  other, shift, comments)
VALUES
  ('$_POST[firstname]','$_POST[lastname]','$_POST[modelid]','$_POST[system]','$_POST[departme    nt]','$_POST[comm]','$_POST[other]','$_POST[shift]','$_POST[comments]')";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }
echo "1 record added";

mysql_close($con);
?> 

5 个答案:

答案 0 :(得分:0)

详细说明上述评论:

$to_insert_in_db = $_POST['system'].','.$_POST['comm'].','.$_POST['other'];

您可以将其插入数据库的单个列中,当您检索它时,您只需执行以下操作:

$retrieved_values = explode(',', $column_value_from_db);

但是,如果system,comm等的值有点复杂(比如字符串),我建议你使用json_encode将值添加到数据库中,使用json_decode从数据库中获取它们。

$values = array('system' => $_POST['system'], 'comm' => $_POST['comm'], 'other' => $_POST['other']);
$column_to_insert = json_encode($values);
$values = json_decode($column_value_from_the_database);

答案 1 :(得分:0)

Checkbox有一个独特的问题,即当检查时有一些值表单与数据一起发送,但是如果未选中则没有变量并且它将返回未定义的变量,因此每次使用每个复选框变量时都会执行此操作像这样

$check1Val = 0;
if(isset($_POST["check1"]){
  $check1Val = 1;
  //or $check1Val = $_POST["check1"];
}

最后,您将每个变量连接起来并将其发送到单个coloum

$allCheckValues = $check1Val.",".$check2Val;

如果您对复选框或其他

仍感到困惑,请与我们联系

答案 2 :(得分:0)

试试这个

$value ="";
if(isset($checkbox1)){
$value = $value."1";
$flag =1;
}
if(isset($checkbox2)&&$flag==1){
$value = $value.",1";
$flag =1;
}
else{
$value = $value."0,1";
$flag =1;
}  
 if(isset($checkbox3)&&$flag==1){
$value = $value.",1";
$flag =1;
}
else{
$value = $value."0,0,1";
$flag =1;
}  

您可以使用0或1的任何值,具体取决于您的应用程序

答案 3 :(得分:0)

将复选框存储为单个字段中的逗号分隔列表

这是一种干净的方式,不会产生undefined index/variable通知(请记住,如果未选中复选框,则不会将其作为帖子值发送),并允许您添加更多复选框只需添加到$names数组。

<?php

$names = array('system', 'comm', 'other');

$checkboxes = array();

foreach($names as $name)
{
    $value = 0;

    if(isset($_POST['checkboxes']) && is_array($_POST['checkboxes']) && in_array($name, $_POST['checkboxes']))
    {
        $value = 1;
    }

    $checkboxes[] = $value;
}

$checkboxString = implode(',', $checkboxes);

?>

现在,您可以在查询中使用$checkboxString$checkboxString将以逗号分隔的0或1列表来指示复选框值。例如:system = off,comm = on,other = on:0,1,1

您的HTML需要看起来像(使用复选框数组):

<input type="checkbox" name="checkboxes[]" value="system" /> System<br />
<input type="checkbox" name="checkboxes[]" value="comm" /> comm<br />
<input type="checkbox" name="checkboxes[]" value="other" /> other
                                       ^^ square brackets for an array

SQL注入

您需要对此进行研究,因为您的代码容易受到攻击。通过mysql_real_escape_string()运行用户提供的值:

$firstname = mysql_real_escape_string($_POST['firstname']);

<强>查询:

VALUES
  ('$firstname', ..............

MySQL库

您的代码正在使用旧的mysql_*库。这项工作正在逐步取消,因此您应为所有新代码选择其他库,例如PDOMySQLi

答案 4 :(得分:0)

所以这就是我用来将我的多个条目放入我的数据库中的单个单元格

('$_POST[firstname]','$_POST[lastname]','$_POST[modelid]','". implode(",", $_POST['system']) ."','$_POST[department]','". implode(",", $_POST['comm']) ."','". implode(",", $_POST['other']) ."','$_POST[shift]','$_POST[comments]')";

所以也许这将为将来尝试实现同样简单目标的人提供服务,现在我唯一的问题是数据库中的条目被切断,我相信解决方案是序列化我的数组。再次感谢您的所有帮助!!