PHP意外结束

时间:2013-12-04 05:31:46

标签: php

假设正在发布一个有效的登录信息,我的代码在setcookie函数之前就已经有了一些问题。这是我的代码。

<?php

echo 'v1.3.4';

require_once '../ssi/mysql.php';

if(isset($_POST['action'])){
$username = $_POST['username'];
$password = md5($_POST['password']);
$check = mysqli_query($con, "SELECT * FROM admins WHERE username = '$username' AND password = '$password' LIMIT 1");
$checknm = mysqli_num_rows($check);

if($checknm == 1){
    while($info = mysqli_fetch_array($check)){
        $keypair = $info['keypair'];
        setcookie("f2admin", $keypair, time()+3600);
        header('Location: index.php');
        exit;
    }
}else{
    $err = "Invalid Username or Password. Please try again.";
}

}

?>

3 个答案:

答案 0 :(得分:2)

在使用echo

之前,您需要删除/评论header任何内容
if($checknm == 1){
    while($info = mysqli_fetch_array($check)){
        $keypair = $info['keypair'];
        //echo 'Keypair: '.$keypair;
        setcookie("f2admin", $keypair, time()+3600);
        header('Location: index.php');
        echo 'YES ';
        exit;
        echo 'NO ';
    }
}

答案 1 :(得分:1)

好吧,我注意到了几件事。

  1. header()设置在echo 'YES';之上,这意味着页面将在输出内容之前重定向(回显)。

  2. exit;设置在echo 'NO';之上,这意味着该页面会在到达echo 'No';之前退出。

  3. header()上方有一个回音集,导致header()重定向无效。

  4. 在旁注中,如果您尝试停止while循环,则该函数应为break;而不是exit;


    更新

    我已经在我的本地环境中正常工作了。我发现了几件事。

    1)表格中没有设置动作(不确定是否需要)。

    2)永远不会回显$ err(因此是空白页面),但代码本身确实有效。

    3)mysqli_fetch_array循环是多余的,因为你强制mysql将LIMIT结果变为1。

    $info = mysqli_fetch_array($check);
    $keypair = $info['keypair'];
    setcookie("f2admin", $keypair, time()+3600);
    header('Location: index.php');
    exit;
    

答案 2 :(得分:0)

在使用header执行任何操作之前,您的代码无法输出任何内容。输出必须在标题信息之后。