0

2 つのテーブルがあります ( post 、 category )

CREATE TABLE post    
(pid INT(10) NOT NULL AUTO_INCREMENT,    
post_title VARCHAR(255),   
post_result VARCHAR(255),  
post_content VARCHAR(500), 
cid INT(10), 
PRIMARY KEY (pid),
FOREIGN KEY (cid) REFERENCES category(cid));   

CREATE TABLE category (  
cid INT(10) NOT NULL AUTO_INCREMENT,  
cname VARCHAR(50),  
PRIMARY KEY (cid));  

これは私の挿入ステートメントです:

$id = isset($_POST['pid'])?$_POST['pid']:'';
$title=$_POST['post_title'];
$result=$_POST['post_result'];
$content=$_POST['post_content'];
$catid=$_POST['cid'];
$cat=$_POST['cname'];
$insertquery="INSERT INTO review (pid,post_title,post_result,post_content)
VALUES('','$title','$result','$content')";

私が直面している問題は、投稿テーブルで、カテゴリ ID ( cid ) の値がすべてのレコードで NULL であることです。
選択したカテゴリの値を保存するにはどうすればよいですか。

これは私のフォームです:

<form id="create" action="insert.php" method="post">
<input type="text" name="post_title" placeholder="Title" /><br> 
<input type="text" name="post_result" placeholder="Final comment" /><br>
<textarea name="post_content" placeholder="Review" ></textarea><br>

    Category:
    <select name=cname>
    <option value="select"></option>
    <option value="1">Option 1</option>
    <option value="2">Option 2</option>
    <option value="3">Option 3</option>
    <option value="4">Option 4</option>
    <option value="5">Option 5</option>
        </select><br><br>

<input class="submit" name="submit" type="submit" value="Submit"/>

</form>    

出力の取得に役立ちます。

4

3 に答える 3

1

まず、value db から選択したカテゴリを設定し、属性にカテゴリ ID が含まれていることを願っています。そうは言っても、name属性を次のように変更するcidことをお勧めします (POST で期待されるため)。

<select name="cid">

次にvar_dump($_POST)、次のようになります。

array(5) {
  ["post_title"]=>
  string(2) "aa"
  ["post_result"]=>
  string(2) "bb"
  ["post_content"]=>
  string(2) "cc"
  ["cid"]=>
  string(1) "2"
  ["submit"]=>
  string(6) "Submit"
}

次に、次の php 行を捨てることができます。

$id = isset($_POST['pid'])?$_POST['pid']:'';
$cat=$_POST['cname'];

これらの値をフォームで送信せず、使用しないためです。

第三に、挿入ステートメントを修正する必要があります

$insertquery="INSERT INTO post (post_title,post_result,post_content,cid)
              VALUES('$title','$result','$content','$catid')";

その他の考慮事項:

  • カテゴリ名が選択されていることをクライアント側で確認することをお勧めします。そうしないと、レコードを に挿入しようとしてエラーが発生しますpost
  • a1ex07が述べたように、dbに入れる前にすべてのユーザー入力をチェックしてサニタイズする必要があります
  • 準備済みステートメントに切り替える
于 2013-01-13T18:19:52.297 に答える
0

カテゴリ名が一意であると仮定すると、次のことができます

$insertquery="INSERT INTO review (pid,post_title,post_result,post_content,cid)
VALUES('','$title','$result','$content', 
 (SELECT cid FROM category WHERE cname ='$cname'))"

また、ユーザーからのすべての変数をエスケープする必要があります(推奨される方法は、pdoまたはmysqliを使用することです)。

于 2013-01-13T18:03:13.703 に答える
0

クエリで、INSERT次の値を追加するのを忘れましたcname:

$insertquery="INSERT INTO review (pid,post_title,post_result,post_content,cid)
VALUES('','$title','$result','$content',$cname)";
于 2013-01-13T18:04:00.273 に答える