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