以下代码只是我所拥有格式的一个示例
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);
答案 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)
我在上面测试了你的脚本,它按预期工作。也许你应该检查链接是否正确。