0

我有两个表( 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')";

我面临的问题是,在我的 post 表中,每条记录的类别 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

首先,我希望您从 db 中填充您的类别选择,并且value属性包含类别 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 回答