【问题标题】:How to pass a $_POST variable inside a heredoc如何在 heredoc 中传递 $_POST 变量
【发布时间】:2013-04-03 17:12:58
【问题描述】:

我正在创建一些代码,它将生成一个带有配置类的新页面。我使用了heredoc,如下所示。所以我想将 $_POST['hostname'] 变量传递给heredoc。我尝试了很多东西,但没有运气。我该怎么做?

<?php
    if(isset($_POST['hostname'])) {
        $HOSTNAME = $_POST['hostname'];
    }

    if(isset($_POST['database'])) {
        $DATABASE = $_POST['database'];
    }

    if(isset($_POST['dbuser'])) {
        $USER = $_POST['dbuser'];
    }

    if(isset($_POST['dbuserpassword'])) {
        $PASSWORD = $_POST['dbuserpassword'];
    }

    $pardConfig = new PDO('mysql:host='.$HOSTNAME.';'.'dbname='.$DATABASE, $USER, $PASSWORD, array(
        PDO::ATTR_PERSISTENT => true
    ));

    if(isset($pardConfig)) {
        echo "connected";
    }

    $SQL =<<<'EOD'
    CREATE TABLE IF NOT EXISTS pard_host (
        host varchar(255) NOT NULL,
        db varchar(255),
        db_user varchar(255) NOT NULL,
        db_pass varchar(255)
    )
    EOD;

    $sq = $pardConfig->query($SQL);

    if ($sq) {
        echo 'created';
    }

    $stmt = $pardConfig->prepare("INSERT INTO pard_host (host, db, db_user, db_pass) VALUES (?, ?, ?, ?)");
    $stmt->bindParam(1, $HOSTNAME);
    $stmt->bindParam(2, $DATABASE);
    $stmt->bindParam(3, $USER);
    $stmt->bindParam(4, $PASSWORD);
    $stmt->execute();

    $PARD_CONFIGURATION_CLASS = <<<'EOT'

    class pardConfig {
        public $HOSTNAME = echo $DATABASE;;
        public $DATABASE = echo $DATABASE;
        public $USER      = echo $USER;
        public $PASSWORD = echo $PASSWORD;
    }
    EOT;

    $PARD_FILE_OPEN = fopen("configuration.php", "w+");
    fwrite($PARD_FILE_OPEN,$PARD_CONFIGURATION_CLASS );

?>

【问题讨论】:

    标签: php heredoc


    【解决方案1】:

    删除 heredoc 标识符周围的引号。

    $PARD_CONFIGURATION_CLASS = <<<EOT
    

    如果您保留引号,则称为 nowdoc。 PHP documentation 是这样说的:

    Nowdocs 对于单引号字符串,就像 heredocs 对于双引号字符串一样。 nowdoc 的指定与heredoc 类似,但在nowdoc 内部不进行解析

    【讨论】:

    • 这不是heredoc nowdoc的问题。我想传递变量
    • 尝试删除 EOT 周围的单引号,您的代码应该可以工作。
    • 这不是唯一的问题。结尾 EOT 必须在第 1 列中(必须 not 缩进)。这使它更丑陋,但它是必需的。也许将此添加到答案中? From the documentation:"警告:非常重要的是要注意带有结束标识符的行 不能包含其他字符, 除了分号 (;)。这意味着标识符不能缩进,分号前后不能有任何空格或制表符。..."
    【解决方案2】:

    你的意思是:

    $variable = "Test"; //Can be any variable; may be $_POST['name']
    //Using '{' and '}' special characters in PHP strings.
    $string = <<<HEREDOC
    {$variable}
    HEREDOC;
    
    echo $string ;
    

    【讨论】:

    • 它现在是 doc 或 heredoc 什么的。我需要过去那个 $_POST['hostname'];到班级供以后使用。我试过但没有运气
    • @dilini:见my comment
    猜你喜欢
    • 2014-09-28
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    • 1970-01-01
    • 2011-11-03
    • 2016-07-30
    • 2015-08-27
    • 2018-06-17
    相关资源
    最近更新 更多