使用 PDO 登录后显示个人资料页面 [关闭]
Posted
技术标签:
【中文标题】使用 PDO 登录后显示个人资料页面 [关闭]【英文标题】:display profile page after login using PDO [closed] 【发布时间】:2014-12-23 09:42:23 【问题描述】:我使用this 代码作为创建登录页面的参考,但是当我在登录后被重定向到主页时,我能够看到仪表板,但随之而来的是我也收到了这 2 个错误
1) 警告:PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: 参数号无效:参数未定义
2) 警告:无法修改标头信息 - 标头已发送
这些错误是由会话页面引起的。
session.php
<?php
$dbhost = "localhost";
$dbname = "abc";
$dbuser = "abc";
$dbpass = "pwd";
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);
session_start();
$user_check=$_SESSION['login_user'];
$result = $conn->prepare("SELECT * FROM register WHERE email = :user_check");
$result->execute(array(":usercheck"=>$user_check));
$row = $result->fetch(PDO::FETCH_ASSOC);
$login_session =$row['email'];
$user_id =$row['id'];
$user_passwords = $row['password'];
if(!isset($login_session))
$conn = null;
header('Location: login_form.html');
?>
谁能告诉我如何消除这些错误?
PS 当我在查询中将 :$user_check 更改为 :user_check 或 usercheck 时(根据它,下一个数组语句也被更改)登录页面停止重定向到仪表板,而是被定向到登录重新翻页。
【问题讨论】:
通常提供您的实际代码是一个很好的开始。不是复制粘贴。 我们需要看看真实的代码,我猜你的第一个错误是一个错字。 错误 1 很可能是由于参数拼写错误,即->prepare("SELECT FROM tbl WHERE username = :userName"); ->execute(array(":username"=>$_POST['username'])
而错误 2 可能是由于在设置/发送标题之前打印到页面的错误 1 引起的
WHERE email= :$user_check
应该是 WHERE email= :user_check
编辑 :user_check
!= ":usercheck"
。改变一个或另一个
@Sean 我试过这样做,但是当我这样做时,页面没有被重定向到仪表板
【参考方案1】:
正如怀疑的那样,有一个错字导致了第一个错误。
$result = $conn->prepare("SELECT * FROM register WHERE email= :$user_check");
$result->execute(array(":usercheck"=>$user_check));
应该是
$result = $conn->prepare("SELECT * FROM register WHERE email= :usercheck");
$result->execute(array(":usercheck"=>$user_check));
您的第二个错误可能是因为您没有将session_start();
放在脚本的最顶部。
【讨论】:
关闭,但再看一遍 ->:user_check
!= :usercheck
啊,正确且已修复。
@EternalHour 页面没有被重定向到仪表板。我已经更新了问题,请问你可以通过它吗
您提供的代码与链接中的代码不同,您的代码不会重定向到仪表板。
@EternalHour 对不起,这是服务器问题导致代码无法正常工作,感谢您的帮助以上是关于使用 PDO 登录后显示个人资料页面 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章