我是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>';
答案 0 :(得分:2)
您的IF条件错误
isset
返回true或false,它不返回可以与空值或引号之间的值进行比较的值
if(!empty($_REQUEST['string']))
上面的if语句应足以检查该值是否已设置且是否为空\
你应该阅读的一些内容
答案 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
}
答案 6 :(得分:-2)
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
{
}