2013-02-27 85 views
1

我試圖從數據庫中獲取一個名稱,然後創建一個帶有預設值的文本字段。我創建了文本字段,通過用php回顯它並將該值設置爲名稱。然而,我放入該值的變量沒有運行,只是將其打印爲{$ c-> prod_name}而不是實際的名稱。用一個php變量設置html文本字段的值使用echo

這裏是我的查詢:

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

    } 

?> 

回答

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

毛刺#2你name_id功能:更改線以下:

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

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

如果您要將變量導入到準備字符串中,那麼您並不能阻止XSS攻擊等。有關更多信息,請參見php.net PDO::prepare

+0

感謝@lazyhammer爲他的建議編輯。我不知道爲什麼它被拒絕,因爲它提高了我的答案。 – GeneSys 2013-02-27 09:04:41

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

的 「回聲-ING」 在這樣才的作品一個字符串聲明的變量與"(雙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.'">'; ?> 

最簡單的答案是:當你「內聯」變量它MUST在雙引號:

echo "{$c->prod_name}";

相關問題