我一直在尝试在满足特定条件时显示特定的错误/警告消息。具体来说,
1)未注册或无效的用户将收到$ errMsg2错误消息(我已完成此操作)
2)已注册且“未投票”的用户将成功登录并继续投票流程(我已完成此操作)
3)注册并且“投票”的用户应该拥有类似“您已投票!”的内容。错误信息。相反,它继续显示$ errMsg2错误(这是我的主要问题)。
*我已经分别声明了$ stat和$ stat2,因为它匹配我的mySQL db变量/结构。
我尝试过使用if / else语句进行大量游戏,但我无法满足$ stat2条件。
请帮忙。
下面是我的php代码,
$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");
}
答案 0 :(得分:1)
您需要从数据库中获取投票状态,并将其与投票'进行比较。
以下是您可能正在寻找的一些代码:
//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
如何获得它的价值。理想情况下students
表应该
有这些信息(或对它的引用),你应该检查连接
如果没有权限,用户不会尝试担任管理员角色。
制作时,对客户端(HTML
)方面有一些限制是不够的
确定这不会发生。您必须再次在数据库中检查它是否正常
用户担任管理员。
$login
和$password
不要包含任何内容
将SELECT
语句转换为显示不需要的信息的内容
有副作用(阅读约SQL
injection)。一个重要的
改进将是不允许存在单引号
$login
或$password
。
该代码使用已弃用的mysql_
函数。相反,MySQLi
或PDO_MySQL
应该使用扩展名。
不太重要:看到$_SESSION['SESS_MEMBER_ID']
被设置是很奇怪的
具有不同字段的值取决于位置。建立你的建设似乎更合乎逻辑
代码以这样的方式始终对应于相同的字段:username
或id
,会话变量名称表明它应该是第二个。