PHP是处理未分配的POST和GET的正确方法

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

我最近在工作时的计算机上安装了WAMP服务器包。当我第一次开始使用PHP时(不久前),我手动安装了PHP、MySQL和Apache。我一直在开发的应用程序现在给了我一大堆通知信息:

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来驳斥错误的上下文混合。我将此作为答案,因为它在许多方面对我很有帮助。并不是说其他答案不是很好。谢谢大家!