我正在尝试检查颜色是否已输入数据库,如果颜色不应输入并存储到数据库中,则应显示以下错误代码<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
}
答案 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个阶段:
请记住:要知道要运行哪个查询非常非常重要!没有这方面的知识,你就不能再进一步了 这里的每个答案都没有提到SQL查询本身。