[英]php mysql checkbox and textboxes values insert into database
我有一个名为'ice_flavours'的数据库表,其中包含以下列:'id','flavors','date','selected'。 另一个名为“ ice_today”的表,例如:“ id”,“风味”,“日期”,“选定”。
现在,在页面左侧,我要从“ ice_flavours”调用,并以表格的形式打印条目和一个复选框。 在页面右侧,应显示SHOWCASE,我要在其中显示今天选择的口味,它们将一直停留到今天为止,然后自动丢弃。 另外,当选择它们在SHOWCASE中显示时,我希望它们不显示在左侧。
因此,当我选中风味旁边的复选框时,应将值“ id”,“风味”,“日期”,“选定”输入到“ ice_today”中,但由于某些原因,始终总是ice_flavors表的最后一行输入,我收到消息“键“ 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字段是自动递增字段,则您需要将其保留在插入内容之外,因为db服务器将自行确定该值。 您应该列出要插入的字段,然后将其保留为空:
$query="INSERT INTO ice_today (flavours, date, selected) VALUES('$flavour','$date','$selected[$i]')";
列出要插入的字段也可以防止以后添加新字段时插入语句被破坏。 因此,从现在开始,这是一个好习惯。
请查看《 MySQL参考手册》 。 您需要在INSERT
语句中指定每一列:
$query="INSERT INTO ice_today(id, flavours, date, selected) VALUES('$id','$flavour','$date','$selected[$i]')";
我还建议您不要再使用原始的MySQL扩展,因为自PHP 5.5.x起已弃用该扩展。 当使用另一个MySQL扩展时(例如MySQLi或PDO : mysqli或PDO-优缺点是什么? ),您还可以使用准备好的语句来防止SQL注入 (您现在还不知道)。
可以操纵POST值,并且您只是通过字符串串联将它们输入查询中,因此对它们并不安全。
您的代码中有很多问题。
如果存在两种形式,则具有相同名称的文本框将具有不同的值。 因此,flavor或id将始终来自最后一行。
你可以做这样的事情。
1.用这个替换您的文本框,
<input type="text" name="id_<?php echo $id; ?>" value="<?php echo $id; ?>"> <input type="text" name="flavour_<?php echo $id; ?>" value="<?php echo $flavour; ?>"> <input type="text" name="datum_<?php echo $id; ?>" value="<?php echo date('Ym-d'); ?>"> <input type="checkbox" name="selected[]" value="<?php echo $id; ?>">
2.替换您的顶部是否阻止(即提交后)
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());
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.