帮助if和else语句逻辑

时间:2010-02-21 03:41:08

标签: php

以下代码只是我所拥有格式的一个示例

 isset($_GET['ids'])?$ids=$_GET['ids']:null;

 isset($_POST['idc'])?$idc=$_POST['idc']:null;

function ShowCart()

  {

   $que = "SELECT 

   FROM 
    cart 

   LEFT OUTER JOIN ...
       ON ...
   LEFT OUTER JOIN... ON... 


   WHERE ";
  $result = mysql_query($que);


while(){
  if (isset($ids)) { 
     display something
    for (){
      if(){
          } // end of if inside the for loop
        }// end of for loop
       }
  elseif($idc && $ids=null) {
           display something different
       }
  else{ 
       display nothing has passed 
      }
   }//end of while loop
}//end of showcart(); function

这就是上面的格式我想知道为什么if和elseif没有将isset()作为if和elseif参数。

我已经通过整个代码进行了调试,而GET和POST的print_r在整个代码中都有值。

print_r($_POST);
print_r($_GET);

4 个答案:

答案 0 :(得分:2)

Jona,如果你曾经懒得正确格式化你的代码,你会发现有问题的'其他'是一个功能,而你正在定义$ ID和$ idc在功能之外。请记住,在PHP中,全局变量(超级全局变量,例如$ _GET,$ _POST等等)在函数中是不可见的,除非您明确地将它们定义为函数中的全局变量。

添加global $idc, $idc;作为函数定义的第一行,if()将开始正常工作。


跟进:

您的代码仍然格式化,非常不稳定。拿这个:

isset($_GET['ids'])?$ids=$_GET['ids']:null;

您正在使用三元运算符,但不会将结果分配到任何位置,并使用“true”条件进行分配。这是一个丑陋的黑客。它应该写成这样:

 $ids = isset($_GET['ids']) ? $_GET['ids'] : null;

如果没有$ids,这种方式$_GET['ids']将设置为null。这表明您正在分配null而不是其他一些默认值。如果确实没有$_GET['ids'],那么这个:

 $idx = $_GET['ids'];

将以相同的方式工作,因为PHP将在右侧不存在的情况下自动分配null。当然,您仍然需要清理此值,因为您稍后将在SQL查询中使用它。像这样离开会引发SQL注入攻击和各种其他滥用行为。

除此之外,您仍在创建ShowCart()函数的$ids$idc OUTSIDE。因此,函数中的$ids$idc将自动使用空值创建,因为您尚未将它们声明为全局值。我想现在很明显你不知道这意味着什么,所以试试这段代码:

<?php

$var = 'Here I am!';

function showVar() {
    echo "Within showVar(), var is set to: $var\n";
}
function workingShowVar() {
    global $var;
    echo "Within workingShowVar(), var is equal to: $var\n";
}

showVar();
workingShowVar();

如果您复制/粘贴此代码,运行它,您将看到以下输出:

Within showVar(), var is set to:
Within workingShowVar(), var is set to: Here I am!

请注意,global声明的两个函数都相同,外。如果您能找出差异,那么您将意识到需要重新编写ShowCart()函数,如下所示:

function ShowCart() {
     global $ids, $idc;
     // rest of your code here
}

答案 1 :(得分:0)

你发布的代码是合理的,所以这可能是变量首先进入该脚本的问题。你确定这些变量是在GET字符串中定义的吗?

将其内容转储出来以确保:

print_r($_GET);

答案 2 :(得分:0)

试试这个:

$ids= isset($_GET['ids'])?intval($_GET['ids']):null;

$idc= isset($_GET['idc'])?intval($_GET['idc']):null;


if (isset($ids)) { 
    //display something
} 
elseif(isset($idc)) {
    //display something different
}
else 
{ 
    //display nothing has passed 
}

答案 3 :(得分:0)

我在上面测试了你的脚本,它按预期工作。也许你应该检查链接是否正确。