【问题标题】:Multiple condition within if statement within a function in PHP not giving desired resultPHP中函数内if语句中的多个条件未给出所需结果
【发布时间】:2016-02-10 14:26:33
【问题描述】:

我目前正在研究一个网站的标题,我已经定义了一个函数来从数据库中提供结果以显示在标题部分它适用于条件 1 和 2,但是当我需要它显示“主页”时即当条件 1 或 2 未设置或为空时,它不会返回“Home”。我希望在第三种情况下做错了,但不确定在哪里。

P.s: get_path() 是一个提取 url 参数并与数据库值进行比较的函数。

<?php
    function title($dbc){

            $path_info = get_path();
            $title_prod= $path_info['call_parts'][0];
            $title_cat = $path_info['call_parts'][1];

            if(isset($title_cat))
            {
                $query = "SELECT * FROM prdct_categories WHERE slugs = '$title_cat'";
                $result = mysqli_query($dbc, $query);
                $row = mysqli_fetch_assoc($result);
                $titleslug = $row['subgroup'];

            } elseif(isset($title_prod))
            {           
                $query1  = "SELECT * FROM prdct_categories WHERE product = '$title_prod'";
                $result1 = mysqli_query($dbc, $query1);
                $row = mysqli_fetch_assoc($result1);
                $titleslug = $row['product'];
             } elseif(!isset($title_prod) OR !isset($title_cat) OR isset($title_prod)==''  OR isset($title_cat)=='') 
             {
                $titleslug = 'Home';
             }
              return $titleslug;
              mysqli_close($dbc);
            }
        ?>
<title><?php echo title($dbc); ?></title>

提前感谢您的调查。

【问题讨论】:

    标签: php function mysqli


    【解决方案1】:

    我猜 isset($title_prod)=='' 应该是 $title_prod == ''isset($title_cat)=='' 应该是 $title_cat == ''。

    【讨论】:

    • 抱歉,这是我的代码中的错字。我修复了它但是没有做任何改变:-(
    • 好吧,我不知道 get_path 是做什么的,但如果 call_parts 为空,它可以工作:eval.in/516506
    【解决方案2】:

    您不能像在此处那样将 isset 与空字符串进行比较:

     OR isset($title_prod)==''  OR isset($title_cat)==''
    

    isset 返回一个布尔值。

    如果:

    elseif(!isset($title_prod) OR !isset($title_cat) OR $title_prod==''  OR $title_cat=='') 
    

    【讨论】:

      【解决方案3】:

      你的第三个条件有一个小错误:

      elseif(!isset($title_prod) OR !isset($title_cat) OR isset($title_prod)==''  OR isset($title_cat)=='')
      

      isset() 返回一个布尔值,这意味着这些条件之一永远不会为真isset($title_prod)=='' OR isset($title_cat)==''

      我认为您的意思是:[...] OR $title_pord == "" OR $title_cat == ""

      【讨论】:

        【解决方案4】:

        我用下面的标题标签修改了它;

        <title><?php if(title($dbc) != null){echo title($dbc)." | ".'Upperbit';}else echo "Home"  ." | ".'Upperbit'; ?></title>
        

        按照建议进行上述更改。也许我不需要第三个条件

        【讨论】:

          【解决方案5】:

          假设您已经按照正确的isset 语法以这种方式更改了脚本:

          elseif(!isset($title_prod) OR !isset($title_cat) OR $title_prod=='' OR $title_cat=='') 
          

          您的脚本却有意外的结果,因为如果,即$title_cat=='',第一个if 语句被评估为True

          if( isset($title_cat) )
          

          您必须以这种方式更改您的代码:

          if( $title_cat )
          {
              (...)
          }
          elseif( $title_prod )
          {
              (...)
          }
          else
          {
              (...)
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-05-14
            • 1970-01-01
            • 2015-01-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-08-27
            相关资源
            最近更新 更多