显示特定条件的错误消息

时间:2015-11-01 07:46:39

标签: php mysql

我一直在尝试在满足特定条件时显示特定的错误/警告消息。具体来说,

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");
}

1 个答案:

答案 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_函数。相反,MySQLiPDO_MySQL 应该使用扩展名。

  • 不太重要:看到$_SESSION['SESS_MEMBER_ID']被设置是很奇怪的 具有不同字段的值取决于位置。建立你的建设似乎更合乎逻辑 代码以这样的方式始终对应于相同的字段:usernameid,会话变量名称表明它应该是第二个。