0

PHP と MySQL を使用していますが、小さな問題が発生しました。どうすればいいのか調べてみましたが、どうしてもわかりません。助けていただければ幸いです。ここに私の問題があります...

3 つの SQL テーブルがあります。

Customers
    cID (primaryKey)
    email
    name
    password
    ...etc.

Products
    pID (primaryKey)
    Pname
    Ptype

CustomerRequests
    requestID(primarykey)
    cID (foreign key references customer table)
    pID (foreign key references products table)
    quantityRequested

PHP で処理している HTML フォームがあります。これはリクエスト フォームに似ているため、ユーザーはログインしてリクエスト フォームに入力します。このフォームのフィールドは次のようになります。

製品名の選択、数量の選択など。これはたとえば$quantity=$_POST['quantity']... の場合に行われるため、基本的にフォーム データは変数内に格納されます。

さて、ここが私がこだわっている部分です。データベースがとがINSERT何であるかを認識できるように、SQL クエリを実行するにはどうすればよいですか? つまり、外部キーの値は何ですか?cIDpID

例えば:

$insert = mysql_query(INSERT INTO CustomerRequests VALUES ('THIS WOULD BE BLANK AS ITS AUTOINCREMENTED PROMARY KEY FOR REQUEST ID','HOW WOULD I GET THE cID AUTOMATICALLY HERE','HOW WOULD I GET THE pID HERE','".$quantity."'))

クエリは、クエリを使用してユーザー入力をデータベースに格納しINSERTます。ただし、customerID と productID は別のテーブルの外部キーであるため、PHP クエリをどのように記述すればよいでしょうか?

ご協力ありがとうございます。さらに詳しい情報が必要な場合は、ご連絡ください。

4

3 に答える 3

1

なぜあなたが問題を抱えていると思うのかわかりません。はcID、顧客がログインしているために認識されている必要があります。フォームでは、が使用されているpID製品のドロップダウンリストを使用している必要があるため、が認識されている必要があります。pIDvalue

INSERT次に、それらの値を使用して実行するのは簡単なことです。

<select id="product">
    <option value="pid001">Product One</option>
    <option value="pid002">Product Two</option>
    ... etc. ...
</select>

つまり、これらの値は、フォームにヒットするにすべてわかっています。

事後に製品名とIDを一致させないでください。それはただ余分な仕事を追加しているだけです。利用可能な値がある場合は、それを使用する必要があります。フォームにはすでに関連付けが含まれている必要があります。

SELECTProductsテーブルからのクエリに基づいてドロップダウンを作成します。pIDコンテンツには、valueおよびを使用しpNameます。このように、フォームで送信されるデータは、に必要な外部キーですINSERT

<?php
    /* 
     * $arrProducts is the result from a query like
     * SELECT * FROM Products;
     */
    print '<select id="products">';
    foreach ($arrProducts as $arrProduct) {
        printf('<option value="%s">%s</option>', $arrProduct['pID'], $arrProduct['pName']);
    }
    print '</select>';
?>

同様に、ユーザーをログインするときに、ユーザーを取得cIDしてセッションに挿入します。

もう1つの注意点として、PHPのmysql_関数ファミリーの使用をやめてください。これらは非推奨であり、将来のリリースから削除される予定です。彼らはSQLインジェクションを起こしやすいです。mysqli_アプリケーションでは、またはPDOのいずれかを使用する必要があります。どちらもパラメータ化されたクエリとプリペアドステートメントを提供します。

于 2013-02-02T23:56:01.787 に答える
1

"Johnny、Dreamweaver を使用している場合、insert ステートメントは次のようにする必要があります:if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "insertForm")) { $insertSQL = sprintf(INTO CustomerRequests (productName, qty, cID) values (%s, %s, %s)" など。

次に、次のような隠しフィールドのあるフォームを使用して情報を送信します。 <form name="insertForm" type="post" action="placeOrder.php"> <input type="hidden" type="text" id="qty " value="<php? echo $row_Recordset1['qty']; ?>" /> <input type="hidden" type="text" name="productName" value="<php? echo $row_Recordset1['productName ']; ?>" /> <input type="hidden" type="text" name="cID" value="<php? echo $cID; ?>"/> <input type="hidden" name=" MM_insert" value="insertForm" /> <input type="submit" name="send" id="Submit" value="Submit Form" /> </フォーム>

それ以外の場合は、Dreamweaver のものを忘れて使用します: CustomerRequests (productName, qty, cID) 値 (bananas, 2, 1044) に挿入し、フォームで同じ非表示フィールドを使用します。また、フォームで送信されたデータを取得し、変数として保存する必要があります。

「コード送信が適切にフォーマットされていない」ため、この情報を送信するのに非常に苦労したので、これを受け取ってください! このコードを理解するには、< を < に、> を > に変更してください。幸運を!

于 2013-02-03T03:00:06.100 に答える
1

フォームを表示する前に、製品 ID と顧客 ID を取得する必要があると思います。次に、フォームから ID を取得し、3 番目のテーブルに挿入します。

于 2013-02-02T23:54:36.093 に答える