1

您好,我正在尝试在我制作的 CMS 中创建多个用户。我将他们的所有数据都放在一个表中,并使用mysql_num_rows检查记录是否匹配,然后用于session_register()设置会话。我已将其更改为 PDO 命令。

我希望能够在用户使用 CMS 时对其进行跟踪,以便每条更改的记录都可以附加其 usrID。这样以后我就可以看到谁进行了更新,并最终使用它来显示有关作者等的信息。

因此,例如,当他们使用表单更新或添加新记录时,隐藏的输入会在其中回显他们的会话 ID,这将在他们登录时从他们的用户记录中获取。

这是最好的方法吗?是否正确地编写了此登录代码中的语法?

$con = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD);
$sql="SELECT * FROM $tbl_name WHERE the_username='$the_username' and the_password='$the_password'";

$result = $con->prepare($sql); 
$result->execute(); 
$number_of_rows = $result->fetchColumn();

if($number_of_rows==1){
    $info = $result->fetch(PDO::FETCH_ASSOC);
    $_SESSION['username'] = $info['the_username'];
    $_SESSION['id'] = $info['id'];
    header('Location: admin.php');
}else{
echo "Wrong username or password, please refresh and <a href=\"login.php\">try again.</a>";
}

放上去会更好吗?

if($number_of_rows==1 && $info = $result->fetch(PDO::FETCH_ASSOC)){MAKE SESSION}
4

2 回答 2

1

您对 PDO 函数的使用非常不一致,并且会导致一些错误。

首先,您不能两次获取相同的数据。而且,事实上,您根本不需要这样的双重获取。

此外,由于某种原因,您没有使用准备好的语句,这是使用 PDO 的唯一原因。所以,正确的代码是

$sql="SELECT * FROM $tbl_name WHERE the_username=? and the_password=?";
$result = $con->prepare($sql); 
$result->execute(array($the_username,$the_password)); 
# $number_of_rows = $result->fetchColumn(); <- don't need that
$info = $result->fetch();
if($info){
    $_SESSION['username'] = $info['the_username'];
    $_SESSION['id'] = $info['id'];
    header('Location: admin.php');
}else{
    echo "Wrong username or password, please refresh and <a href=\"login.php\">try again.</a>";
}
于 2013-04-23T11:15:37.523 回答
0

是的,代码和逻辑工作正常。但不要使用 session_register() 它们在新版本的 PHP 中已被弃用。

于 2013-04-23T10:25:43.683 回答