Php 显示特定条件的错误消息
我一直试图在满足特定条件时显示特定的错误/警告消息。具体来说, 1) 未注册或无效的用户将收到$errMsg2错误消息(我已完成此操作) 2) 已注册且“未投票”的用户将成功登录并继续进行投票流程(我已完成此操作) 3) 已注册且“已投票”的用户应显示类似“You have vote!”的错误消息。相反,它一直显示$errMsg2错误(这是我这里的主要问题) *我分别声明了$stat和$stat2,因为它与我的mySQL db变量/结构匹配 我已经尝试过使用if/else语句,但我无法满足$stat2条件 请帮忙 下面是我的php代码Php 显示特定条件的错误消息,php,mysql,Php,Mysql,我一直试图在满足特定条件时显示特定的错误/警告消息。具体来说, 1) 未注册或无效的用户将收到$errMsg2错误消息(我已完成此操作) 2) 已注册且“未投票”的用户将成功登录并继续进行投票流程(我已完成此操作) 3) 已注册且“已投票”的用户应显示类似“You have vote!”的错误消息。相反,它一直显示$errMsg2错误(这是我这里的主要问题) *我分别声明了$stat和$stat2,因为它与我的mySQL db变量/结构匹配 我已经尝试过使用if/else语句,但我无法满足$st
$stat='notvoted';
$stat2='voted';
//Create query
if($position=='Admin') {
$qry="SELECT * FROM admin WHERE username='$login' AND password='$password'";
}
if($position=='Student') {
$qry="SELECT * FROM students WHERE username='$login' AND password='$password' AND status='$stat'";
}
$result=mysql_query($qry);
//Check whether the query was successful or not
if($result) {
if(mysql_num_rows($result) > 0) {
//Login Successful
if($position=='Student') {
session_regenerate_id();
$member = mysql_fetch_assoc($result);
$_SESSION['SESS_MEMBER_ID'] = $member['username'];
$_SESSION['SESS_COURSE'] = $member['course'];
$_SESSION['NAME'] = $member['name'];
session_write_close();
header("location: candidates_list.php");
exit();
}
if($position=='Admin') {
session_regenerate_id();
$member = mysql_fetch_assoc($result);
$_SESSION['SESS_MEMBER_ID'] = $member['id'];
session_write_close();
header("location: admin/index.php");
exit();
}
}else if($stat2==TRUE){
header("location: index.php");
$_SESSION['errMsg3'] = "You have voted!";
exit();
}else{
header("location: index.php");
$_SESSION['errMsg2'] = "Invalid username or password, please re-
enter or register first";
exit();
}
}else {
die("Query failed");
}
您需要从数据库中获取投票状态,并将其与“已投票”进行比较 以下是您可能要查找的一些代码:
//Create query
$qry = "SELECT * FROM students WHERE username='$login' AND password='$password'";
$result = mysql_query($qry);
//Check whether the query was successful or not
$result or die("Query failed");
// Check for wrong credentials
if (mysql_num_rows($result) == 0) {
header("location: index.php");
$_SESSION['errMsg2'] = "Invalid username or password, please
re-enter or register first";
exit();
}
// Login successful, fetch properties
$member = mysql_fetch_assoc($result);
if ($position == 'Student') {
// Check voting status
if ($member['status'] == 'voted') {
header("location: index.php");
$_SESSION['errMsg3'] = "You have voted!";
exit();
}
session_regenerate_id();
$_SESSION['SESS_MEMBER_ID'] = $member['username'];
$_SESSION['SESS_COURSE'] = $member['course'];
$_SESSION['NAME'] = $member['name'];
session_write_close();
header("location: candidates_list.php");
exit();
}
if ($position == 'Admin') {
session_regenerate_id();
$_SESSION['SESS_MEMBER_ID'] = $member['id'];
session_write_close();
header("location: admin/index.php");
exit();
}
然而,还有几个问题:
- 尚不清楚
是如何得到它的值的。理想情况下,$position
表应 有此信息(或对其的引用),您应该检查连接 用户在没有权限的情况下不会尝试担任管理员角色。 仅在客户端(学生
)上设置一些限制是不够的 当然这不会发生。您必须在数据库中再次检查它是否适合 要作为管理员的用户HTML
- 首先应检查
和$login
是否包含任何可能 将$password
语句转换为显示不需要的信息或 有副作用(阅读)。一个重要的 改进是不允许在中存在单个报价SELECT
或$login
$password
- 代码使用了不推荐使用的
函数。相反,mysql\uu
或MySQLi
应使用扩展名PDO_-MySQL
- 不太重要的是:奇怪的是,
被设置 根据位置使用不同字段的值。构建您的 编码方式应使其始终对应于同一字段:要么$\u会话['SESS\u MEMBER\u ID']
或username
,会话变量名建议它应该是第二个id