MySQL和PHP多重核对表数据库插入

时间:2012-03-07 15:24:41

标签: php mysql

我正在尝试将此多重核对表的值插入到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>

由于

5 个答案:

答案 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());
}