【问题标题】:Set the value of an html textfield with a php variable using echo使用 echo 使用 php 变量设置 html 文本字段的值
【发布时间】:2013-02-27 01:39:31
【问题描述】:

我正在尝试从数据库中获取一个名称,然后创建一个文本字段,其值预设为该名称。我通过用 php 回显它并将值设置为名称来创建文本字段。但是,我放入值的变量没有运行,它只是打印为 {$c->prod_name} 而不是实际名称。

这是我的查询:

function name_id($id) {
    global $pdo;

    $stmt = $pdo->prepare("
        SELECT prod_name
        FROM products
        WHERE id = '$id'
        LIMIT 50");

    $stmt->execute();

    return $stmt->fetchAll( PDO::FETCH_OBJ );   
}

这是我在文本字段中回显的地方:

<?php

    $name = name_id($id);

    foreach($name as $c){

        echo '<input name="prod_name" type="text" size="50" value="{$c->prod_name}" ?>';

    }

?>

【问题讨论】:

    标签: php html


    【解决方案1】:

    您的代码中有两个故障

    解决您的问题:it's just printing out as {$c-&gt;prod_name}:

    对于您的echo 语句,您使用单引号'。变量和转义序列(\'\\ 除外)不在单引号内展开。这意味着,${} 没有特殊含义,并且作为纯文本输出,而不是作为变量输出(参见 doc)。如果要使用单引号,则需要将变量移出字符串并使用连接,如下所示:

    echo '<input name="prod_name" type="text" size="50" value="' . {$c->prod_name} . '" ?>';
    

    name_id 函数中的故障 #2:将行更改为以下内容:

    $stmt = $pdo->prepare("
        SELECT prod_name
        FROM products
        WHERE id = ?
        LIMIT 50");
    
    $stmt->execute(array($id));
    

    如果您将变量导入准备字符串,则无法防止 XSS 攻击等 - 请参阅 php.net PDO::prepare 了解更多信息。

    【讨论】:

    • 感谢@lazyhammer 的建议编辑。我不知道为什么它被拒绝了,因为它大大改善了我的答案。
    【解决方案2】:

    用双“”替换所有出现的单引号'

    反之亦然

    改变这个:

      echo '<input name="prod_name" type="text" size="50" value="{$c->prod_name}" />'; ?>
    

    到这里:

    echo "<input name='prod_name' type='text' size='50' value='{$c->prod_name}'/>"; ?>';
    

    【讨论】:

      【解决方案3】:

      像这样的字符串语句中变量的“回显”仅适用于"(双引号)。因此,你可以escape 很多这样的双引号:

      echo "<input name=\"prod_name\" type=\"text\" size=\"50\" value=\"{$c->prod_name}\">"; ?>
      

      但是像这样concatenate 字符串要容易得多:

      echo '<input name="prod_name" type="text" size="50" value="'.$c->prod_name.'">'; ?>
      

      最简单的答案是:当您“内联”一个变量时,它必须用双引号括起来:

      echo "{$c-&gt;prod_name}";

      【讨论】:

        猜你喜欢
        • 2015-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-01
        • 1970-01-01
        • 2012-07-22
        相关资源
        最近更新 更多