1

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

    }

?>
4

3 回答 3

1

您的代码中有两个故障

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

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

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

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

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

$stmt->execute(array($id));

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

于 2013-02-27T01:47:40.220 回答
0

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

反之亦然

改变这个:

  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}'/>"; ?>';
于 2013-02-27T01:44:55.893 回答
0

像这样的字符串语句中变量的“回显”仅适用于"(双引号)。因此,您可以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}";

于 2013-02-27T01:46:39.333 回答