我正在尝试将此多重核对表的值插入到db列中。这段代码不起作用。有谁能发现问题?
我的数据库包含一个名为“colors”的表和一个名为“color”的列。
<?php
// connect to database
require "mysql_connect.php";
?>
<?php
// get value from the form
$color = $_POST['color'];
foreach($_POST['color'] as $colors){
$insert = mysql_query("INSERT INTO colors (color) VALUES ('$color')");
}
?>
<form action="add_color.php" method="post" enctype="multipart/form-data" name="colorform" id="colorform">
<input type="checkbox" name="color[]" value="black" /> Black
<input type="checkbox" name="color[]" value="red" /> Red
<input type="checkbox" name="color[]" value="blue" /> Blue
<input type="checkbox" name="color[]" value="white" /> White
<input name="submit" type="submit" value="Add color" />
</form>
由于
答案 0 :(得分:1)
我还建议您在插入数据库之前清理输入。你没有提到你的色列是什么类型,也可能是不匹配的。
当你说INSERT INTO $colors
时 - 那是什么意思?你的表名是可变的吗?您可能应该使用正确的表名来代替$colors
。
另外,你使用了我看不到定义的$ color,你可能想要使用$ colors,所以应该更像这样:
INSERT INTO tblColors (color) VALUES ('$colors')
检查您的返回值以查看您收到的错误:
$query = "INSERT INTO tblColors (color) VALUES ('$colors')";
$insert = mysql_query($query) or die("A MySQL error has occurred.<br />Your Query: " . $query . "<br /> Error: (" . mysql_errno() . ") " . mysql_error());
答案 1 :(得分:1)
这是添加颜色的好方法
<?php
require "mysql_connect.php";
// connect to database
$colors=array();
// get value from the form
if (isset($_POST['color'])) $colors = $_POST['color'];
foreach($colors as $color)
{
mysql_query ("INSERT INTO colors ('color') VALUES ('$color')");
}
?>
<form action="add_color.php" method="post" enctype="multipart/form-data" name="colorform" id="colorform">
<input type="checkbox" name="color[]" value="black" /> Black
<input type="checkbox" name="color[]" value="red" /> Red
<input type="checkbox" name="color[]" value="blue" /> Blue
<input type="checkbox" name="color[]" value="white" /> White
<td><input name="submit" type="submit" value="Add color" />
</form>
if(isset($ _ POST ['color'])) 这个条件很重要,因为它可以防止数组为空时的索引错误
<强> $颜色=阵列(); 强> 另外,请在代码中声明变量以防止获得未声明的变量,如果用户未指定任何颜色,则会发生这种情况
记住PHP是服务器端,因此在PHP上获取错误会造成攻击漏洞。试着阅读PHP最佳实践,非常重要
希望它有所帮助: - )
答案 2 :(得分:0)
$insert = mysql_query("INSERT INTO $colors (color) VALUES ($color)");
将其更改为:
$insert = mysql_query("INSERT INTO colors_table_name (color) VALUES ($color)");
另外,请检查插入的返回值,也许您收到错误? 第一个明显的问题是由于变量,表名被颜色替换,这是期望的效果吗?
答案 3 :(得分:0)
<?php
// connect to database
require "mysql_connect.php";
?>
<?php
// get value from the form
$colors = $_POST['color'];
foreach($colors as $color){
$insert = mysql_query("INSERT INTO colors (color) VALUES ($color)");
}
<form action="add_color.php" method="post" enctype="multipart/form-data" name="colorform" id="colorform">
<input type="checkbox" name="color[]" value="black" /> Black
<input type="checkbox" name="color[]" value="red" /> Red
<input type="checkbox" name="color[]" value="blue" /> Blue
<input type="checkbox" name="color[]" value="white" /> White
<td><input name="submit" type="submit" value="Add color" />
</form>
答案 4 :(得分:0)
你的变量倒退,SQL语法错误,SQL注入漏洞以及完全没有错误处理
$color = $_POST['color']; <---stuff the POST data array into $color
foreach($_POST['color'] as $colors){ <--- loop over the POST data directly
$insert = mysql_query("INSERT INTO colors (color) VALUES ($color)");
^^^^^^---insert the array
^^^^^^---no quotes
您使用$ colors(带有S)来存储各个颜色,但随后插入$ color,这是一个数组。
绝不假设查询已成功。如果您有最低限度的or die(...)
错误处理,那么您已经看到了查询失败的原因:
foreach($_POST['color'] as $color) {
$safe_color = mysql_real_escape_string($color);
$result = mysql_query("INSERT INTO colors (color) VALUES ('$safe_color');") or die(mysql_error());
}