我需要检查PHP中是否设置了多个项目而不是空

时间:2010-01-17 20:04:08

标签: php

下面是我需要工作的PHP代码片段,我需要确保3个项目尚未设置,而不是===''

我有责任检查是否未设置但是当我尝试查看值是否为空时(我可能现在甚至没有想清楚,我可能不需要做所有这些)但我需要确保重定向,login_name和密码都没有设置为值,如果它们设置为我需要确保该值不为空的值。

有人可以提供帮助,当我添加检查以查看值是否为空时,我的语法错误,也不确定我是否应该在1 if / else阻止这样的5-6检查,请帮助

我需要检查以下内容:
- $ _GET ['redirect']未设置
- $ _REQUEST ['login_name']未设置
- $ _REQUEST ['login_name']不是!= to'' - $ _REQUEST ['password']未设置
- $ _REQUEST ['password']不是!= to''

if (!isset($_GET['redirect']) && (!isset($_REQUEST['login_name'])) && (!isset($_REQUEST['password']))){
    //do stuff
}



更新

抱歉,目前还不是很清楚,我对此感到有点困惑。根据Hobodaves的回答,我能够修改它并让它按照我需要的方式工作。下面是我需要它的代码,它的效果非常好......所以如果可以改进那么这就是我需要的功能,我只是测试了这个。

if (!isset($_GET['redirect']) 
    && empty($_GET['redirect'])
    && isset($_REQUEST['login_name'])
    && !empty($_REQUEST['login_name'])
    && isset($_REQUEST['password'])
    && !empty($_REQUEST['password'])
) {
    echo 'load user';
}

如果已加载,则会运行登录过程

login.php?login_name=test&password=testing

如果加载了它,那么它将不会运行登录过程

login.php?login_name=test&password=  

4 个答案:

答案 0 :(得分:4)

if (!isset($_GET['redirect']) 
    && !isset($_REQUEST['login_name'])
    && empty($_REQUEST['login_name'])
    && !isset($_REQUEST['password'])
    && empty($_REQUEST['password'])
) {
    // do stuff
}

完全你所描述的,(不!=空= =空)。我认为你应该编辑你的问题来解释你要做什么,所以我们可以提出更好的选择。

编辑:

您更新的问题可以简化为:

if (empty($_GET['redirect'])
    && !empty($_REQUEST['login_name'])
    && !empty($_REQUEST['password'])
} {
    // load user
}

答案 1 :(得分:2)

更易于维护的解决方案是将每个密钥存储在一个数组中,然后对其进行预测并检查是否为isset或为空。你现在的解决方案并不是很干。

实施看起来像是:

<?php
$keys = array('login_name', 'password');

foreach($keys as $key)
{
   if(!isset($_REQUEST[$key]) || empty($_REQUEST['key'])
      // Show error message, kill script etc.
}


// Dot stuff

?>

答案 2 :(得分:1)

如果未设置全局变量,则与空白相同。因此:

!is_set(($_REQUEST['username']))empty($_REQUEST['username'])

相同

因此,根据您的更新,您可以简化为:

if (empty($_GET['redirect'])
    && !empty($_REQUEST['login_name'])
    && !empty($_REQUEST['password'])
) {
    echo 'load user';
}

请阅读!

抱歉,我之前给出的答案不会给你你想要的答案。原因如下:

如果使用!_REQUEST['password'],如果密码为空或未设置,则返回true。 但是如果你使用if($_REQUEST['password']),它会在设置全局变量的任何时候传递条件,即使它是空的。

因此我建议:

$no_redirect = (!$_GET['redirect']);
$login_name = (!$_REQUEST['login_name']) ? false : true;
$password = (!$_REQUEST['login_name']) ? false : true;

if($no_redirect && $login_name && $password) {
    echo 'load user';
}

对于以前不好的信息感到抱歉。

答案 3 :(得分:-2)

你可以创建一个数组

$array = array(
               $_GET['redirect'], 
               $_GET['redirect'],
               $_REQUEST['login_name'],
               $_REQUEST['login_name'],
               $_REQUEST['password'],
               $_REQUEST['password']
);

foreach($array as $stuf)
{
   if(!empty($stuff) && $tuff !=0) 
      //do something
}