Php 输入无效用户名或密码时的pdo回显错误消息

Php 输入无效用户名或密码时的pdo回显错误消息,php,html,pdo,Php,Html,Pdo,您好,我对pdo(php)比较陌生我创建了一个基本的登录系统,我知道它还不安全,但我只是在尝试,无论如何我知道在旧的php中,你可以在if语句中回显错误消息,但它似乎不再工作了。这里是我的脚本,是我做错了什么,还是你不能在pdo中再这样做了 if ($row == null){ header( "location: login.html"); echo "login failed"; } else{ h

您好,我对pdo(php)比较陌生我创建了一个基本的登录系统,我知道它还不安全,但我只是在尝试,无论如何我知道在旧的php中,你可以在if语句中回显错误消息,但它似乎不再工作了。这里是我的脚本,是我做错了什么,还是你不能在pdo中再这样做了

if ($row == null){

            header( "location: login.html");
            echo "login failed";

        } else{

            header("location: homepage.php");
        }
我意识到这可能没有足够的代码可用,所以下面是脚本的其余部分

session_start();
    //connection String
    $connection = new PDO("sqlsrv:server=server;Database=database", "username", "password"); 

    //Seelcting function
    $smt = $connection->prepare("select user_id, username from account where username = :username and password =:password");

    //setting values to textboxes
    $username = $_POST["txt_username"];
    $password = $_POST["txt_password"];

    //binding values
    $smt->bindValue(':username', $username);
    $smt->bindValue(':password', $password);

    //execution
    $smt->execute();

    //fetching data
    $row = $smt->fetch( PDO::FETCH_ASSOC ) ;  
    echo "$row[user_id]\n\n";
    echo "$row[username]\n\n";
    $_SESSION{"user_id"} = $row["user_id"];
在你发邮件之后

header( "location: login.html");
浏览器将重定向到新文件(
login.html
)并忽略(几乎)任何进一步的输出

请务必在
login.html
上显示消息。稍后,您必须使用某种机制将消息传输到该页面,例如,使用会话变量

if ($row == null){
  $_SESSION['errormsg'] = "login failed";
  header( "location: login.php");
} else{
  header("location: homepage.php");
}
编辑

header
命令在实际内容之前向浏览器发送某种数据。如果使用标题使浏览器重定向,用户将永远看不到内容

因此,您需要某种方式将内容带到下一页,您将重定向到

一种可能是使用会话变量

if ($row == null){
  $_SESSION['errormsg'] = "login failed";
  header( "location: login.php");
} else{
  header("location: homepage.php");
}
login.php
中,如果出现此消息,您可以对其作出反应:

if( isset( $_SESSION['errormsg'] ) ) {
  // do the output
  echo $_SESSION['errormsg'];
  // delete the message from the session, so that we show it only once
  unset( $_SESSION['errormsg'] );
}

我猜$row不是空的。您需要在
标题之后发布更多的codeRemove
echo
,并放置
exit()
。你会怎么做呢?我对整个编程场景都不熟悉,所以这种情况让我很困惑。我明白你的意思,但我仍然很困惑,这会涉及将我的login.html更改为login.php以便在开始时设置会话,还是全部使用long.php?@user2416980取决于服务器配置,您的
login.html
可能会被解析为PHP。在这种情况下,您可以将相应的代码放在那里。否则,您需要将其重命名为
login.php