PHP未显示任何错误,后两个if语句运行正常,但不是第一个

时间:2018-06-26 14:50:58

标签: php mysqli

<?php 
  $db = mysqli_connect('localhost', 'username', 'password', 'database');
  $username = "";
  $password = "";
  $regcode = "";
  if (isset($_POST['submit'])) {
    $username = $_POST['username'];
    $password = $_POST['password'];
    $regcode = $_POST['regcode'];

    $sql_R = "SELECT * FROM regcode WHERE regcode='$regcode'";
    $sql_R2 = "SELECT * FROM staff WHERE regcode='$regcode'";
    $res_R2 = mysqli_query($db, $sql_R2);
    $res_R = mysqli_query($db, $sql_R);

    if ((mysqli_num_rows($res_R) > 0) && (mysqli_num_rows($res_R2) < 1)){
    $query = "INSERT INTO staff (username, password, regcode)
                  VALUES ('.$username.', '.$password.', '".$regcode."')";
           $results = mysqli_query($db, $query);
           echo file_get_contents("register.html");
           exit();
    }else if(mysqli_num_rows($res_R2) > 0){
    $regcode_error = "Reg.Code already used by someone, please inform administrator for further information.";          
    }else{
    $regcode_error = "Reg.Code doesn't exists, please inform Administrator for further information.";         
    }
  }
?>

这是发生的事情:我试图让我的系统从数据库中识别出一个名为“ regcode”的代码,因此在验证后用户将能够注册其帐户,如果该regcode,用户将无法注册其帐户在人员数据库中正在使用,或者当regcode数据库中不存在regcode时,问题是: -验证后,我的数据库没有添加新信息。 -我尝试了另一种方式,例如测试regcode无效或正在使用中,并且通过显示错误消息可以很好地发挥作用。

我想像几个小时一样解决这个问题,但仍然无法解决。我是php btw的新手,谢谢您的建议。

1 个答案:

答案 0 :(得分:0)

此行不正确

VALUES ('.$username.', '.$password.', '".$regcode."')";

应该是

VALUES ('$username', '$password', '$regcode'";

您在连接时不正确,在您不需要的地方,请记住双引号字符串会自动展开$variables

  

注意:您的脚本向SQL Injection Attack开放   甚至if you are escaping inputs, its not safe!   在MYSQLI_PDO API中使用prepared parameterized statements

     

如果您包含一些错误检查代码,这将使您更容易调试自己。添加

ini_set('display_errors', 1); 
ini_set('log_errors',1); 
error_reporting(E_ALL); 
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
  

到脚本顶部。这将迫使任何mysqli_错误   生成您可以在浏览器上看到的异常,其他错误也将在浏览器上可见。