// script.js
$(document).ready(function(){
$(".loginProzor").hide();
$(".login").click(function(){
$(".loginProzor").fadeToggle(300);
});
$("#prijavi").click(function(){
if($("#user").val() == "" || $("#pass").val() == ""){
$("#labelGreska").html("Unesite korisničke podatke");
}
else{
$.post($("#forma").attr("action"), $("#forma :input").serialize(),
function(data){
$("#labelGreska").html(data);
});}
$("#forma").submit(function(){
return false;
});
});
});
//表单
<form id="forma" action="login.php" method="post">
<label>Korisničko ime</label><br>
<input type="text" name="user" id="user"><br>
<label>Lozinka</label><br>
<input type="password" name="pass" id="pass"><br>
<input type="submit" value="Prijavi se" id="prijavi">
<label id="labelGreska"></label>
</form>
// login.php中
<?php
include 'funkcije.php';
include 'spojiBazu.php';
$user = $_POST['user'];
$pass = $_POST['pass'];
if(!$user){
$greske[] = 'Unesite korisničko ime';
}
$pass = md5($pass);
$ucitaj = mysql_query("select * from login where username = '$user' and password = '$pass'");
session_start();
if(mysql_num_rows($ucitaj) === 0){
echo 'Korisnički podaci nisu validni, molimo pokušajte ponovo.';
}else{
$korisnik = mysql_query("select username from login where username = '$user'");
$podatak = mysql_result($korisnik, 0);
$_SESSION['user'] = $podatak;
header("Location: index.php");
}
?>
您好
我正在学习网页开发,但我遇到了一个问题。我创建了简单的登录表单。它使用jQuery评估一些错误,其余的错误使用PHP进行评估。除了PHP中的Header命令外,一切正常。当用户成功登录时,header命令应重定向到index.php,以便用户可以验证它是否已登录,但在这种情况下,标头标记不起作用。 在应用jQuery之前(所有错误都由PHP处理)header命令没有问题。你能告诉我这里有什么问题吗?
答案 0 :(得分:1)
由于AJAX发生在“幕后”(可以这么说),你的重定向只会中断对你的javascript处理程序的响应。所以PHP现在无法重定向您的浏览器,jQuery可以。所以使用 jQuery来重定向用户。
您需要返回该网址,并让您的回调将浏览器踢到新位置。
在此注释中,由于您必须将数据返回到前端,因此您需要添加status
或类似变量,以便根据呼叫是否“失败”切换前端行为或不。
Marc B指出的确切,
“你正在进行ajax调用 - php标题将重定向ajax响应...而不是用户当前所在的页面。你必须在客户端修改你的javascript代码才能更改位置。“
javascript重定向与window.location.href = "http://mylocation";
一样简单。
JQUERY
// script.js
$(document).ready(function(){
$(".loginProzor").hide();
$(".login").click(function(){
$(".loginProzor").fadeToggle(300);
});
$("#prijavi").click(function(){
if($("#user").val() == "" || $("#pass").val() == ""){
$("#labelGreska").html("Unesite korisničke podatke");
}
else{
$.post($("#forma").attr("action"), $("#forma :input").serialize(),
function(data){
if(data=="success"){
window.location.href = "index.php";
} else{
alert("login failed");
}
});
}
$("#forma").submit(function(){
return false;
});
});
});
PHP
<?php
include 'funkcije.php';
include 'spojiBazu.php';
$user = $_POST['user'];
$pass = $_POST['pass'];
if(!$user){
$greske[] = 'Unesite korisničko ime';
}
$pass = md5($pass);
$ucitaj = mysql_query("select * from login where username = '$user' and password = '$pass'");
session_start();
if(mysql_num_rows($ucitaj) === 0){
echo 'failed';
exit;
}else{
$korisnik = mysql_query("select username from login where username = '$user'");
$podatak = mysql_result($korisnik, 0);
$_SESSION['user'] = $podatak;
echo "success";
}
?>
答案 1 :(得分:0)
来自http://www.php.net/manual/en/function.header.php
请记住,在任何实际输出之前必须调用header() 通过普通HTML标记,文件中的空行或PHP发送。 使用include或require读取代码是一个非常常见的错误, 函数或其他文件访问函数,并且有空格或空 调用header()之前输出的行。
您可以尝试使用javascript重定向或使用标题处的头部重新创建源代码
答案 2 :(得分:0)
header()将无效。
检查funkcije.php和spojiBazu.php以查看是否有任何回声发生。如果他们是你需要找到一种方法,在login.php中调用header()之前从那些文件中删除回声。