0

質問: PHP/HTML フォームに、以前に送信された mysql データベース内のユーザー データを入力するにはどうすればよいですか?

さて、私は数週間インターネットを閲覧しており、これに役立つチュートリアルまたはスレッドを見つけようとしています.

テーブルトップ RPG ゲームの Web フォームを作成しています。これは、「キャラクター名」、「年齢」、「性別」などのほとんどのフィールドとドロップダウン メニューを備えたシンプルなフォームです。

  • mysql データベースに保存する場所に移動しました。

  • また、ログインしているユーザーにデータをリンクするための外部キーになるようにしています。

  • $_REQUEST['Character'] (Character はフォームの名前) を使用すると、エラーなどの場合に、送信後にすべての入力データを対応するボックスに入れることができます (ただし、ドロップダウン メニューは、選択した項目にとどまります。これについては、今読んでいます)。

しかし、ユーザーがすでにキャラクターを作成している場合、再度ログインすると、そのすべての情報が引き戻され、フォームの適切なフィールドに入力されるようにしたいと考えています。

これを行うための最良の方法は何ですか?または、誰かが別の回答済みスレッド、ビデオの正しい方向に私を向けることができますか?

皆さんが見るためにコードが必要になるとは思いませんでしたが、必要に応じてコードを投稿できます。コードはたくさんあります

4

1 に答える 1

0

簡単な例を見てみましょう。Charactersフィールドidnameを持つテーブルがあるとしましょうage

$charこのテーブルの編集フォームを提供するためのよりクリーンな方法 (IMO) の 1 つは、これらのフィールドを持つ配列 (と呼びましょう) があるとフォームに仮定させることです。メイン コードは、フォーム フィールドやデータベースなど、どこからでもこの配列を取得します。

(多くのことが省略されていることに注意してください。私は、あなたが使用しているデータベースや、どのように検証を行っているのか知りませんし、気にしません。重要な部分はフォーム処理であり、DB に関係なく機能します。)

<form method="post">
 <input type="hidden" name="Character[id]" value="<?= intval($char['id']) ?>">
 <input name="Character[name]" value="<?= htmlentities($char['name']) ?>">
 <input name="Character[age]" value="<?= htmlentities($char['age']) ?>">
 <input type="submit">
</form>

フォームが送信さ$_POST['Character']れると、配列になり、フォームが送信したキャラクターに関するすべての情報が含まれます。

saveCharacterその情報を取得して行として保存する を用意しましょう...
(疑似コードの行は で始まり...ます ; フラグメントのように見えます...like this...)

function saveCharacter($char) {
    if (empty($char['id'])):
        ... do insert
        ... $char['id'] = last insert ID
    else:
        ... do update
    endif;

    // return the saved char; inserting would have added an ID
    return $char;
}

...そしてloadCharacterその行を SELECT し、フォームにあったのと同じ名前でその内容を返します。(フォームとデータベースのフィールド名を一致させておくと、ここでかなり役立ちます。2 つが同じ名前を使用している場合は、行を直接返すことができます。)

function loadCharacter($id) {
    ... $result = result from: SELECT id, name, age FROM Characters WHERE id = ?
    ... return first (should be only) row of $result
}

(名前が異なる場合は、変換する必要があります。通常、これは DBMS に任せることができます。詳細については、"SQL 列エイリアス" を Google で検索してください。)

そして、これらすべてを開始するコード...

if (isset($_POST['Character'])) {
    $char = saveCharacter($_POST['Character']);
}
elseif ( ...the user already has a character id... ) {
    $char = loadCharacter(...character id...);
}
else {
    // first time on the page, and there's no saved character
    // give $char the right field names, to prevent notices
    $char = array('id' => null, 'name' => null, 'age' => null);
}

上記のフォームを含めると、$charの値が適切な要素に配置されます。

于 2013-04-24T20:09:10.963 に答える