-1

フォームに完全に入力すると、データベースに既にある場合でも、メールの可用性チェックは失敗しますが、フィールドを空のままにしたり、必要とは反対の何かを入力したりすると、エラーが報告され、メールの可用性も報告されますそのメールはすでに使用されています。これにより、プロジェクトを進めることができなくなりました。

<?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>";
}
?>

これは、過去 5 日間の私の仕事を本当に窒息させています。前もって感謝します。

4

2 に答える 2

-2

rowCount() は、最後の削除、挿入、または更新 SQL ステートメントによって影響を受けた行数を返します。

以下を使用して、レコードの返品数を取得します

$row = $SQ->fetch(PDO::FETCH_NUM);

if($row[0] > 0){
    $Err[] = "Sorry, email is already in use by another user";
}

これでも解決しません。コードとロジックのトラブルシューティングを行ってください。

于 2013-10-30T06:55:36.650 に答える