使用MySQL和PHP进行独特的入口验证

时间:2012-04-16 13:04:49

标签: php mysql database select

我需要验证注册网站的用户是否输入了他/她之前没有其他任何人输入的唯一16位数字。

相关数据库信息是16位数字存储在名为card1的列中,整个表的名称为users,用户输入的数字存储在{{1}中}}

这是我到目前为止所拥有的......

$card1

这个想法是它会在数据库中找到任何已经存在的例子,如果找到重复的话,它会显示错误信息。

问题在于,即使存在重复内容,它仍然允许用户注册(将注册表单提交给数据库)。在此代码块之后,立即插入对db的调用,其中包含从表单中收集的所有用户信息。

注意:我对处理PHP错误消息并不是很熟悉,而我所使用的只是我在示例代码中的另一个实例中找到的一个示例。

4 个答案:

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