php mysql复选框和文本框值插入数据库

php mysql复选框和文本框值插入数据库,php,mysql,arrays,Php,Mysql,Arrays,我有一个名为“ice_Flavors”的db表,其中有“id”、“Flavors”、“date”、“selected”列。 另一张名为“ice_today”的表格,如:“id”、“风味”、“日期”、“选定” 现在,在页面的左侧,我想从“ice_Flavors”调用,并将条目打印在一个表单中,并带有一个复选框。 在页面右侧,它会显示SHOWCASE,我希望展示今天选择的口味,它们将一直保留到今天的日期结束,然后自动丢弃。另外,当它们被选择在SHOWCASE中显示时,我希望它们不会显示在左侧 因此,

我有一个名为“ice_Flavors”的db表,其中有“id”、“Flavors”、“date”、“selected”列。 另一张名为“ice_today”的表格,如:“id”、“风味”、“日期”、“选定”

现在,在页面的左侧,我想从“ice_Flavors”调用,并将条目打印在一个表单中,并带有一个复选框。 在页面右侧,它会显示SHOWCASE,我希望展示今天选择的口味,它们将一直保留到今天的日期结束,然后自动丢弃。另外,当它们被选择在SHOWCASE中显示时,我希望它们不会显示在左侧

因此,当我选中味道旁边的复选框时,值“id”、“flavors”、“date”、“selected”应该输入到“ice_today”中,但出于某种原因,总是输入ice_味道表的最后一行,我得到消息“键“PRIMARY”的重复输入“0”

也许这一切都可以通过使用一个db表来完成,但我还没有弄清楚。有人能帮忙吗

edit.php:

<?php ob_start(); 

include_once("dbinfo.inc.php");
include_once("config.php");

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

$selected  = $_POST['selected'];
$id        = $_POST['id'];
$flavour   = $_POST['flavour'];
$date      = $_POST['date'];

if($_POST["submit"] == "submit") {
for($i=0;$i<sizeof($selected);$i++) {
if(!empty($flavour)) {
echo"";

echo "<pre>";
    print_r($_POST);
    echo "</pre>";

$query="INSERT INTO ice_today VALUES('$id','$flavour','$date','$selected[$i]')";
    mysql_query($query) or die(mysql_error());
}
}
echo "Entry added";
}
}
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>

<head>
<title>Edit</title>
</head>

<body>
<form name="form1" id="form1" method="POST" action="edit.php">

<table border="1" width="200px">
 <td>
  <table border="1" width="200px">

<?php

$result = mysql_query("SELECT * FROM ice_flavours WHERE ('selected' != '1') ORDER BY flavour ASC");
$results = mysql_num_rows($result);

if ($results > 0)
 {
$num=mysql_numrows($result);
 $i=0;
      while ($i < $num)
         {
          $id=mysql_result($result,$i,"id");
          $flavour=mysql_result($result,$i,"flavour");
?>

<tr>
 <td align="center" valign="middle">
<?php echo $flavour; ?>
<input type="text" name="id" id="id" value="<?php echo $id; ?>">
<input type="text" name="flavour" id="flavour" value="<?php echo $flavour; ?>">
<input type="text" name="datum" id="datum" value="<?php echo date('Y-m-d'); ?>">
<input type="checkbox" name="selected[]" id="selected" value="<?php echo '1'; ?>">
</td></tr>

<?php
$i++;
}
?>

<input type="submit" value="submit">

<?php } ?>

</td>
<td>
<table border="1" width="200px">
<tr><td align="center" valign="middle">
SHOWCASE
</td></tr>

<?php
include_once("dbinfo.inc.php");
include_once("config.php");
 $result2 = mysql_query("SELECT * FROM ice_today ORDER BY flavour ASC");
 $results2 = mysql_num_rows($result2);

 if ($results2 > 0)
     {
$num2=mysql_numrows($result2);
 $j=0;
      while ($j < $num2)
         {
          $id=mysql_result($result2,$j,"id");
          $flavour=mysql_result($result2,$j,"flavour");
?>

<tr><td align="center" valign="middle">
<?php echo $flavour; ?>
</td></tr>

<?php
$j++;
}
}
echo '</td></tr></table>';
?>
</body>
</html>

<?php ob_end_flush(); ?>

如果ID字段是一个自动递增字段,则需要将其从insert中删除,因为db服务器将自行确定该值。您应该列出要插入的字段,并关闭该字段:

$query="INSERT INTO ice_today(id, flavours, date, selected) VALUES('$id','$flavour','$date','$selected[$i]')";
列出要插入的字段还可以防止以后添加新字段时insert语句中断。因此,现在就开始是一个很好的做法。

请看一下。您需要在
INSERT
语句中指定每一列:

if (isset($_POST['submit']) && $_POST["submit"] == "submit") {
$selected  = $_POST['selected'];

    for($i=0; $i < sizeof($selected); $i++) {

        $id        = $selected[$i];
        $flavour   = $_POST['flavour_' . $id];
        $date      = $_POST['date_' . $id];


        $query="INSERT INTO ice_today VALUES('$id','$flavour','$date','$id')";
        mysql_query($query) or die(mysql_error());
    }
}
我还建议您不要再使用原始的MySQL扩展,因为它是从PHP5.5.x开始的。当使用另一个MySQL扩展(例如MySQLi或PDO:)时,您还可以使用准备好的语句来确保安全(您现在还没有准备好)


POST值可以被操纵,因为您只是通过字符串连接将它们输入到查询中,所以您对它们并不安全。

代码中有很多问题

如果有两种风格,则可以使用具有相同名称和不同值的文本框。 因此,味道或id将始终来自最后一行

你可以这样做

1.用以下内容替换文本框:


if (isset($_POST['submit']) && $_POST["submit"] == "submit") {
$selected  = $_POST['selected'];

    for($i=0; $i < sizeof($selected); $i++) {

        $id        = $selected[$i];
        $flavour   = $_POST['flavour_' . $id];
        $date      = $_POST['date_' . $id];


        $query="INSERT INTO ice_today VALUES('$id','$flavour','$date','$id')";
        mysql_query($query) or die(mysql_error());
    }
}