使用isset时未定义的索引

时间:2014-01-02 11:29:11

标签: php undefined isset

虽然我使用if(isset())仍然获得

 Notice: Undefined index: user_name in C:\xampp\htdocs\www\jq\182-186 Users online sample application\users.php

这是PHP代码

的一部分
if (isset($_POST['user_name']  , $_POST['action']) || isset($_POST['action'])){

    $user_name = $_POST['user_name'];
    $action = $_POST['action'];

编辑:|| isset($_POST['action'])每半秒检查一次数据库jquery的部分需要。{/ p>

jquery的

setInterval(function(){
    $.post('users.php', { action : 'list'} , function(data){
        $('#users_online').html(data);
        });


    },500);

所以我无法将其删除

3 个答案:

答案 0 :(得分:8)

你的考试是:

  • 如果:
    • user_name已设置
    • 操作设置
  • OR
    • 操作设置

这意味着只要设置了action,即使未设置user_name,测试也会通过,就像错误信息中的情况一样。

只需删除|| isset($_POST['action'])位,它就可以正常工作。

另外,有一个+1让我意识到我所写的所有isset(...) && isset(...)链都是多余的XD

答案 1 :(得分:1)

无论您使用此部分isset($_POST['user_name'] , $_POST['action'])尝试实现什么,如果您拥有isset($_POST['action']),它将始终被忽略。因此,如果仅存在action索引,则此行将被执行$user_name = $_POST['user_name'];并且它将搜索user_name索引,无论它是否存在。

您可能希望拥有:if(isset($_POST['user_name']) && isset($_POST['action'])) {

答案 2 :(得分:0)

更改为:

if (isset($_POST['user_name'], $_POST['action'])) {
||中的

(或)有一个值(action)为真,即使user_name为空,所有语句也都为真

if (isset($_POST['user_name']  , $_POST['action']) || isset($_POST['action'])) {