PHP&&;或者如果else语句不能正常工作

PHP&&;或者如果else语句不能正常工作,php,mysql,html,Php,Mysql,Html,所以我有一个调查,我从中得出结果,我基本上要做一系列的if…else if…陈述,涉及哪些反馈被提交 我已将其设置为正常工作…除了一个问题。我知道这可能是件愚蠢的事,但我一辈子都搞不懂 无论如何,这是代码 if (($QID_A == 23) && ($row_result_2['Feedback'] == "")) { echo ""; } else if (($QID_A == 23) && ($row_result_2['Feedback'] <

所以我有一个调查,我从中得出结果,我基本上要做一系列的
if…else if…
陈述,涉及哪些反馈被提交

我已将其设置为正常工作…除了一个问题。我知道这可能是件愚蠢的事,但我一辈子都搞不懂

无论如何,这是代码

if (($QID_A == 23) && ($row_result_2['Feedback'] == "")) {
    echo "";
}
else if (($QID_A == 23) && ($row_result_2['Feedback'] <= 3)) {
    echo $row_custom['Content'];
}
else if (($QID_A == 23) && ($row_result_2['Feedback'] == 4) || ($row_result_2['Feedback'] == 5) || ($row_result_2['Feedback'] == 6)) {
    echo $row_custom['Content2'];
}
else if (($QID_A == 23) && ($row_result_2['Feedback'] >= 7)) {
    echo $row_custom['Content3'];   
}

如果您是说5和6的输出与4的输出不一样,我不知道问题出在哪里(也许您应该再次检查该值)

但对于问题的第二部分,关于写同样东西的另一种方式,我有这个选择:

if (23 == $QID_A)
{
    switch ($row_result_2['Feedback'])
    {
        case '':
            echo '';
            break;
        case 1:
        case 2:
        case 3:
            echo $row_custom['Content'];
            break;
        case 4:
        case 5:
        case 6:
            echo $row_custom['Content2'];
            break;
        default:
            echo $row_custom['Content3']; 
            break;
    }
}
我不知道$QID_A的作用是什么,但就这一部分而言,它似乎是相同的

我想你想要:

else if (($QID_A == 23) && (($row_result_2['Feedback'] == 4) || ($row_result_2['Feedback'] == 5) || ($row_result_2['Feedback'] == 6))) {
至于你的另一个问题,如果你需要50个问题,创建一个地图,类似于:

array(qID => array(array(valuesOfFeedback), contentNumber)
if( in_array($feedback, $map[$QID_A][0]) ) echo $map[$QID_A][1];

您可以使用带有开关的if

if ($QID_A == 23) {
    $feedback = $row_result_2['Feedback'];
    switch ($feedback) {
        case "":
            echo "";
            break;
        case 1:
        case 2:
        case 3:
            echo $row_custom['Content'];
            break;
        case 4:
        case 5:
        case 6:
            echo $row_custom['Content2'];
            break;
        default:
            echo $row_custom['Content3'];
    }
}

我意识到,如果你最终有更多的选择,切换可能会有点困难,但会让事情变得更容易。您还可以将其分解为QID_a字段的选项1-50的函数。

试试这段代码,它更高效、更清晰,并且(希望)能够解决问题:

if ($QID_A == 23) {
  switch (TRUE) {
    case $row_result_2['Feedback'] <= 3:
      echo $row_custom['Content'];
      break;
    case $row_result_2['Feedback'] <= 6:
      echo $row_custom['Content2'];
      break;
    case $row_result_2['Feedback'] <= 7:
      echo $row_custom['Content3'];
      break;
  }
}
if($QID_A==23){
开关(真){
案例$row_result_2[“反馈”]查看是否这样做

<?php
        if (($QID_A == 23) && ($row_result_2['Feedback'] == "")) {
            echo "";
        }
        else if (($QID_A == 23) && ($row_result_2['Feedback'] <= 3)) {
            echo $row_custom['Content'];
        }
        else if (
        ($QID_A == 23 && $row_result_2['Feedback'] == 4) ||
        ($QID_A == 23 && $row_result_2['Feedback'] == 5 )||
        ($QID_A == 23 && $row_result_2['Feedback'] == 6)
        ) {
            echo $row_custom['Content2'];
        }
        else if (($QID_A == 23) && ($row_result_2['Feedback'] >= 7)) {
            echo $row_custom['Content3'];
        }
?>

您需要一对额外的括号来明确运算符的优先级(并且不需要在每个表达式周围加括号):

echo$row_custom['Content2']; }

但是你最好用一个案例来写这个逻辑,这样它更清晰,也就是说

if ($QID_A == 23) {
    switch( $row_result_2['Feedback'] ) {
      case '':
        echo '';
        break;
      case 0:
      case 1:
      case 2:
      case 3:
        echo $row_custom['Content'];
        break;
      case 4:
      case 5:
      case 6:
        echo $row_custom['Content2'];
        break;
      default:
        echo $row_custom['Content3']; 
        break;
   }
}
相反,
else if($QID_A==23)和($row_result_2['Feedback']=4);($row_result_2['Feedback']=5);($row_result_2['Feedback']=6))
write
else if($QID_A==23)和($row_result_2['Feedback'=4);($row_result_2['Feedback']=4);($row)result| Feedback'=2['Feedback'=6])

为什么?如果&&与| |您的代码具有相同的优先级,那么您的代码就可以工作。

如果您的值为5或6,那么它会打印出什么?您所说的“重复一行又一行”是什么意思?如果您的$row_result_2[“反馈”]有5或6个,那么$QID_a可能是问题所在……它会呼应$row_custom[“内容2”];24次您在另一个循环中有此结构吗?是的,它在while()循环中,`while($row_result_2=mysql_fetch_assoc($feedbackQ3)){对。使用括号比sorry更安全。
和&
的优先级高于
|
,因此原始语句的工作方式类似于
($QID_a==23)和($row_result_2)['Feedback']==4)
($row\u result\u 2['Feedback']==5)
($row\u result\u 2['Feedback']==6)
。尝试了这个miki,它仍然在做同样的事情。呼应$row\u custom['Content2'的值;24次。还有其他想法吗?对不起。我看起来是一样的,但我只是有一个模糊的概念……它让我想起了我曾经看到的东西。我会尝试想出C计划。没有理由道歉,皮特,似乎错误不在声明中,至少我找不到。检查一下我在OP中所做的更新。我仍然不知所措……结果是我t根据我之前的错误显示了所有的if-else语句,这是一个很难追踪的错误,最终使用了您的代码。谢谢!
else if ($QID_A == 23 && ($row_result_2['Feedback'] == 4 || $row_result_2['Feedback'] == 5 || $row_result_2['Feedback'] == 6)) {
if ($QID_A == 23) {
    switch( $row_result_2['Feedback'] ) {
      case '':
        echo '';
        break;
      case 0:
      case 1:
      case 2:
      case 3:
        echo $row_custom['Content'];
        break;
      case 4:
      case 5:
      case 6:
        echo $row_custom['Content2'];
        break;
      default:
        echo $row_custom['Content3']; 
        break;
   }
}