1

Web にフォームがあります (html でビルド)。変更可能なフォームの値がいくつかあるので、それらをデータベースに保存するとします。私がやりたいことは、ユーザーがフォームのあるページに移動するたびに、データベースからデータを読み取って、フォームにその情報を入力する必要があることです (たとえば、e のフィールドがあります)。 -メールなので、データベースにある電子メールで埋めたいと思います)。

これを行う方法を探していましたが、本当に「好き」な方法は見つかりませんでした。私ができる唯一の方法は、javascriptでAJAXリクエストをPHPスクリプトに実行することです。そこでDBに接続してデータを取得します。取得したら、Javascript を使用してフォーム全体を変更しますが、十分に安全かどうかはよくわかりません。

別の方法でそれを行う方法、または十分に安全に行う方法についてのアイデアはありますか?

どうもありがとうございました。

4

3 に答える 3

3

私のソリューションでは、任意の HTML 入力要素とデータベース フィールドをリンクできます。このコードは、必要に応じて再利用可能な関数に配置できます。

HTML フォーム要素の name 属性と同じ名前をデータベース フィールドに付けます。次に、次のようなことができるようになります。

<!doctype html>
<form>
    <input name="email" />
    <input name="age" />
    <input name="website" />
</form>

PHP で、HTML ファイルの内容を DomDocument コンストラクターに読み込みます。

$dom = new DomDocument(file_get_contents("MyPage.html"));

次に、次のようにして、すべての入力要素の DomNodeList を取得できます。

$xpath = new DomXPath($dom);
$nodeList = $xpath->query("//form/input");

データベース データが と呼ばれる連想配列で表されていると仮定しましょう$data

$data = $mysql->query("yourQuery");
foreach($nodeList as $node) {
    $key = $node->getAttribute("name");
    if(array_key_exists($key, $data)) {
        $node->setAttribute("value", $data[$key]);
    }
}

次に、DOM をブラウザーに出力することで、通常どおりページをレンダリングできます。

ボーナス: フォーム データをデータベースに保存する場合、HTML 入力フィールドの名前がデータベースのフィールド名と一致するため、$_POST 配列を DAL に渡すことができます。

于 2013-08-19T17:31:05.073 に答える
0

私は正しい質問に答えていると完全に確信しているわけではありませんが、通常、フォームに記入するためにあなたがしなければならないことは、次のようなことだけです:

<form>
    <input name="username" value="<?php echo isset($dataRow->UserName) ? htmlentities($dataRow->UserName) : ""; ?>">
</form>

ポイントを伝えるために必須ではないものをいくつか省略しましたが、HTML フォームを初めて使用する場合は、それらについても読みたいと思うかもしれません。

もちろん、その行の前にデータベースからデータを取得する必要があります。

$resultSet = mysqli_query($connection, "SELECT * FROM Table WHERE Id = " . ((int)$id));
$dataRow = mysqli_fetch_object($query);

繰り返しますが、この例に基づいて正しい方法を見つけることができると仮定して、いくつかのことを省略しました. もちろん、手続き型の mysqli_* 関数は、おそらくオブジェクト指向の対応する関数に置き換える必要があります。

これに AJAX を使用するのはかなり無意味に思えます。とにかくフォームを要求しているので、事前に入力することもできます。

セキュリティに関しては、これがどのように問題になるかわかりません。htmlentitiesHTML (上記の私のコード) をエスケープする限り、問題はありません。

于 2013-08-19T17:22:44.303 に答える