php else块未被调用
我是php的noob,我花了很多时间试图理解为什么我的else块没有被调用。我尝试了很多东西,但不确定为什么没有人打电话给我。我确信我在做一些愚蠢的事情php else块未被调用,php,Php,我是php的noob,我花了很多时间试图理解为什么我的else块没有被调用。我尝试了很多东西,但不确定为什么没有人打电话给我。我确信我在做一些愚蠢的事情 <?php $base_url = 'http://localhost/mine/'; $per_page = 3; //number of results to shown per page $num_links = 8; $cu
<?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');
?>
我忘了补充一点,我正在使用get方法来获取url的链接。所以我认为,即使没有搜索词,也有可能仍然显示index.php?字符串=
这意味着它仍然将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>';
if(strstrstr($\u SERVER['REQUEST\u URI'],“?string=“))
{
回声';
}
其他的
回声';
使用
if(isset($\u请求['string']){/*…*/}else{/*…*/}
或
if($_请求['string']!=''){/*…*/}else{/*…..*/}
(后者可能会在参数string
根本没有传递的情况下发出警告)
并非像您那样同时使用这两个选项。尝试使用此选项作为IF的条件:
if(isset($_REQUEST['string']) && trim($_REQUEST['string'])!=''){ ...
首先,它将检查变量是否存在,如果存在,它将检查变量中是否有一些文本-以防万一,如果条件不正确
isset
返回true或false。它不返回可与空值或引号之间的值进行比较的值
if(!empty($_REQUEST['string']))
上面的if语句应该足以检查该值是否已设置以及是否为空\
一些你应该读的东西
isset()有一个布尔返回值
看
您应该能够在if子句中使用它
if(isset($_REQUEST['string']))
{
}
else
{
}
也可以使用数组\键\存在()。看见这实际上并没有检查以确保请求参数具有有用的值
if(array_key_exists('string', $_REQUEST))
{
}
else
{
}
empty()将检查数组键、null和no值。这就是我要用的
if(!empty($_REQUEST['string']))
{
}
else
{
}
OP的条件也可以写成
if(!isset($\u REQUEST['string'])
编辑: 我之前错了:
是
PHP的等价物是
=因此,您的if(isset($\u REQUEST['string'])“”)
应该是if(isset($\u REQUEST['string'])!=“”)
要理解它为什么不起作用,我们需要将它分成几个部分
首先,将isset($\u REQUEST['string'])
(它将始终返回布尔值)的值与空字符串进行比较
如果你这样做
var_dump(isset($_REQUEST['string']));
根据是否设置,您应该将bool(true)
或bool(false)
视为输出
但是,当您将布尔值与字符串进行比较时,会将布尔值类型转换为字符串,以便两种类型相同
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" != ""
但是,我认为您要查找的是,如果变量未设置或为空,则返回false。可能是这样的,您可以使用GET
方法
$string = isset($_GET['string']) ? $_GET['string'] : NULL;
if(!empty($string ){
//your stuff
}
旁注:阅读此链接尝试添加大括号,如果效果不好,请添加echo
,以便逐步调试。
是SQL语法。PHP的等价物是=
因此您的if(isset($\u REQUEST['string'])“”)
应该是if(isset($\u REQUEST['string'])!=“”)
当if/else@user602525之后只有一条语句时,不需要大括号,ChoiZ在PHP中工作得非常好。还有!=实际上是100%可互换的。该注释无效。问题是“isset(xyz)”始终为真。可能的解决方案:如果(!isset(xyz)和&xyz“”)
。更好的解决方案:如果(!empty(xyz))
如果在类型转换后$a不等于$b,则$a$b不等于TRUE。适用于更多信息
您可以完美地使用该运算符,它不仅仅是SQL语法。PHP也使用它。是的,我现在才注意到@Chosenwann也可以写成if(!isset($\u REQUEST['string'))
@Fred ii-没错,但我认为OP也希望检查它是否为空,因此仅使用empty
就足以满足用户的需要。这只满足用户的第一个条件,即检查$\u REQUEST['string']
设置与否,它不满足他的第二个条件。我假定您的意思是,如果请求参数有任何值。您可能是对的。此处的名称为空()。您混淆了[]
s和()
s,并且没有在字符串前面放置$
。
$string = isset($_GET['string']) ? $_GET['string'] : NULL;
if(!empty($string ){
//your stuff
}