php 有没有其他方法可以解决这个OTP验证问题?

ajsxfq5m  于 2023-05-27  发布在  PHP
关注(0)|答案(1)|浏览(287)

我做了一个验证系统后,用户注册,他/她将被重定向到验证与otp代码。代码似乎不工作,当我尝试了,并显示没有错误显示。

<?php

include_once("__DIR__ . '/../connection/conn.php");

if(isset($_POST['submit'])){

    $username = mysqli_real_escape_string($conn, $_POST['username']);
    $email = mysqli_real_escape_string($conn, $_POST['email']);
    $pass = mysqli_real_escape_string($conn, md5($_POST['password']));
    $cpass = mysqli_real_escape_string($conn, md5($_POST['cpassword']));
    $role = 'user';
    $verification_status = '0';
    $otp = mt_rand(1111,9999);    //create 4 digits otp
    $activation_code = rand(time(),10000000);  //create a user unique id
 
    $select_users = mysqli_query($conn, "SELECT * FROM `userssystem1` WHERE email = '$email' AND password = '$pass'") or die('query failed');
 
    if(mysqli_num_rows($select_users) > 0){
       $message[] = 'user already exist!';
    }else{
       if($pass != $cpass){
          $message[] = 'confirm password not matched!';
       }else{
          mysqli_query($conn, "INSERT INTO `userssystem1`(username, email, password, role, otp, activation_code, verification_status) VALUES('$username', '$email' , '$cpass' , '$role', '$otp', '$activation_code' , '$verification_status')") or die('query failed to insert');
          $message[] = 'registered successfully!';
          header('location:verify.php?code='.$activation_code);
       }
    }
 
 }

?>

在我将数据表中的otp复制到otp输入字段以对数据库中的数据表进行必要的更改之后,verification_status应该更改为verified,并且数据库表中的otp代码将为空。`verification_status = '已验证'

<?php
//if user verified, so don't show verify page

ini_set('display_errors', 1); 
ini_set('display_startup_errors', 1); error_reporting(E_ALL);

include_once("__DIR__ . '/../connection/conn.php");

if(isset($_POST['submit_otp'])){

  if(isset($_GET['code'])){

    $activation_code = $_GET['code'];
    $otp = $_POST['otp'];

    $sqlselect = "SELECT * FROM userssystem1 WHERE activation_code = '".$activation_code."'";
    $resultSelect = mysqli_query($conn, $sqlselect);
    if (mysqli_num_rows($resultSelect) > 0){
      
      $rowSelect = mysqli_fetch_assoc($resultSelect);

      $rowOtp = $rowSelect['otp'];

      if ($rowOtp !== $otp) {
        echo "<script>alert(Please provide correct OTP...!)</script>";

      }else{
        $sqlUpdate = "UPDATE userssystem1 SET otp = '', verification_status = 'verified' WHERE otp = '".$otp."' AND activation_code = '".$activation_code."'";
        $resultUpdate = mysqli_query($conn, $sqlUpdate);

        if ($resultUpdate){
          echo "<script>alert(Your email has been verified)</script>";
          header("Refresh:1; url=signup.php");

        }else{
          echo "<script>alert(Your email is not verify)</script>";
        }
      }
     }
  } 
else{
  header("Refresh:1; url=verify.php");
}

}


?>
8xiog9wr

8xiog9wr1#

在没有看到更多代码的情况下,这实际上只是一个猜测,但您正在检查$_POST['submit_otp'],然后将$otp分配给$_POST['otp']的值。我的猜测是,可能第一个if (isset(...返回false,因为$_POST键是错误的。或者,第二次赋值是错误的,SQL返回时没有行。

相关问题