Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中的标头(';位置:';)未重定向_Php_Header_Location - Fatal编程技术网

PHP中的标头(';位置:';)未重定向

PHP中的标头(';位置:';)未重定向,php,header,location,Php,Header,Location,login.php <form class="form-signin" action="#" method="POST"> <span id="reauth-email" class="reauth-email"></span> <input type="text" name="usern" class="form-control" placeholder="Username">

login.php

<form class="form-signin" action="#" method="POST">
            <span id="reauth-email" class="reauth-email"></span>
            <input type="text" name="usern" class="form-control" placeholder="Username">
            <input type="password" name="passw" class="form-control" placeholder="Password">
            <div id="remember" class="checkbox">
                <label>
                    <input type="checkbox" value="remember-me"> Remember me
                </label>
            </div>
            <input onClick="myFunction()" class="btn btn-lg btn-primary btn-block btn-signin" type="submit" name="sub" value="Login">
        </form>

记得我吗
PHP脚本

<?php 
if(isset($_POST['sub']))
{
include('user.php');
$us = mysqli_real_escape_string($conn,$_POST['usern']);
$pw = mysqli_real_escape_string($conn,$_POST['passw']);

if(!empty($_POST['usern']) || !empty($_POST['passw']))
{
        $query = "SELECT ID FROM myuser WHERE username = '$us' AND
        password = SHA('$pw')";
            $result = @mysqli_query($conn, $query);
            $row = mysqli_fetch_array($result);

        if($row)
        { 
                header('Location: homepage.php');
                exit;
        }
            else  
            {
                echo '<script language="javascript">';
                echo 'alert("Invalid Username/Password")';
                echo '</script>';   
            }
}
        else
        {
            echo '<script language="javascript">';
            echo 'alert("Please enter Username/Password")';
            echo '</script>';
            mysqli_close($conn);
        }
} 
?>
不返回
true

if($row !== false){
    header("Location: homepage.php");
}

PHP 5.6及更高版本不支持带标题的重定向。
要解决此问题,请使用JavaScript重定向,如下代码

if($row){
     echo '<script>window.location = "YOUR_URL";</script>';
}
if($row){
echo'window.location=“您的URL”;
}
尝试添加“http('s')(如果需要)://您的_domain/homepage.php

尝试更改:

if($row) {
$row = mysqli_fetch_array($result);
if($row) {
致:

希望这能奏效

如果解决方案1不起作用,请尝试更改:

if($row) {
$row = mysqli_fetch_array($result);
if($row) {
致:

以及:

致:


我终于解决了,伙计们! 我所做的就是抛弃mysqli,使用PDO。 这是我的新代码:

<?php
session_start();
$h = "localhost";
$u = "root"; 
$p = "";
$db = "user";
$msg = "";

try
{
    $con = new PDO("mysql:host=$h; dbname=$db", $u, $p);
    $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

        if(isset($_POST["sub"]))
        {
            if(empty($_POST["usern"]) || empty($_POST["passw"]))
            {
                $msg = "<label>Please enter username/password!</label>";
            }
            else
            {
                $sqlquery = "SELECT * FROM myuser WHERE username = :username AND password = :password";
                $stat = $con->prepare($sqlquery);
                $stat->execute(
                        array(
                            ':username' => $_POST["usern"],
                            ':password' => $_POST["passw"]
                        )
                );
                $countrow = $stat->rowCount();
                if($countrow > 0)
                {
                    $_SESSION["username"] = $_POST["usern"];
                    header("Location: homepage.php");
                }
                else
                {
                    $msg = "<label>Invalid username/password</label>";
                }
            }
        }
}

catch(PDOException $er)
{
    $msg = $er->getMessage();
}   
?>


将代码直接放在问题中。不要发布代码截图。好的,下次我不会这么做。对不起,我是新来的,这里有一个“编辑”“在你的问题下链接。您可以单击该按钮进行修改。请这次修复它,谢谢。请注意,SHA不是用于密码的安全哈希算法-它可以很容易地进行暴力搜索。
mysqli\u fetch\u array
返回一个数组。如果($array)
且($array非空,则返回
true
。瞧,谢谢,我不知道。:)无论如何,仍然有可能函数返回false。您是否试过将header()放在第一行以测试此函数是否有效?我会删除此答案,并将该注释放在问题下。@mpz,只是为了清楚起见。您的user.php是否包含任何回音?标题前不能有任何数据。@Nikitacunski user.php上没有回音,我尝试了上面的代码,它正在重定向到homepage.php,但现在“无效用户名/密码”的else不起作用!我将尝试修补此代码。。。我会让你知道它是否有效。这远不是真的-所有版本的PHP都支持HTTP头输出,包括
Location
重定向。你能详细解释一下为什么你认为它不支持吗?是的,支持,但在这个版本中位置需要单独的模块,并且一些共享主机禁用了这个模块。我没听说过,Salar。据我所知,
header()
是一个核心函数。它确实说,只有在使用支持标头的SAPI时,才能访问和输出标头-您发现什么配置不向客户端发送标头?你心目中有IIS/Windows吗?据我所知,共享PHP主机几乎总是在Linux上运行。伙计,这不是我的问题,我只是回答了“解决问题”,我的代码工作得很好:)JavaScript是一个比HTTP重定向更容易中断的解决方案。不走运!我的mysqli_fetch_数组即使更改为mysqli_num_rows,也不会返回TRUE。它不能返回布尔值。它返回您搜索的表中的行数组。解决方案#1通过检查“行数组”是否为空来返回布尔值。解决方案#2检查搜索表中的行数是否超过0。我的意思是,您提供的这两个解决方案不起作用,因为if-else语句没有返回true,我不知道为什么。。。无论如何,我只是使用PDO修复了它。我还找到了另一个修复方法,没有更改为PDO。只需将数据库密码类型更改为varchar(255),因为sha将加密您的密码,例如,您的123456789密码将为60到100个字符。(255用于将来的验证)这就是为什么我的获取数组不返回true,因为我的密码与sha加密的密码不匹配,因为我的数据库密码中只有varchar(40),这在散列密码时是不推荐的。