您好我正在尝试在我制作的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}
答案 0 :(得分: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>";
}
答案 1 :(得分:0)
是的,代码和逻辑工作正常。但是不要使用session_register(),它们在新版本的PHP中已被弃用。