2

// 脚本.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>

//登录.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");
    }


?>

你好

我正在学习 Web 开发,但遇到了问题。我创建了简单的登录表单。它使用 jQuery 评估一些错误,并使用 PHP 评估其余错误。一切正常,除了 PHP 中的 Header 命令。当用户成功登录时,header 命令应该重定向到 index.php,以便用户可以验证它是否已登录,但在这种情况下,header 标记不起作用。在应用 jQuery(所有错误都由 PHP 处理)之前,header 命令没有问题。你能说出这里有什么问题吗?

4

3 回答 3

1

细节,

由于 AJAX 发生在“幕后”(可以这么说),您的重定向只会中断对您的 javascript 处理程序的响应。所以 PHP 现在不能重定向你的浏览器,jQuery 可以。所以使用jQuery来重定向用户。

您需要返回 URL 并让您的回调将浏览器踢到新位置。

在此说明中,由于您必须将数据返回到前端,因此您需要添加一个status或类似的变量,以便您可以根据调用是否“失败”来切换前端行为。

正是马克 B 指出的,

您正在执行 ajax 调用 - php 标头将重定向 ajax 响应……而不是用户当前所在的页面。您必须在客户端中修改您的 javascript 代码才能更改位置。

javascript 重定向就像window.location.href = "http://mylocation";.

解决您的问题,

查询

// 脚本.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";
    }


?>
于 2013-07-30T17:42:27.240 回答
0

来自http://www.php.net/manual/en/function.header.php

请记住,必须在发送任何实际输出之前调用 header(),无论是通过普通 HTML 标记、文件中的空白行还是从 PHP 发送。使用 include 或 require 函数或其他文件访问函数读取代码并在调用 header() 之前输出空格或空行是一个非常常见的错误。

您可以尝试使用 javascript 重定向或在开头使用标头重新制作源代码

于 2013-07-30T17:28:44.120 回答
0

header() 将在输出回显到屏幕后不起作用。

检查 funkcije.php 和 spojiBazu.php 以查看是否发生任何回声。如果是这样,您需要在 login.php 中调用 header() 之前找到一种方法来删除包含文件中的回声。

于 2013-07-30T17:43:00.157 回答