Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 函数中的IF语句有问题_Php - Fatal编程技术网

Php 函数中的IF语句有问题

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='

我是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='$_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
为您的查询添加一个布尔条件。但在将内容包括在查询中之前,需要对其进行清理,以避免