另一个if [重复]中的PHP未定义索引

Posted

技术标签:

【中文标题】另一个if [重复]中的PHP未定义索引【英文标题】:PHP Undefined index inside another if [duplicate] 【发布时间】:2018-06-21 10:42:55 【问题描述】:

在这种情况下,我在第 2 行收到关于未定义索引的错误:

if ($_POST['go'] == 'create') 

我知道我可以使用 isset 修复它,但我不知道如何在另一个 if 语句中进行修复。

谢谢

 if (isset($_GET['createDB'])) 
  if ($_POST['go'] == 'create') 
     $handle = fopen($databaseSchema, "r");
     $createTable_events = fread($handle, filesize($databaseSchema));

     $user=$_POST['user']; 
     $pass=$_POST['pass']; 
     $clientHost= (isset($_POST['host']) ? $_POST['host'] : 'localhost');
     try 
        $dbh = null;
        $dbh = new PDO("mysql:host=$DB_HOST", $user, $pass);

        // create database
        $dbh->exec("CREATE DATABASE `".$DATABASE."`;");

        // Create waf-fle user
        $dbh->exec("CREATE USER '".$DB_USER."'@'".$clientHost."' IDENTIFIED BY '".$DB_PASS."';
           GRANT SELECT, INSERT, UPDATE, DELETE, CREATE TEMPORARY TABLES ON `".$DATABASE."`.* TO '".$DB_USER."'@'".$clientHost."';                        
           FLUSH PRIVILEGES;");
      catch (PDOException $e) 
        die("DB ERROR: ". $e->getMessage());
     

【问题讨论】:

可以选择if (isset($_POST['go']) && $_POST['go'] == 'create') 吗? 如果以下答案之一解决了您的问题,您应该接受它(单击相应答案旁边的复选标记)。这有两件事。它让每个人都知道您的问题已得到您满意的解决,并为帮助您的人提供帮助。 See here 以获得完整的解释。 解决方案应该作为答案添加,不是作为对问题的编辑。问题的连续性使网站对所有访问者都很有用,对答案进行投票的能力也是如此。我正在回滚编辑以删除假定的“答案”。 @artmasterpl,建议在对您最有帮助的答案中添加复选标记。如果建议的答案对您没有帮助,您也可以自己添加和接受答案。还请投票您认为有用的任何内容。这些复选标记和赞成票激励 SO 志愿者继续分享他们的知识,并帮助回答您的问题。谢谢,欢迎来到 SO。很高兴您找到了解决方案。 【参考方案1】:

use 设置为 'isSet' 像这样

if(isSet($_POST['data']))

    if(isSet($_POST['data2']))
   
    //code here

    


【讨论】:

【参考方案2】:

这应该可以工作

if (isset($_GET['createDB'])) 
    if (isset($_POST['go']) && $_POST['go'] == 'create') 
        $handle = fopen($databaseSchema, "r");
        $createTable_events = fread($handle, filesize($databaseSchema));

        $user=$_POST['user']; 
        $pass=$_POST['pass']; 
        $clientHost= (isset($_POST['host']) ? $_POST['host'] : 'localhost');
        try 
            $dbh = null;
            $dbh = new PDO("mysql:host=$DB_HOST", $user, $pass);

            // create database
            $dbh->exec("CREATE DATABASE `".$DATABASE."`;");

            // Create waf-fle user
            $dbh->exec("CREATE USER '".$DB_USER."'@'".$clientHost."' IDENTIFIED BY '".$DB_PASS."';
                    GRANT SELECT, INSERT, UPDATE, DELETE, CREATE TEMPORARY TABLES ON `".$DATABASE."`.* TO '".$DB_USER."'@'".$clientHost."';                        
                    FLUSH PRIVILEGES;");
         catch (PDOException $e) 
            die("DB ERROR: ". $e->getMessage());
        

【讨论】:

【参考方案3】:

同时使用 isset 和 !empty。

if (isset($_GET['createDB'])) 
  if (isset($_POST['go']) && $_POST['go'] == 'create') 
     $handle = fopen($databaseSchema, "r");
     $createTable_events = fread($handle, filesize($databaseSchema));

     $user=$_POST['user']; 
     $pass=$_POST['pass']; 
     $clientHost= (isset($_POST['host']) ? $_POST['host'] : 'localhost');
     try 
        $dbh = null;
        $dbh = new PDO("mysql:host=$DB_HOST", $user, $pass);

        // create database
        $dbh->exec("CREATE DATABASE `".$DATABASE."`;");

        // Create waf-fle user
        $dbh->exec("CREATE USER '".$DB_USER."'@'".$clientHost."' IDENTIFIED BY '".$DB_PASS."';
           GRANT SELECT, INSERT, UPDATE, DELETE, CREATE TEMPORARY TABLES ON `".$DATABASE."`.* TO '".$DB_USER."'@'".$clientHost."';                        
           FLUSH PRIVILEGES;");
      catch (PDOException $e) 
        die("DB ERROR: ". $e->getMessage());
     

【讨论】:

现在已编辑。【参考方案4】:
if (isset($_GET['createDB'])) 
  if ((isset($_POST['go'])) &&  ($_POST['go']  == 'create')) 
      // Your Code
 

同样的 isset 会起作用

【讨论】:

这里的括号有点多,但为什么这个特定的被否决了?

以上是关于另一个if [重复]中的PHP未定义索引的主要内容,如果未能解决你的问题,请参考以下文章

注意:if()中未定义的索引按结构排序[重复]

标头重定向后未定义PHP会话索引?

Php和Sql,未定义的未定义索引[重复]

注意:未定义的索引:函数include()中的und [重复]

无法连接到本地 PHP 站点(未定义索引和未定义变量错误)[重复]

php中未定义的删除索引[重复]