我需要验证注册网站的用户是否输入了他/她之前没有其他任何人输入的唯一16位数字。
相关数据库信息是16位数字存储在名为card1
的列中,整个表的名称为users
,用户输入的数字存储在{{1}中}}
这是我到目前为止所拥有的......
$card1
这个想法是它会在数据库中找到任何已经存在的例子,如果找到重复的话,它会显示错误信息。
问题在于,即使存在重复内容,它仍然允许用户注册(将注册表单提交给数据库)。在此代码块之后,立即插入对db的调用,其中包含从表单中收集的所有用户信息。
注意:我对处理PHP错误消息并不是很熟悉,而我所使用的只是我在示例代码中的另一个实例中找到的一个示例。
答案 0 :(得分:3)
制作if语句:
$query2 = "SELECT * FROM users WHERE card1='$card1'";
$result2 = mysql_query($query2);
if ($result2 !== false)
{
header ("Location: register.php?msg=exists");
exit();
}
应该解决问题:)
答案 1 :(得分:2)
执行此操作的正确方法是在字段上添加唯一索引,该索引包含用户输入的数字(card1
)。
然后,您将尝试INSERT
新行而不首先尝试SELECT
,如果此操作失败,则会将用户重定向到msg=exists
页面。这使数据库可以处理重复检测并消除方法中固有的问题 - 如果两个用户同时提交相同的数字,则无法保证SELECT
- > INSERT
会检测到它。唯一索引将检测并阻止这种情况。
这也有减少数据库流量的优势,因为只有一个查询才能实现。
答案 2 :(得分:0)
首先,在此列的DB中创建唯一索引。 这是最佳做法:
ALTER TABLE `users`
ADD UNIQUE INDEX `card1` (`card1`);
我应该按如下方式修改SQL:
$query2 = "SELECT COUNT(1) FROM users WHERE card1='$card1'";
$res = mysql_query($query2);
$data = mysql_fetch_array($res);
if ($data == 1)
{
header ("Location: register.php?msg=exists");
exit();
}
它将检查表中是否存在行并返回0或1。
如果存在(1)则会重定向您。
答案 3 :(得分:0)
尝试这个
$query2 = "SELECT card1 FROM users WHERE card1='".$card1."' LIMIT 1";
$result2 = mysql_query($query2);
if (mysql_num_rows($result2) > 0)
{
header ("Location: register.php?msg=exists");
exit();
}