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

コードの 2 つの不具合

問題への対処: 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を参照してください。

于 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 に答える