我有一个包含登录表单的文件“index.html”,一个从登录表单获取用户名和密码并重定向到检查数据库登录的文件“connectdb.php”的文件“dash.js”,以及如果成功,则在文件“stock.php”中启动一个 session 。问题是,当我尝试登录时,它重定向到文件“stock.php”,但它再次发送 index.html,不显示页面“stock.php”。密码和用户名正确。我不知道我做错了什么。 这是我的代码。
破折号
$('#btnlogin').click(function() {
var username = $('#user').val();
var password = $('#pass').val();
console.log("passsas qaqiioooo" + username + "- " + password);
$.ajax({
type: 'POST',
url: 'connectdb.php',
data: {user: username, pass: password},
success: function(data){
window.location="stock.php";
},
error: function(jqXHR, textStatus, errorThrown){
alert('deu barraca: ' + textStatus);
}
});
});
connectdb.php
<?php
$server = 'localhost';
$user = 'root';
$password = '********';
$database = '***********';
$con = mysqli_connect($server, $user, $password, $database);
if (!$con) {
die('Nao e possivel conectar a base de dados: ' . mysqli_error($con));
}
if (isset($_POST['user']) && isset($_POST['pass'])) {
$myusername = $_POST['user'];
$mypassword = $_POST['pass'];
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
$sql="SELECT * FROM user WHERE username='$myusername' and password='$mypassword'";
$result=mysqli_query($con,$sql);
$count=mysqli_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){
$_SESSION['myusername'] = $myusername;
$_SESSION['mypassword'] = $mypassword;
}
else {
echo "Wrong Username or Password";
}
}
?>
股票.php
<?php
session_start();
if(!isset( $_SESSION['myusername'] )){
header("location:index.html");
}
?>
<html>
<body>
Login Successful
</body>
</html>
抱歉我的英语不好。
最佳答案
我在这里看到的问题是您的 $.ajax
success
事件在每种情况下都会被触发。无论您的数据库连接是否失败,您的登录数据都是正确的还是不正确的。 $.ajax
将始终成功地从您的 connectdb.php
获得有效响应。
有不同的方法可以让它发挥作用,这里是我的简单建议:
1. 在您的 connectdb.php
文件中,确保您始终使用 echo
返回一些内容:
// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){
$_SESSION['myusername'] = $myusername;
$_SESSION['mypassword'] = $mypassword;
echo "success";
}
else
{
echo "login_failed";
}
2. 在您的 $.ajax
函数中检查返回值:
$('#btnlogin').click(function() {
var username = $('#user').val();
var password = $('#pass').val();
console.log("passsas qaqiioooo" + username + "- " + password);
$.ajax({
type: 'POST',
url: 'connectdb.php',
data: {user: username, pass: password},
success: function(data){
//debug the response:
console.log(data);
if(data == "success")
{
window.location="stock.php";
}
else if(data == "login_failed")
{
alert("login failed!");
}
else
{
alert("unknown response: " + data);
}
},
error: function(jqXHR, textStatus, errorThrown){
alert('deu barraca: ' + textStatus);
}
});
});
注意: 将$.ajax
与dataType: "json"
一起使用会更好。但我假设您总体上对 AJAX
还很陌生,所以我的解决方案非常简单。
更新 - 发现另一个问题:
3. 您没有在 connectdb.php
中启动您的 session
,因此您的 session vars
永远不会保存到 session
:
session_start(); // <-- start the session here
$server = 'localhost';
$user = 'root';
$password = '********';
$database = '***********';
/*
...
*/
关于javascript - 尝试使用 jquery、ajax 和 php 进行登录时不要打开页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25710261/