0

我在这里有一个绝对的初学者问题。我无法将多个复选框条目放入数据库中的单个列中。我用我的 php 尝试了一些不同的东西,但似乎无法让任何东西正常工作。我尝试过使用序列化以及使用内爆/爆炸。抱歉,我基本上是在要求用勺子喂食,因为我知道这是一个简单的解决方法,我只是还没有任何工作可以做。任何援助将不胜感激。谢谢!!!此外,我拥有的三个复选框是系统、通信和其他,我的 3 个输入确实有括号,即使 php 尚未设置为处理它们,所以现在我的数据库仍然显示这些输入的数组。这是我的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);
?> 
4

5 回答 5

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);
于 2012-10-05T07:27:33.890 回答
0

复选框有一个独特的问题,即当它被选中时,有一些值表单与数据一起发送,但是当它未被选中时,没有变量并且它将返回未定义的变量,所以每次你使用每个复选框变量时都这样做

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

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

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

如果您对复选框或其他内容仍有任何困惑,请告诉我

于 2012-10-05T07:34:16.430 回答
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 的任何值

于 2012-10-05T07:45:48.543 回答
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

于 2012-10-05T07:49:39.997 回答
0

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

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

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

于 2012-10-09T04:57:37.123 回答