【问题标题】:pdo echo error message when invalid username or password is entered输入无效的用户名或密码时 pdo 回显错误消息
【发布时间】:2013-05-25 23:12:20
【问题描述】:

你好,我对 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"];

【问题讨论】:

  • 我的猜测是 $row 不为空。
  • 您需要发布更多代码
  • header之后删除echo并放入exit()

标签: php html pdo


【解决方案1】:

发送后

header( "location: login.html");

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

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

编辑

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'] );
}

【讨论】:

  • 你会怎么做?
  • 这是否涉及将我的 login.html 更改为 login.php 以便在他开始时设置会话,或者这一切都在 long.php 中?
  • @user2416980 根据服务器配置,您的 login.html 可能会被解析为 PHP。在这种情况下,您可以将相应的代码放在那里。否则需要重命名为login.php
猜你喜欢
  • 1970-01-01
  • 2022-01-15
  • 2014-09-24
  • 2013-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-06
  • 2018-02-09
相关资源
最近更新 更多