2017-06-11 36 views
-1

这里我的php代码。当if($users[$name] === $password)$users[$name] = $password;时,我需要重定向到另一个页面,但它不起作用。什么是错的?这里也是ajax。从php文件重定向到html

$(document).ready(function() { 
 
    $('#submit').click(function() { 
 
    var name = $('#username').val(); 
 
    var password = $('#password').val(); 
 
    $.ajax({ 
 
     type: 'POST', 
 
     url: 'php/login_script.php', 
 
     data: { 
 
     user: name, 
 
     pass: password 
 
     }, 
 
     success: function(a) { 
 
     alert(a); 
 
     } 
 
    }); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<?php 
if(!isset($_POST['user'])||!isset($_POST['pass'])){ 
    die(); 
} 
$file = "users.json"; 
$users = json_decode(file_get_contents($file), true); 
$name = $_POST['user']; 
$password = $_POST['pass']; 

if(isset($users[$name])) { 
    if($users[$name] === $password){ 
     header("Location:chat.html"); 
     exit; 
    } 
    else { 
     echo "Wrong password"; 
    } 
} 
else { 
    $users[$name] = $password; 
    file_put_contents($file, json_encode($users, JSON_PRETTY_PRINT)); 
    header("Location:chat.html"); 
    exit; 
} 
+0

你有一个文件'user.json'所有的用户和普通密码?这很糟糕。作为位置问题,你应该使用'http:s://www.blabla/ chat.html' – Edwin

回答

0

因为你的读取与AJAX页面重定向会发生Ajax请求,这意味着你会得到一个301响应。

这应该工作:

$(document).ready(function() { 
    $('#submit').click(function() { 
    var name = $('#username').val(); 
    var password = $('#password').val(); 
    $.ajax({ 
     type: 'POST', 
     url: 'php/login_script.php', 
     data: { 
     user: name, 
     pass: password 
     }, 
     success: function(a) { 
     document.location = 'chat.html'; 
     }, 
     error: function() { 
     alert('Invalid password'); 
     } 
    }); 
    }); 
}); 

<?php 
if(!isset($_POST['user'], $_POST['pass']) || empty($_POST['user']) || empty($_POST['pass'])){ 
    // Send bad request so redirect doesn't happen 
    http_response_code(400); 
    die(); 
} 
$file = "users.json"; 
$users = json_decode(file_get_contents($file), true); 
$name = $_POST['user']; 
$password = $_POST['pass']; 

if(isset($users[$name])) { 
    if($users[$name] != $password){ 
     http_response_code(400); 
     echo "Wrong password"; 
    } 
} 
else { 
    $users[$name] = $password; 
    file_put_contents($file, json_encode($users, JSON_PRETTY_PRINT)); 
} 

这将失败将触发successerror部分$.ajax请求返回200上的成功和400。

+0

你能告诉我为什么当我不在'$ name'和'$ password'中写入json文件中的anithing它时仍然写为{“”:“”}?错误在哪里? – Mbmenes

+0

因为你没有检查字符串是否为空,你只是检查它的设置(而不是空,它不是,它是一个空字符串)。我已经更新了我的答案。 – sjdaws

+0

非常感谢)如何做到这一点:如果文件名和输入的匹配,检查密码,如果他们不匹配,然后写一个**新对** – Mbmenes

0

你需要认识到的关于PHP的东西是所有PHP的东西都是在把页面发送给用户之前完成的,所以在php/login_script.php上调用重定向什么都不做。

你需要做的是返回一些东西来表明登录成功。

这里是你应该做的,了解我的解释:

  1. 在你的PHP代码替换header("Location:chat.html");echo "success";
  2. 改变你的jQuery以下几点:

    success: function(a) { if (a === "success") { window.location.replace("chat.html"); } }