Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 显示特定条件的错误消息_Php_Mysql - Fatal编程技术网

Php 显示特定条件的错误消息

Php 显示特定条件的错误消息,php,mysql,Php,Mysql,我一直试图在满足特定条件时显示特定的错误/警告消息。具体来说, 1) 未注册或无效的用户将收到$errMsg2错误消息(我已完成此操作) 2) 已注册且“未投票”的用户将成功登录并继续进行投票流程(我已完成此操作) 3) 已注册且“已投票”的用户应显示类似“You have vote!”的错误消息。相反,它一直显示$errMsg2错误(这是我这里的主要问题) *我分别声明了$stat和$stat2,因为它与我的mySQL db变量/结构匹配 我已经尝试过使用if/else语句,但我无法满足$st

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

1) 未注册或无效的用户将收到$errMsg2错误消息(我已完成此操作)

2) 已注册且“未投票”的用户将成功登录并继续进行投票流程(我已完成此操作)

3) 已注册且“已投票”的用户应显示类似“You have vote!”的错误消息。相反,它一直显示$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");
}

您需要从数据库中获取投票状态,并将其与“已投票”进行比较

以下是您可能要查找的一些代码:

//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
    ,会话变量名建议它应该是第二个


我看不出您在哪里使用$stat2@MateoBarahona是的,我删除了它,因为我一直在各地试验,但仍然没有得到解决方案。因此,如果有人能就如何实现它向我提供建议,那就太好了。这段代码将假定密码已发布,即使已经有会话。这真的是你想要的吗?我认为,一旦用户发送了密码,他们的下一步行动就不应该再涉及密码,如果您仍然检查密码匹配,那么它将失败。您应该从Db获取用户,然后检查他的状态是$stat1(案例1)还是$stat2(案例2)。您还可以通过在($stat1,$stat2)中使用状态来限制查询,您还需要检查两次是否为“学生”。如果第一次失败,你将直接走向死亡。