2010-04-27 66 views
0

我试图检查一个颜色是否已经输入到数据库中,如果是颜色不应该输入并存储到数据库中并且应该显示以下错误代码<p>This color has already been entered!</p>。但由于某种原因,我无法得到这个工作,有人可以帮助我吗?PHP和MySQL验证问题

颜色名称被输入$_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 & 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 
} 
+0

你知道你想运行哪个SQL查询吗? – 2010-04-27 11:55:03

+0

您在for语句中覆盖'$ color',因此只有最后一个被采用。但无论如何,如果你打印'

这种颜色已经进入!

'用户如何知道**其中哪一个? – 2010-04-27 11:55:56

+0

@Col。弹片你是什么意思? – IPADvsSLATE 2010-04-27 11:56:46

回答

1

为了避免不必要的querys应先获取所有颜色,并检查了我。

$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 
    } 
} 

确保消毒用户输入!

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 
    } 
} 
+0

还记得注入问题。 'mysql_real_escape_string($ _ POST ['color'] [$ i])','htmlspecialchars($ color)'... – bobince 2010-04-27 12:00:19

+0

我得到以下错误:mysqli_num_rows()期望参数1为mysqli_result,布尔给定,行'if(mysqli_num_rows($ dbc)== TRUE){' – IPADvsSLATE 2010-04-27 12:03:48

0

我猜你要运行的问题是数据库连接在您尝试将新值输入到数据库时已打开。 解决方案是首先从数据库存储中取出所有数据,然后运行检查并相应地添加。

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' "); 
0

这其实不是一个答案,但很重要的是要了解:

我指的是简单的事情:首先,你必须只处理SQL,PHP没有或HTML。创建一个SQL查询来检查颜色,运行它,测试它,并且一旦你确定了它 - 去寻找PHP。尝试从变量创建相同的查询,并与示例1进行比较。一旦完成,你可以去HTML。

因此,发展过程中必须被分成3个阶段:

  1. SQL阶段。创建一个查询。如果你不知道你想要什么查询,请在这里提出一些问题,比如“我有3个颜色名称和一个表格,如何检查表格中是否存在任何这些颜色”。一旦完成 - 检查出来,以确保查询运行正常,并返回所需的结果。
  2. PHP阶段。一旦你有一个查询,从你的PHP脚本回声。并写下面的代码,从一些变量产生这个查询的代码。打印出来进行比较,直到两个查询完全相同。
  3. HTML阶段。制作一个HTML表单,它会将颜色名称发送到PHP脚本中,该脚本将从它们创建SQL查询并最终运行它。

记住:要知道你想运行哪个查询是非常非常重要的!如果没有这方面的知识,你就不能再进一步了。
这里的每个答案都没有提到SQL查询本身。