PHP是处理未分配的POST和GET的正确方法
我最近在工作时的计算机上安装了WAMP服务器包。当我第一次开始使用PHP时(不久前),我手动安装了PHP、MySQL和Apache。我一直在开发的应用程序现在给了我一大堆通知信息:PHP是处理未分配的POST和GET的正确方法,php,post,get,Php,Post,Get,我最近在工作时的计算机上安装了WAMP服务器包。当我第一次开始使用PHP时(不久前),我手动安装了PHP、MySQL和Apache。我一直在开发的应用程序现在给了我一大堆通知信息: Notice: Undefined index: lookatLon in C:\wamp\www\coordinates.php on line 3 事实证明,我正在处理$variable=$\u请求['whatever']的赋值;完全错了。例如我有一个脚本,它从$_GET['longitude']接受$long
Notice: Undefined index: lookatLon in C:\wamp\www\coordinates.php on line 3
事实证明,我正在处理$variable=$\u请求['whatever']的赋值;完全错了。例如我有一个脚本,它从$_GET['longitude']接受$longitude和$latitude;和$_获得[纬度]。。。。但在某些情况下,加载页面时url中没有任何“经度=”或“纬度=”
现在我收到了这些通知,它不喜欢我的未设置变量
所以,我的问题是,,在有时有GET或POST信息可用,有时没有的情况下,处理这种情况的正确方法是什么。我刚刚读到,关闭通知不是一个好主意(这肯定会解决我的问题),但解决办法是正确地编码
那么,根据情况,正确的方法是什么来解释GET或POST数据可能存在,也可能不存在?查看是否设置了该值。(http://php.net/manual/en/function.isset.php)
不要忘记在代码中的适当位置检查是否有有效值,清除用户输入等。查看是否设置了该值。(http://php.net/manual/en/function.isset.php)
不要忘记在代码中的适当位置检查您是否有有效值,清除用户输入等。您必须使用
isset()测试包装变量:
if (isset($_REQUEST['whatever'])) {
if ($_REQUEST['whatever'] == '.....') {
}
}
短期内,您可以使用@
错误抑制操作器,但这是一个短期解决方案,只会模糊问题。您还可以在php.ini级别禁用警告,但这只是一个短期的不可靠修复。最好的解决方案是在任何地方使用isset()包装器。痛苦,但最好的长期解决方案。您必须使用isset()测试来包装变量:
if (isset($_REQUEST['whatever'])) {
if ($_REQUEST['whatever'] == '.....') {
}
}
短期内,您可以使用@
错误抑制操作器,但这是一个短期解决方案,只会模糊问题。您还可以在php.ini级别禁用警告,但这只是一个短期的不可靠修复。最好的解决方案是在任何地方使用isset()包装器。痛苦,但最好的长期解决方案。我发现处理它的最简单方法是使用isset()函数,如下所示:
if(isset($_GET['foo']))
{
//do whatever with $_GET['foo']
}
我发现处理它的最简单方法是使用isset()函数,如下所示:
if(isset($_GET['foo']))
{
//do whatever with $_GET['foo']
}
要获取值,必须初始化变量,如下所示
$longitude = '';
$latitude = '';
if (isset($_GET['longitude'])) $longitude = $_GET['longitude'];
if (isset($_GET['latitude'])) $latitude = $_GET['latitude'];
然后使用指定的变量
要控制程序流,您可以直接查询请求变量:
if (isset($_GET['id'])) {
//get data
}
- 不要使用$\请求。知道你的数据来自哪里,不要让它干扰
- 您可能还希望对请求变量进行一些验证
- 例如,如果要批处理变量,可以在数组中保留变量以创建SQL语句
要获取值,必须初始化变量,如下所示
$longitude = '';
$latitude = '';
if (isset($_GET['longitude'])) $longitude = $_GET['longitude'];
if (isset($_GET['latitude'])) $latitude = $_GET['latitude'];
然后使用指定的变量
要控制程序流,您可以直接查询请求变量:
if (isset($_GET['id'])) {
//get data
}
- 不要使用$\请求。知道你的数据来自哪里,不要让它干扰
- 您可能还希望对请求变量进行一些验证
- 例如,如果要批处理变量,可以在数组中保留变量以创建SQL语句
非强制性且可读性稍差的三元溶液:
$myvar = ( isset($_GET['myvar']) ? sanitize($_GET['myvar']) : 'default value' );
sanitize()
只是一个用于清理输入的通用占位符函数。非强制性且可读性稍差的三元解决方案:
$myvar = ( isset($_GET['myvar']) ? sanitize($_GET['myvar']) : 'default value' );
sanitize()
只是一个用于清理输入的通用占位符函数。re:“到处使用isset包装器”-将isset逻辑放入函数中如何?如果适用,该函数还可以删除输入,比如$myvar=getRequestVarClean(“myvar”);re:“到处使用isset包装器”-将isset逻辑放入函数中如何?如果适用,该函数还可以删除输入,比如$myvar=getRequestVarClean(“myvar”)+1因为我是为你更新的,子母弹上校。没有“消毒输入功能”@watcher。。。我很感激你的批评,尽管我认为你的理由充其量也有点渺茫。看看你在这里的评论,你可能会得出这样的结论:你主张不要对GET变量进行消毒。+1因为我为你更新了,斯帕奈尔上校。没有“消毒输入函数”@watcher。。。我很感激你的批评,尽管我认为你的理由充其量也有点渺茫。只要看一下你在这里的评论,你就可以得出结论,你主张不要对GET变量进行消毒。+1对于通过善意但考虑不周的$\u请求
superglobal来驳斥上下文的错误混合。我同意这一点作为答案,因为它在很多方面对我都有帮助。并不是说其他答案不是很好。谢谢大家+1通过善意但考虑不周的$\u请求
superglobal来驳斥错误的上下文混合。我将此作为答案,因为它在许多方面对我很有帮助。并不是说其他答案不是很好。谢谢大家!