Php 函数中的IF语句有问题
我是PHP程序员新手,我创建了一个函数来更改SQL命令。以下是相关代码:Php 函数中的IF语句有问题,php,Php,我是PHP程序员新手,我创建了一个函数来更改SQL命令。以下是相关代码: $extra_text_length = strlen($_GET[extra_text]); $boolean = $_GET['first-boolean']; function check_boolean(){ if($extra_text_length > 0){ if($boolean=="and"){ $query .= " AND (software.SWID='
$extra_text_length = strlen($_GET[extra_text]);
$boolean = $_GET['first-boolean'];
function check_boolean(){
if($extra_text_length > 0){
if($boolean=="and"){
$query .= " AND (software.SWID='$_GET[extra_text]')";
} elseif($boolean=="or"){
$query .= " OR (software.SWID='$_GET[extra_text]')";
} elseif($boolean=="not"){
$query .= " NOT IN (software.SWID='$_GET[extra_text]')";
}
} return $boolean;
}
check_boolean();
问题是它没有做它应该做的事情。但是,如果我从函数中删除了代码,并因此删除了check_boolean()方法,那么它将非常有效。有人能给我一个提示吗?提前感谢您忘记了$boolean前面的$sign。当我开始学习PHP时,我也会学习其他语言;-) 您忘记了$boolean之前的$sign。当我开始学习PHP时,我也会学习其他语言;-)
boolean
缺少它的$
,尽管我更喜欢将其设置为类似于函数检查布尔($bool)
的参数,而不是使用全局变量。另外,请阅读。你现在有一个可怕的弱点。最短的解决方案是在查询中的变量周围放置mysql\u real\u escape\u string()
(假设您使用的是mysql),但请彻底了解SQL注入。boolean
缺少它的$
,尽管我更喜欢将其设置为类似于函数check\u boolean($bool)的参数
不要使用全局变量。另外,请阅读。你现在有一个可怕的弱点。最短的解决方案是在查询中的变量周围放置mysql\u real\u escape\u string()
,但请彻底了解SQL注入。布尔==”和“应该是$boolean==”和“布尔==”和“应该是$boolean==”和“问题是变量的范围,在功能块中输入时,全局范围内的变量不可见
您应该将它们作为参数传递。你的电话应该是:
check_boolean($extra_text_length, $boolean, $software);
您必须将函数声明更改为:
function check_boolean($extra_text_length, $boolean, $software)
另外,最好避免将全局代码和函数混合使用。您可以将它们放在一个单独的文件中,并使用require_一次性包含它们
我还鼓励您不要使用任何全局代码。例如,可以将前两行包装到main()函数中
另外,“return boolean;”应该是“return$query;”问题是变量的范围,当您在功能块中输入时,全局范围内的变量不可见 您应该将它们作为参数传递。你的电话应该是:
check_boolean($extra_text_length, $boolean, $software);
您必须将函数声明更改为:
function check_boolean($extra_text_length, $boolean, $software)
另外,最好避免将全局代码和函数混合使用。您可以将它们放在一个单独的文件中,并使用require_一次性包含它们
我还鼓励您不要使用任何全局代码。例如,可以将前两行包装到main()函数中
另外,“return boolean;”应该是“return$query;”请确保使用变量名$boolean而不是boolean,否则它将尝试获取常量 你也必须小心你传递给你的方法的东西$查询也是一个尚未定义的变量 一定要这样做
$extra_text_length = strlen($_GET[extra_text]);
$boolean = $_GET['first-boolean'];
function check_boolean($query, $extra_text_length, $boolean, $software){
if($extra_text_length > 0){
if($boolean=="and"){
$query .= " AND ($software.SWID='$_GET[extra_text]')";
} elseif($boolean=="or"){
$query .= " OR ($software.SWID='$_GET[extra_text]')";
} elseif($boolean=="not"){
$query .= " NOT IN ($software.SWID='$_GET[extra_text]')";
}
}
return $query;
}
$query = '...';
$software = '';
$query = check_boolean($query, $extra_text_length, $boolean, $software);
另外,避免在函数中使用外部变量,因为您不知道它们将如何反应。(元整)
您还应该检查所有变量是否存在。请确保使用变量名$boolean而不是boolean,否则它将试图获取常量 你也必须小心你传递给你的方法的东西$查询也是一个尚未定义的变量 一定要这样做
$extra_text_length = strlen($_GET[extra_text]);
$boolean = $_GET['first-boolean'];
function check_boolean($query, $extra_text_length, $boolean, $software){
if($extra_text_length > 0){
if($boolean=="and"){
$query .= " AND ($software.SWID='$_GET[extra_text]')";
} elseif($boolean=="or"){
$query .= " OR ($software.SWID='$_GET[extra_text]')";
} elseif($boolean=="not"){
$query .= " NOT IN ($software.SWID='$_GET[extra_text]')";
}
}
return $query;
}
$query = '...';
$software = '';
$query = check_boolean($query, $extra_text_length, $boolean, $software);
另外,避免在函数中使用外部变量,因为您不知道它们将如何反应。(元整)
您还应该检查是否存在所有变量。
$extra\u text\u length
、$boolean
和$query
在函数中不可用。您必须将它们作为参数传递
此外,在函数内部更改参数不会在函数外部更改其值。返回文本。下面是一个稍微改进的版本:
function check_boolean($length, $b, $extra_text){
$operators = array('and', 'or', 'not');
if($length > 0){
if(in_array($b, $operators){
return " " . $b . " (software.SWID='" . $extra_text . "')";
}
}
return '';
}
$query .= check_boolean($extra_text_length, $boolean, mysql_real_escape_string($_GET['extra_text']));
请注意,您必须在用户输入上调用
mysql\u real\u escape\u string
,否则您的代码容易被SQL注入。$extra\u text\u length
,$boolean
和$query
在函数中不可用。您必须将它们作为参数传递
此外,在函数内部更改参数不会在函数外部更改其值。返回文本。下面是一个稍微改进的版本:
function check_boolean($length, $b, $extra_text){
$operators = array('and', 'or', 'not');
if($length > 0){
if(in_array($b, $operators){
return " " . $b . " (software.SWID='" . $extra_text . "')";
}
}
return '';
}
$query .= check_boolean($extra_text_length, $boolean, mysql_real_escape_string($_GET['extra_text']));
请注意,您必须在用户输入上调用
mysql\u real\u escape\u string
,否则您的代码很容易被SQL注入。首先您必须使用$boolean
而不是if
表达式中的boolean
第二:$query
、$extra\u text\u length
和$boolean
必须在检查布尔值
中可见。您可以通过将它们作为参数传递来实现,例如:
function check_bookean(&$query, $extra_text_length, $boolean) {
# ...
}
check_boolean($query, $extra_text_length, $boolean);
$query
需要在函数定义中用符号(&)作为前缀,因为它是在函数内部修改的
check\u boolean
将根据extra\u text
为您的查询添加一个布尔条件。但在将内容包括在查询中之前,需要对其进行清理,以避免SQL注入:
if($extra_text_length > 0){
$extra_text = mysql_real_escape_string($_GET['extra_text']); # sanitize content
if(boolean=="and"){
$query .= " AND (software.SWID='$extra_text')"; # to use it in the query
} elseif(boolean=="or"){
$query .= " OR (software.SWID='$extra_text')";
} elseif(boolean=="not"){
$query .= " NOT IN (software.SWID='$extra_text')";
}
} return boolean;
}
首先,必须在
if
表达式中使用$boolean
而不是boolean
第二:$query
、$extra\u text\u length
和$boolean
必须在检查布尔值
中可见。您可以通过将它们作为参数传递来实现,例如:
function check_bookean(&$query, $extra_text_length, $boolean) {
# ...
}
check_boolean($query, $extra_text_length, $boolean);
$query
需要在函数定义中用符号(&)作为前缀,因为它是在函数内部修改的
check\u boolean
将根据extra\u text
为您的查询添加一个布尔条件。但在将内容包括在查询中之前,需要对其进行清理,以避免