【问题标题】:Ajax form plugin HTML response always returning error message with mysql response trueAjax 表单插件 HTML 响应总是返回错误消息,mysql 响应为 true
【发布时间】:2015-09-27 03:07:39
【问题描述】:

我正在使用 PHP 和 Jquery 表单插件创建一个登录脚本来处理登录表单。它使用这个插件来处理 PHP 脚本检查凭证的值。 PHP 回显“true”或“false”,Jquery 处理错误消息或重定向到仪表板。 这是我的 Jquery:

<script> 
$(document).ready(function() { 
// bind 'myForm' and provide a simple callback function 
$('#loginform').ajaxForm(function(html) { 
    success:{
        if(html == 'true'){
            window.location = "dashboard.php";
        } else if (html == 'false') {
            $(".errormsg").show();
            $(".errormsg").css({
                background: "#fc4452", 
                border: "1px solid #ff0000", 
            });                        
            $('.errormsg').html('E-mail adres of wachtwoord onjuist');
        } else {
            $(".errormsg").show();
            $(".errormsg").css({
                background: "#fc4452", 
                border: "1px solid #ff0000", 
            });                        
            $(".errormsg").html('Er ging iets mis bij het inloggen');
        }
    }
}); 
}); 

这是我当前搜索数据库的 php 脚本:

include("../includes/mysql_connect.php");
$email = $_POST['email'];
$password = $_POST['password'];
$password = hash('sha256', $password);

 // Initialize a session:
$query_check_credentials = "SELECT * FROM Users WHERE (email='$email' AND    password='$password')";
$result_check_credentials = mysqli_query($dbc,      $query_check_credentials);
if(!$result_check_credentials){ //If the Query Fails
 echo 'Query Failed ';
 }

if(mysqli_num_rows($result_check_credentials) == 1) //if Query is successfull
 { // A match was made.
    session_start();
    $row = mysqli_fetch_array($result_check_credentials, MYSQLI_ASSOC);
    $_SESSION['email'] = $row['email'];
    echo "true";
  }else{
     echo"false";  
  }

如您所见,它回显 true 或 false,由 ajax 脚本中的 html 函数读取,然后显示消息或执行重定向。

问题是,目前它没有这样做。它总是在“else”语句中显示错误消息。上面写着:“出了点问题”,即使输入了正确的凭据。

我已经在没有 jquery 的情况下测试了我的 PHP,并且我知道它会根据凭据返回“true”或“false”。仅此而已,没有空格或其他东西。

为了解决问题,我还在下面编写了一段简单的 PHP 代码,它与上面的 PHP 执行相同的操作,但不使用数据库。 奇怪的是,当我使用下面的PHP时……我的jQuery工作正常,当密码或用户名错误时会显示一条消息,并显示密码为“1”和“123”的相应消息。

这是因为 mysql 查询还是我遗漏了其他东西? 提前致谢!

PHP 测试脚本

$email = $_POST['email'];
$password = $_POST['password'];
    if($email=="john@doe.com" && $password == "123"){ 
      session_start();
      $_SESSION['email'] = $email;
      echo "true";
    } else {
      echo "false";
    }

【问题讨论】:

  • 请不要使用此代码,它在登录、密码哈希、数据库请求等方面都做错了!你会在一秒钟内破解这个!
  • 这个问题是关于 jQuery 的,没有什么被黑我稍后会通过使用 salts 和 bCrypt 添加另一个安全层。仅供测试
  • 您是否查看过浏览器控制台以查看返回的内容?可能返回的不仅仅是“真”或“假”(包括空格),这可能导致它无法进入 else 块
  • @Sean 是的,我检查了控制台是否有错误等。但它完全是空的。我不明白为什么它在不使用数据库的情况下也能正常工作。另一个奇怪的事情是,当我将凭据留在字段中并刷新页面时,它确实让我正确登录。

标签: php jquery mysql ajax ajax-forms


【解决方案1】:

我发现了问题,在我的第一个 PHP 文件中,我在仔细检查后包含了文件“mysql_connect.php”,这导致 PHP 响应中有额外的内容。我通过从我的“mysql_connect”文件中删除它来解决它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-26
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 2019-10-06
    • 2017-07-03
    • 2019-01-09
    相关资源
    最近更新 更多