0

タイトルが誤解を招く場合は申し訳ありませんが、これ以上のものは思いつきませんでした。

まず、禁止リストと証明の 2 つのテーブルがあります。私の問題では、禁止リストは多かれ少なかれ無関係ですが、証拠はあります。

Table: proof

proofid - primary key
banid - foreign key (links to banlist)
proof - stores the link which acts as the proof
type - stores the type of the proof (image, demo, ...)

また、管理者が禁止に関する詳細を提供し、証拠をリンクできるようにするフォームもあります。禁止には複数の証拠がある可能性があるため、2 つのフォーム フィールドの新しいインスタンスを作成するリンクを実装します (おそらく jQuery 経由)。フォームは次のとおりです。

<p>Proof (if no proof is available, enter N/A):</p><input type="textfield" name="proof" style="border: solid 1px #<?php echo $pbg?>"/>

<select name="prooftype" style="border: 1px solid #<?php echo $ptbg ?>" />
    <option value="TZAC">TZAC</option>
    <option value="UAC">UAC</option>
    <option value="ESL Wire">ESL Wire</option>
    <option value="GV">GV</option>
    <option value="PB Bans">PB Bans</option>
    <option value="Demo">Demo</option>
    <option value="League">League</option>
    <option value="Image">Image</option>
    <option value="Stream">Stream</option>
    <option value="Other">Other</option>
</select>

問題、または問題ではない可能性があるのは、データの複数のインスタンスをプルーフ テーブルに挿入する (そして最終的には更新する) 方法です。上記のうち4つがあった場合、4つすべてを異なる値でテーブルに挿入する方法がわかりません。

textfield と select の両方の ID を id="proof1"/id="type1", id="proof2"/id="type2", id="proof3"/id="type3 に設定するのは理にかなっていますか?などを配列に格納し、配列をループして、現在選択されている textfield/select?

最後に、管理者が禁止を編集できるようにすると、禁止には 4 種類の証拠があり、選択した禁止のテーブルの証拠を更新する必要があるという点で、同様の問題に直面します。

現在、次のクエリがあります。

$query2 = "UPDATE proof SET proof = '$proof', type = '$type' WHERE banid = $id";

ただし、それはすべての行を同じbanidで上書きしますが、プルーフの行に固有の行のみを更新したいと思います。各テキストフィールド/選択ボックスの横に隠しフィールドを作成すると、プルーフIDを保存してからUPDATE SQLコマンドを変更することで機能します... WHERE proofid = $_POST['...']か? 繰り返しますが、各インスタンスをループするには何らかのタイプの配列が必要になると思います。


この画像はフォームの一部を示しており、色はフォーム フィールド間のリンクを表しています。そこから、4 つの証明例をそれぞれ取得し、それに応じて挿入または更新する必要があることがわかります。

http://i45.tinypic.com/adkfti.png

部分が不明確である場合はお詫び申し上げます。おそらく、私が個人的にレンガの壁に直面していることがわかります。おそらく、それを理解する必要があるのは私だけでしょう。追加するために、私は投稿の質問に答えたかもしれませんが、配列の使用を改善するための考えやアイデアをお願いします.

私はあなたが与えることができる助けや指示に感謝します,

ジョン。

4

2 に答える 2

1

プルーフタイプを使用してデータを完全に正規化する必要がない限り、多対多の関係は必要ないと思います。現在の構造で十分です。

バックエンドでPHPを使用しているので、次のようにそれぞれに[]を追加して、入力を配列に変換します。

<p>Proof (if no proof is available, enter N/A):</p><input type="textfield" name="proof[]" style="border: solid 1px #<?php echo $pbg?>"/>

<select name="prooftype[]" style="border: 1px solid #<?php echo $ptbg ?>" />
etc...

名前の後の角かっこを使用すると、PHPは入力を配列として受け取ることができ、PHP側でループさせることができます。

<?php
// Assuming banid is a hidden field in the form
$banid = mysql_real_escape_string($_POST['banid']);
$proof = $_POST['proof'];
$prooftype = $_POST['prooftype'];

for ($i = 0; $i < count($proof); $i++) {
    $currentProof = mysql_real_escape_string($proof[$i]);
    $currentProofType = mysql_real_escape_string($prooftype[$i]);
    $sql = "INSERT INTO proof (banid, proof, prooftype) VALUES ($banid, '$currentProof', '$currentProofType');";
    etc...
}

UPDATEの問題を回避するために、単純に保ち、プルーフテーブルにproof_numberという列をもう1つ追加します。これは、レコードの対象となる証明を示すために、0から3または1から4のいずれかになります。これにより、htmlフォームにプルーフIDを追加する必要がなくなります。次に、UPDATEで、forループ内の配列のインデックスを使用して、更新するプルーフを判別できます。

于 2012-05-14T09:31:12.017 に答える
0

禁止リストをプルーフに関連付けるには、3 番目のテーブルを挿入する必要があります。banId と ProofId を含むこの BanProofRelationship テーブルに関係エントリを挿入します。このようにして、これらのテーブルに必要な数の外部キーを格納できます。多対多の関係になり、エントリを追加する必要がある場合は、それらを挿入します。エントリを削除したい場合は、それらを DELETE します。

エントリを追加するには、次を使用します

INSERT BanProofRelationship ( banId, proofId ) values (1, 4);

于 2012-05-13T21:59:35.063 に答える