PHP IF / ELSE条件无法按预期工作

时间:2015-04-15 20:07:27

标签: php if-statement conditional-statements

我正在尝试实现检查提案状态的多个if else条件,并且只有在状态代码设置为1或5时才应执行特定代码。

出于某种原因,我在实施这个方面遇到了困难。目前,代码中的逻辑是如果提议状态与1或5不匹配,则返回消息,否则执行下一个查询。当我只指定一个数字,即(1或5)时,它将正常工作。

我面临的另一个问题是if和else条件在这部分:

if ($count == 1) {

        $feedback = '<p class="text-danger"> You have already accepted an application. You cannot accept or apply for any others. If this is a mistake then please contact the supervisor concerned directly.</p>'; 
    }

    if ($count < 1) {

        $status = $db_conx->prepare ("SELECT status_code FROM record WHERE student_record_id = :user_record_id AND proposal_id = :proposal");

        $status->bindParam(':user_record_id', $user_record_id, PDO::PARAM_STR);
        $status->bindParam(':proposal', $proposal, PDO::PARAM_STR);
        $status->execute();

        $proposalstatus = $status->fetchColumn();

        if($proposalstatus != 1)
        {
                //echo $proposalstatus;
            $feedback = '<p class="text-danger">The proposal is not at a status where it can be accepted</p>';
        }
    }

    else {

当我单独运行每个部分但当我尝试将它放在一个if语句中时,它会失败,并且根本不检查这些条件,只完成更新数据库并显示成功消息的任务。

完整的代码在这里:

try
    {
     $db_conx = new PDO("mysql:host=$mysql_hostname;dbname=$mysql_dbname", $mysql_username, $mysql_password);

     $db_conx->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

     $username = $_SESSION['username'];

     $sql = $db_conx->prepare("SELECT username, user_record_id FROM login_details
        WHERE username = :username");

     $sql->bindParam(':username', $username, PDO::PARAM_STR);

     $sql->execute();
     $user_record_id = $sql->fetchColumn(1);

     $proposal = $_POST['proposal_id'];

     $acceptCheck = $db_conx->prepare ("SELECT * FROM record WHERE student_record_id = :user_record_id AND status_code = 3");
     $acceptCheck->bindParam(':user_record_id', $user_record_id, PDO::PARAM_STR);
     $acceptCheck->execute();

     $count = $acceptCheck->rowCount();

     if ($count == 1) {

        $feedback = '<p class="text-danger"> You have already accepted an application. You cannot accept or apply for any others. If this is a mistake then please contact the supervisor concerned directly.</p>'; 
    }

    if ($count < 1) {

        $status = $db_conx->prepare ("SELECT status_code FROM record WHERE student_record_id = :user_record_id AND proposal_id = :proposal");

        $status->bindParam(':user_record_id', $user_record_id, PDO::PARAM_STR);
        $status->bindParam(':proposal', $proposal, PDO::PARAM_STR);
        $status->execute();

        $proposalstatus = $status->fetchColumn();

        if($proposalstatus != 1 || 5) //status must be either 'Approved' code 1 or 'Held' code 5
        {
                //echo $proposalstatus;
            $feedback = '<p class="text-danger">The proposal is not at a status where it can be accepted</p>';
        }
    }

    else {

                //Update all application records to 'Not available' when a proposal has been accepted

        $updateOtherRecords = $db_conx->prepare("UPDATE record SET status_code = 8, last_updated = now()
            WHERE proposal_id = :proposal");
        $updateOtherRecords->bindParam(':proposal', $proposal, PDO::PARAM_STR);
        $updateOtherRecords->execute();

                //Update other applicationa for the user concerned to 'Rejected'

        $updateUserRecord = $db_conx->prepare("UPDATE record SET status_code = 7, last_updated = now()
            WHERE student_record_id = :user_record_id");
        $updateUserRecord->bindParam(':user_record_id', $user_record_id, PDO::PARAM_STR);
        $updateUserRecord->execute();

                //Update the proposal concerned and assign it to the user

        $update = $db_conx->prepare("UPDATE record SET status_code = 3, last_updated = now()
            WHERE proposal_id = :proposal AND student_record_id = :user_record_id");
        $update->bindParam(':user_record_id', $user_record_id, PDO::PARAM_STR);
        $update->bindParam(':proposal', $proposal, PDO::PARAM_STR);
        $update->execute();

        $feedback = '<p class="text-success"> The proposal has been successfully accepted <span class="glyphicon glyphicon-ok"/></p>';
    }
} 

我真的需要知道如何对此进行排序,因为我将在此声明中使用if和else。任何指导都将非常感谢!

提前谢谢!

2 个答案:

答案 0 :(得分:2)

您的条件并非相互排斥

if ($count < 1) { 
  some stuff
}

if ($count == 1) {
 ...
} else 
 ... this code will execute when $count is *NOT* equal to 1,
  which includes when it's LESS than 1, e.g. "< 1" is true here
}

也许你想要

if ($count == 1) {
} else if ($count < 1) {
} else {
}

这样最终的其他只会在/ $count >= 1

时运行

答案 1 :(得分:1)

用提案状态1或5替换您的条件

if(!($proposalstatus == 1 || $proposalstatus == 5)) {
$feedback = '<p class="text-danger">The proposal is not at a status where it can be accepted</p>';
}