如何检查是否$ _GET [ '身份证']设置并使用PHP

问题描述:

这里是不是空的是一个PHP代码

​​

现在,如果ID设置(例如:index.php的ID = 12),然后该操作被执行,但如果没有设置id(例如:index.php?id =),这会显示一个错误,如何解决这个问题?

如何确定ID是一个整数,它不是空的,然后执行特定操作....

编辑

谢谢大家对你的答案,但我仍然收到这个错误...

if(isset($_GET['id'])) { // I implemented all these codes but still.... 
    $user= User::find_by_id($_GET['id']); 
    // Database Classes Fetches user info from database 
} 
else { 
    redirect('index.php'); //redirect function 
} 

如果id是1或大于1,那么脚本执行完美。 (的index.php?ID = 1)

但我的id设置ID为提我得到一个错误i..e的index.php?ID =

代码应该自动重定向用户的index.php页面而不是显示错误.....

错误:数据库查询失败:您的SQL语法错误;检查对应于你的MySQL服务器版本在线路附近使用“限制1” 1

+0

当查询字符串中没有设置id var时会发生什么? – kevtrout 2010-08-09 21:07:01

+0

按整数,你的意思是PHP的数据类型,还是你的意思是任何数字序列? – Gordon 2010-08-09 21:19:04

+0

如果您查看代码,它不是数据类型,因为@_GET allways返回一个字符串。 – ThoKra 2010-08-09 21:23:19

您应该同时检查组状态和内容:

if (isset($_GET['id']) && !empty($_GET['id'])) 
    // .... 

请注意,您应该而不是直接使用该值并使用它。你应该确保它只包含你期望的值。要检查一个整数,甚至更好地从上一个整数上班,做这样的事情:

$id = (isset($_GET['id']) && is_numeric($_GET['id'])) ? intval($_GET['id']) : 0; 

if ($id != 0) 
    // id is an int != 0 
else 
    redirect('index.php'); 
+1

is_int永远不会是真的,从php.net:'注意:要测试一个变量是数字还是数字字符串(例如表单输入,总是一个字符串),你必须使用is_numeric()。 ' – ThoKra 2010-08-09 21:00:11

+0

但是,如果我保持网址为(index.php?id =)它显示错误.....,它应该重定向到index.php – 2010-08-09 21:01:09

+0

@Terw:糟糕,这就是发生了什么,当我尝试记住某些功能我不经常使用..谢谢! – poke 2010-08-10 09:29:02

if (!empty($_GET['id']) && filter_var($_GET['id'], FILTER_VALIDATE_INT)) 

if (!empty($_GET['id']) && ctype_digit($_GET['id'])) 
+2

请注意,整数“0”和字符串“0”被PHP视为“空”。 – 2010-08-09 20:52:59

+0

@丹尼尔:是的,我记得虽然在写答案,但我敢打赌,他指的是一些主键肯定是正整数 – zerkms 2010-08-09 20:55:06

+0

这是完全可能的主键可能是零或负。 – timdev 2010-08-09 21:18:22

是什么错误告诉你正确的语法手册?

但是,如果它的设置,这将检查,如果它是一个整数

if(isset($_GET['id']) && ctype_digit($_GET['id']) && intval($_GET['id']) > 0) 

is_numeric @ php.net

或检查出ctype_digit

+1

让我们假设?id = 1.5 – zerkms 2010-08-09 20:54:22

+1

'is_numeric'真的不会削减它。 – 2010-08-09 20:56:13

+0

链接到ctype_digit函数,只是检查是否有整数,更新示例使用此 – ThoKra 2010-08-09 20:58:50

How to determine id is an integer and it's not empty and then perform the specific action....

if (!empty($_GET['id']) && (intval($_GET['id']) == $_GET['id'])) { 
    //do something 
} else { 
    redirect('index.php'); //redirect is a function 
} 

上面可能不是最好的解决办法,但它应该工作你需要什么。它不会让id为0,并且会要求它是一个整数。

+0

不会像你在php.net上看到的那样,@_GEt永远不会返回整数(如果你没有指定它自己),它会返回一个字符串。 – ThoKra 2010-08-09 21:05:24

+0

谢谢你指出。我纠正了代码,以便它能够满足他的需求。 – Joseph 2010-08-09 21:15:03

+0

可悲的是,它不适合我需要....它应该很简单,如果 id =(空格)或id = 0它应该自动将用户重定向到索引。php页面没有更进一步..但它不工作... :( – 2010-08-09 21:28:33

嗯......如果你将其设置为一个整数类型的变量,那么你也可以这样做:

if($_GET['id'] && gettype($_GET['id']) == 'integer'){ 
    #do something 
}else{ 
    #do something else 
} 
+0

这不会起作用,因为'gettype'会一直报告一个字符串类型,因为GET参数通常不是键入的。另外调用'$ _GET ['id']'会在未设置时引发索引警告。 – poke 2010-08-10 16:22:43

if(isset($_GET['id']) && ctype_digit($_GET['id']) && is_numeric($_GET['id']) && $_GET['id']>0) { 
    $user= User::find_by_id($_GET['id']); 
    } 
else { 
    redirect('index.php'); //redirect function 
    } 

试试这个,这个代码完全丸您的要求。

看来你只是有一个问题,当你想检查它的设置时,是否抛出一个true。那是因为它已设置,但未设置为您想要使用的值。

我假设用户ID必须是> 0,因此只是这样做

if (isset($_GET['id']) && $_GET['id'] > 0) { 
    $user= User::find_by_id($_GET['id']); 
} else { 
    redirect('index.php'); 
} 

而且你prolly最好的清洁ID处理这么

$userID = isset($_GET['id']) && $_GET['id'] > 0 ? (int) $_GET['id'] : 0; 

if ($userID) { 
    $user= User::find_by_id($userID); 
} else { 
    redirect('index.php'); 
} 

前Theres很多的方法来做到这一点,我个人更喜欢这一点。它使你的代码看起来更干净。

你将不得不为每个可能的情况检查多次:如果id未设置或为空,该怎么办?如果设置了id,但它不是数字?如果在GET请求中根本不存在'id'键怎么办?

我有类似的情况。我用GET发送了两个变量,一个数字:'id',另一个字符串是一个名字:'state'...我通过检查所有可能的条件来解决它。