PHP和MySQL验证问题

时间:2010-04-27 11:51:38

标签: php mysql

我正在尝试检查颜色是否已输入数据库,如果颜色不应输入并存储到数据库中,则应显示以下错误代码<p>This color has already been entered!</p>。但由于某种原因,我无法让这个工作,有人可以帮助我吗?

颜色名称输入$_POST['color'],这是用户输入的数组。

以下是收集颜色的html代码。

<input type="text" name="color[]" />
<input type="text" name="color[]" />
<input type="text" name="color[]" />
<input type="text" name="color[]" />
<input type="text" name="color[]" />
<input type="text" name="color[]" />
<input type="text" name="color[]" />
<input type="text" name="color[]" />
<input type="text" name="color[]" />

这是PHP&amp; MySQL代码。

for($i=0; $i < count($_POST['color']); $i++) {
    $color = "'" . $_POST['color'][$i] . "'";
}

$mysqli = mysqli_connect("localhost", "root", "", "sitename");
$dbc = mysqli_query($mysqli,"SELECT * 
                             FROM colors 
                             WHERE color = '$color' 
                             AND user = '$user_id' ");

if(mysqli_num_rows($dbc) == TRUE) {
    echo '<p>This color has already been entered!</p>';
} else if(mysqli_num_rows($dbc) == 0) {
    // enter the color into the database
}

5 个答案:

答案 0 :(得分:1)

为了避免不必要的查询,您应首先获取所有颜色并检查它们:

$colors = array();
$mysqli = mysqli_connect("localhost", "root", "", "sitename");
if($result = mysqli_query($mysqli,"SELECT color FROM colors WHERE user = '$user_id' ") {
    while($row = mysqli_fetch_array($result)) {
        $colors[] = $row['color'];
    }
    mysqli_free_result($result);
}

foreach($_POST['color'] as $color) {
    if(in_array($color, $colors) {
        echo '<p>Color ' . $color . ' has already been entered!</p>';
    } 
    else {
        // enter the color into the database
    }
}

确保清理用户输入!

答案 1 :(得分:0)

您有多种颜色,因此您应该使用以下内容。

$mysqli = mysqli_connect("localhost", "root", "", "sitename");

for($i=0; $i < count($_POST['color']); $i++) {
    $color = "'" . $_POST['color'][$i] . "'";

    $dbc = mysqli_query($mysqli,"SELECT * 
                             FROM colors 
                             WHERE color = '$color' 
                             AND user = '$user_id' ");

    if(mysqli_num_rows($dbc) == TRUE) {
       echo '<p>'.$color.' color has already been entered!</p>';
    } else if(mysqli_num_rows($dbc) == 0) {
    // enter the color into the database
    }
}

答案 2 :(得分:0)

我猜你遇到的问题是当你试图将新值输入数据库时​​数据库连接已经打开。 解决方案是首先从数据库中获取所有内容,然后运行检查并相应添加。

答案 3 :(得分:0)

您应该使用IN运算符。例如,

$color = null;
for($i=0; $i < count($_POST['color']); $i++) {
    if ($color == null)
       $sep = '';
    else 
       $sep = ',';
    $color = $sep . "'" . $_POST['color'][$i] . "'";
}

$mysqli = mysqli_connect("localhost", "root", "", "sitename");
$dbc = mysqli_query($mysqli,"SELECT * 
                             FROM colors 
                             WHERE color IN ($color) 
                             AND user = '$user_id' ");

答案 4 :(得分:0)

实际上这不是一个答案,但非常重要的是要学习:

我的意思是简单的事情:首先你必须只处理SQL,没有PHP或HTML。创建一个SQL查询来检查颜色,运行它,测试它,一旦你满意 - 去找PHP。尝试从变量创建相同的查询,并与示例一进行比较。完成后,您最终可以使用HTML。

因此,开发过程必须分为3个阶段:

  1. SQL阶段。创建一个查询。如果你不知道你想要什么样的查询,请在这里问一些问题,例如“我有3个颜色名称和一个表格。如何检查表格中是否存在这些颜色”。完成后 - 检查它以确保查询运行正常并返回所需的结果。
  2. PHP阶段。一旦有了查询,请从PHP脚本中回显它。并编写下面的代码,代码从一些变量产生此查询。打印出来进行比较,直到两个查询都相同。
  3. HTML阶段。制作一个HTML表单,将颜色名称发送到PHP脚本中,这将从它们创建SQL查询并最终运行它。
  4. 请记住:要知道要运行哪个查询非常非常重要!没有这方面的知识,你就不能再进一步了 这里的每个答案都没有提到SQL查询本身。