用户名可用性检查在PHP中不起作用
如果我完全填写表格,电子邮件可用性检查将失败,即使我的数据库中已经有该检查,但如果我将任何字段留空或输入与要求相反的内容,则将报告错误,并且电子邮件可用性检查也将报告电子邮件已被使用。这严重阻碍了我在项目中的进展用户名可用性检查在PHP中不起作用,php,mysql,pdo,Php,Mysql,Pdo,如果我完全填写表格,电子邮件可用性检查将失败,即使我的数据库中已经有该检查,但如果我将任何字段留空或输入与要求相反的内容,则将报告错误,并且电子邮件可用性检查也将报告电子邮件已被使用。这严重阻碍了我在项目中的进展 <?PHP if(isset($_POST['submit'])) { if (empty($_POST["firstName"])) {$Err[] = "* First Name is required";} else { $name = test
<?PHP
if(isset($_POST['submit']))
{
if (empty($_POST["firstName"]))
{$Err[] = "* First Name is required";}
else
{
$name = test_input($_POST["firstName"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$name))
{
$Err[] = "Only letters are allowed in First Name";
}
}
if (empty($_POST["email"]))
{$Err[] = "* Email is required";}
else
{
$email = test_input($_POST["email"]);
// check if e-mail address syntax is valid
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email))
{
$Err[] = "Invalid email format";
}
else
{
$emailSQL = "SELECT email FROM userdetails WHERE email = ?";
$SQ = $conn->prepare($emailSQL) or die("ERROR: " . implode(":", $conn->errorInfo()));
$SQ->bindParam(1, $email);
$SQ->execute();
/* $result = $SQ->fetch(); */
$count = $SQ->rowCount();
if($count !== 0){
$Err[] = "Sorry, email is already in use by another user";
}}}
if (empty($_POST["surname"]))
{$Err[] = "* Surname is required";}
else
{
$surname = test_input($_POST["surname"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$name))
{
$Err[] = "Only letters are allowed in Surname";
}
}
if (empty($_POST["password"]))
{$Err[] = "* Password is required";}
else
{
$password = test_input($_POST["password"]);
}
if (empty($_POST["userName"]))
{$Err[] = "* Username is required";}
else
{
$username = test_input($_POST["userName"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$name))
{
$Err[] = "Only letters are allowed in Username";
}
}
if (count($Err > 0)) {
echo "<div id = 'errors'>";
foreach ($Err as $error) {
echo $error;
echo "<br />";
}
echo "</div>";
}
?>
替换
if($count !== 0){
$Err[] = "Sorry, email is already in use by another user";
}
与
rowCount()重新运行受上次delete、insert或update sql语句影响的行数
使用下面的命令获取记录返回的编号
$row = $SQ->fetch(PDO::FETCH_NUM);
if($row[0] > 0){
$Err[] = "Sorry, email is already in use by another user";
}
即使这样也无济于事,请对代码和逻辑进行疑难解答。我通常使用嵌套的if-then语句或else-if语句。返回受上一条语句影响的行数,而不是返回的行数首先是code>并将其与零进行比较,但如果所有字段都已填充,它仍然不起作用。@Passer Uhm,继续阅读该函数的其余部分说明…@Passerby如果关联PDO语句执行的最后一条SQL语句是SELECT语句。。。return该语句返回的行数。我已经这样做了,但仍然是一样的。如果所有字段都已填充,则不工作@Rohith您是否检查过$count=$SQ->rowCount();返回正确的计数??我必须承认它确实起作用,但最肯定的不是因为你认为它起作用的原因。@deceze你怎么想?fetch(PDO::fetch_NUM)
返回一个结果行数组或false
。使用
时,这些值分别转换为1
和0
。因此,它碰巧起作用,但只是出于纯粹的偶然。
$row = $SQ->fetch(PDO::FETCH_NUM);
if($row[0] > 0){
$Err[] = "Sorry, email is already in use by another user";
}