所以我知道这是一个很受欢迎的问题,并且已经有很多回复。但是,我的挑战略有不同,这已经困扰了我好几天了。我有一个html表单,用于将数据存储到多个我的数据库中的表。(现在使用phpMyAdmin)。有一点不同的是,这个表单允许用户创建调查问题,以及该问题的所有可能答案和每个问题的首选输入类型,并将它们存储在mysql db。让我告诉你我的HTML代码:
<!DOCTYPE html>
<html>
<head>
<title> Create a new Survey </title>
<script type="text/javascript" src="script.js"></script>
</head>
<body style= "background: #D1D0CE">
<h1 style= "text-align: center; font-family: Garamond; color: brown"> Create a new survey</h1><br />
<p style="text-align:center"><img src = "logo.png"/></p>
<form action="insert.php" method="post">
<fieldset class="row1">
<table id="formTable" class="form" >
<tbody>
<p style="font-family:Garamond; color:brown">
<strong>Form Information</strong>
</p>
<p>(Please enter your form details below.)</p>
<tr>
<td> Form Name : </td><br /><br />
<td> <input type="text" size="12" maxlength="40" name="formName"/></td>
</tr>
<tr>
<td>Date : </td><br />
<td> <input type="date" size="12" maxlength="40" name="formDate"/></td>
</tr>
</tbody>
</table>
<fieldset class="row2">
<table id="questionTable" class="form" >
<p style= "font-family: Garamond; color: brown">
<strong>Question Details</strong>
</p>
<p>
<input type="button" value="Add Question" onClick="addRow('questionTable')" />
<input type="button" value="Remove Question" onClick="deleteRow('questionTable')" />
</p>
<tr>
<p>
<td><input type="checkbox" name="chk[]"/></td>
<td>
<label>Question : </label>
<input type="text" size = "16" maxlength= "50" name="description"/>
</td>
<td>
<label>Input Type :</label>
<select id="widgetType" name="widgetType" required="required">
<option>....</option>
<option>radio button</option>
<option>check box</option>
<option>Edit Text</option>
<option>Spinner</option>
<option>Rating bar</option>
</select>
</td>
</p>
</tr>
</table>
<fieldset class="row3">
<table id="answerTable" class="form">
<p style= "font-family: Garamond; color: brown">
<strong>Answer Details</strong>
</p>
<p>
<input type="button" value="Add Answer" onClick="addAnswer('answerTable')" />
<input type="button" value="Remove Answer" onClick="deleteAnswer('answerTable')" />
<p>(Click to add more answer options.)</p>
</p>
<tr>
<p>
<td> <input type="checkbox" name="chk[]"/></td>
<td><label>Answer : </label>
<input type="text" size="12" maxlength="40" name="answerText"></td>
<td>
<label>Match to Question :</label>
<select id="QuestionNumber" name="question" required="required">
<option>....</option>
<option>Question 1</option>
<option>Question 2</option>
<option>Question 3</option>
<option>Question 4</option>
<option>Question 5</option>
<option>Question 6</option>
<option>Question 7</option>
<option>Question 8</option>
<option>Question 9</option>
<option>Question 10</option>
</select>
</td>
</p>
</tr>
</table>
<fieldset class="row4">
<input type="submit" name="submit" value="Submit">
</form>
</body>
</html>
和php部分:
<?php
if(isset($_POST['submit'])){
$host = "localhost"; // host of MySQL server
$user = "root"; // MySQL user
$pwd = ""; // MySQL user's password
$db = "webservice"; // database name
// Create connection
$con = mysqli_connect($host, $user, $pwd , $db);
// Check connection
if(mysqli_connect_errno($con)) {
die("Failed to connect to MySQL: " . mysqli_connect_error());
}
$sql = "INSERT INTO form (title,date) VALUES ('".$_POST['formName']."','".$_POST['formDate']."')";
mysqli_query($con , $sql);
mysqli_close($con) ;
}
?>
所以在我的数据库中,我有一个以下结构:
表单
-form_id(PK, AI)
-tile
-date
问题表
-question_id(PK, AI)
-description
-form_id(FK) references form_id in form table
答案表
-answer_id(PK, AI)
-answer_text
-question_id(FK) references question_id from questions
小部件(存储从表单中选择的不同小部件/输入类型(广播,文本区域等)。)
-widget_id(PK,AI)
-widget_type
-question_id(FK) references question_id from questions
每个问题可以有多个答案,但只有一个窗口小部件类型。每个答案只能有一个问题,窗口小部件也可以。所以单个question_id可能会在答案表中多次出现。这就是我被卡住的地方:< / p>
我真的很感激一些指示,所以我可以朝着正确的方向前进。真的很抱歉很长的问题。谢谢你
答案 0 :(得分:0)
有好消息和坏消息。
坏消息是,你无法在100%sql中插入多个表。
好消息是,你可以分几步完成。
插入核心记录时,可以执行另一个SQL查询
$getid = mysql_query("SELECT last_insert_id()");
$getid = mysql_fetch_array($getid);
$id = $getid[0];
然后,您可以将此结果的返回值用于将来的所有插入,例如:
"INSERT into answers (answer_text, question_id) values ('Some text', " . $id . ")"
最好是一次性插入问题的所有答案,然后转到下一个问题。
如果他们正在为现有的from添加额外答案,则需要从某处获取question_id,以便上述脚本能够正常工作。
答案 1 :(得分:0)
使用mysqli_insert_id()
获取插入查询的生成PK
请参考manaual:http://us3.php.net/mysqli_insert_id
last_insert_id()
不是推荐的方法,因为它无法在同时插入的情况下提供正确的ID ....