php else阻止不被调用

时间:2013-12-16 20:57:03

标签: php

我是php中的noob,我花了很多时间试图理解为什么我的else块没有被调用。我已经尝试了很多东西,但不确定为什么它没有被调用。我确信我做的事情很蠢。

     <?php   
 $base_url = 'http://localhost/mine/';
     $per_page = 3;                           //number of results to shown per page 
     $num_links = 8;   
     $cur_page = 1;                          // set default current page to 1

if(isset($_REQUEST['string'])<>'') 
{
      $search_string = " title LIKE '%".mysql_real_escape_string($_REQUEST["string"])."%' OR description LIKE '%".mysql_real_escape_string($_REQUEST["string"])."%'";
      $query = mysql_query("SELECT * FROM products WHERE ".$search_string);
      $row = mysql_num_rows($query) or die(mysql_error());

      $row = $row; 

      $cur_page = $_GET['page'];
      $cur_page = ($cur_page < 1)? 1 : $cur_page; 
      $offset = ($cur_page-1)*$per_page;                //setting offset

      $pages = ceil($row/$per_page);              // no of page to be created


      $start = (($cur_page - $num_links) > 0) ? ($cur_page - ($num_links - 1)) : 1;
      $end   = (($cur_page + $num_links) < $pages) ? ($cur_page + $num_links) : $pages;

      $res  =   mysql_query("SELECT * FROM products WHERE ".$search_string." ORDER BY title LIMIT ".$per_page." OFFSET ".$offset);  

      while($row=mysql_fetch_array($res))
         {
         include ('form.php');
         }
    }
      else
     include ('alert.php');

    ?>

我忘了添加我正在使用url的get方法。所以我认为有可能即使没有搜索词,它仍然显示index.php?string = 这意味着它仍然将if语句视为true而不是else语句。如果我错了,请纠正我。

这是我的pagination.php的片段

if (strstr($_SERVER['REQUEST_URI'], "?string="))
        {
            echo '<span id="prev"> <a href="' . $_SERVER['PHP_SELF'] . '?string=' . $_GET['string'] . '&page=' . (1) . '">' . $dir . '</a> </span>';
        }
        else
            echo '<span id="prev"> <a href="' . $_SERVER['PHP_SELF'] . '?page=' . (1) . '">' . $dir . '</a> </span>';

7 个答案:

答案 0 :(得分:2)

您的IF条件错误

isset返回true或false,它不返回可以与空值或引号之间的值进行比较的值

if(!empty($_REQUEST['string'])) 

上面的if语句应足以检查该值是否已设置且是否为空\

你应该阅读的一些内容

isset() vs empty() vs is_null()

empty()'s documentation

答案 1 :(得分:2)

OP的条件也可以写成if(!isset($_REQUEST['string']))


编辑:  我之前错了:

<>SQL syntax

PHP等价物为!=因此if(isset($_REQUEST['string'])<>'')应为if(isset($_REQUEST['string'])!='')

答案 2 :(得分:0)

使用

if(isset($_REQUEST['string'])) { /*...*/ } else { /*...*/ }

if($_REQUEST['string'] != '') { /*...*/ } else { /*....*/ } (虽然后者可能在参数string的情况下发出警告但根本没有通过)

并非像你一样同时出现。

答案 3 :(得分:0)

尝试将此作为IF的条件:

if(isset($_REQUEST['string']) && trim($_REQUEST['string'])!=''){ ... 

首先它将检查变量是否存在,如果存在,它将检查其中是否包含一些文本 - 以防万一

答案 4 :(得分:0)

要理解为什么它不起作用,我们需要将它分解为部分。

首先,您将isset($_REQUEST['string'])(将始终返回布尔值)的值与空字符串进行比较。

如果你这样做

var_dump(isset($_REQUEST['string']));

您应该看到bool(true)bool(false)作为输出,具体取决于它是否已设置。

但是,当你将一个布尔值与一个字符串进行比较时,它会将boolean类型转换为一个字符串,这样两种类型都是相同的。

var_dump( (string) false ); // Outputs string(0) ""
var_dump( (string) true ); // Outputs string(1) "1"

所以你基本上做了以下事情:

// When $_REQUEST['string'] is unset
if ("" <> "") { ... } // Will always be false because "" === ""

// When $_REQUEST['string'] is set
if ("1" <> "") { ... } // Will always be *true* because "1" != ""

因此,原因必须是$_REQUEST['string']实际上是未设置。我在PHP 5.5.3中有tested this myself

$set_var = 'i_am_set';
var_dump( isset($set_var) <> '' ); // Outputs bool(true)
var_dump(  isset($unset_var) <> '' ); // Outputs bool(false)

但是,我认为您正在寻找的是empty(),如果变量未设置或为空,它将返回false。

答案 5 :(得分:0)

可能就是这样,你说你使用GET方法

$string = isset($_GET['string']) ? $_GET['string'] : NULL;

if(!empty($string ){
   //your stuff
}

旁注:请阅读此链接How can I prevent SQL injection in PHP?

答案 6 :(得分:-2)

isset()有一个布尔返回值。

请参阅http://www.php.net/isset

您应该只能在if子句中使用它。

if(isset($_REQUEST['string'])) 
{

}
else
{

}

您也可以使用array_key_exists()。见http://www.php.net/function.array-key-exists。这实际上并不会检查以确保请求参数具有有用的值。

if(array_key_exists('string', $_REQUEST)) 
{

}
else
{

}

empty()将检查数组键,null和没有值。这就是我使用的。

if(!empty($_REQUEST['string'])) 
{

}
else
{

}