使用echo设置带有php变量的html文本字段的值

时间:2013-02-27 01:39:32

标签: php html

我正在尝试从数据库中获取名称,然后创建一个文本字段,其值预设为该名称。我正在通过用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}" ?>';

    }

?>

3 个答案:

答案 0 :(得分:1)

代码中的两个小故障

解决您的问题:it's just printing out as {$c->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

答案 1 :(得分:0)

用double“

替换所有出现的单引号

反之亦然

改变这个:

  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}'/>"; ?>';

答案 2 :(得分:0)

像这样的字符串语句中的变量“echoing”仅适用于"(double qoutes)。因此,你可以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->prod_name}";