我试图用$ _GET vars(params)创建一个动态页面,如果var等于某个东西,我会让它工作,它会显示内容。但是如果var不等于某个东西,那么它要么仍然显示内容,要么不显示错误;或同时显示错误和内容
<?php
if(!isset($_GET['type'])){
header("location: ?type=login");
} else {
$type = trim(strip_tags(stripslashes(mysql_real_escape_string($_GET['type']))));
}
if($type != 'login' || $type != 'register'){
?>
<h1>What your looking for can't be found!</h1>
<?php
}
if($type == 'login'){
?>
<h1>Login page:</h1>
<?php
}
if($type == 'register'){
?>
<h1>Register page:</h1>
<?php
}
&GT;
答案 0 :(得分:0)
您的代码中存在两个问题:
&&
而不是||
。您想查看是否未使用login
AND register
。if/else if
语句来确保只有一个条件存在。检查此代码:
<?php
if(!isset($_GET['type'])){
header("location: ?type=login");
} else {
$type = trim(strip_tags(stripslashes(mysql_real_escape_string($_GET['type']))));
}
if($type != 'login' && $type != 'register'){
?>
<h1>What your looking for can't be found!</h1>
<?php
} else if($type == 'login'){
?>
<h1>Login page:</h1>
<?php
} else if($type == 'register'){
?>
<h1>Register page:</h1>
<?php
}
答案 1 :(得分:0)
问题出现了,因为您在支票中使用比较运算符:
if($type != 'login' || $type != 'register')
基本上,这是两个独立的条件;当页面不是true
时,第一个将评估为login
,当页面不是true
时,第二个将评估为register
。 然而,他们没有检查彼此。
第一个条件会将register
视为有效,因为register
对if($type != 'login')
有效。第二个会认为login
有效,因为login
对if($type != 'register')
有效。
您需要使用 AND 比较器(&&
)确保允许不这些页面:if($type != 'login' && $type != 'register')
但是,就此而言,您根本无需担心设置$type
变量。只需检查_GET['type']
等同于您检查设置的内容:
<?php
if (isset($_GET['type']) && $_GET['type'] == 'login') {
?>
<h1>Login page:</h1>
<?php
}
else if (isset($_GET['type']) && $_GET['type'] == 'register') {
?>
<h1>Register page:</h1>
<?php
}
else {
header("location: ?type=login");
}
另请注意,mysql_
构造函数为deprecated as of PHP 5.5,并且是removed in PHP 7。请考虑切换为MySQLi或PDO,确保您还使用parameterised queries来阻止SQL injection。
希望这有帮助! :)
答案 2 :(得分:0)
你只需要更多地计算出逻辑... if,else if,else。案件处理是个问题。
<?php
if(!isset($_GET['type'])){
header("location: ?type=login");
} else if(isset($_GET['type'] {
If ($_GET['type'] !== "") {
$type = trim(strip_tags(stripslashes(mysql_real_escape_string($_GET['type']))));
}
}
......
?>
对不起半个问题的答案,我在手机上并且它不是非常适合代码的