[英]PHP IF/ELSE condition not working as expected
我正在尝试实施多个条件,这些条件将检查提案的状态,并且仅在状态代码设置为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。 任何指导将不胜感激!
先感谢您!
您的条件并不互相排斥
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 {
}
这样最终的else仅在$count >= 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>';
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.