2017-06-11 35 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"); } }