单个html表单插入到具有一对多关系的多个mysql表中

时间:2013-11-18 08:09:19

标签: php mysql sql database forms

所以我知道这是一个很受欢迎的问题,并且已经有很多回复。但是,我的挑战略有不同,这已经困扰了我好几天了。我有一个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) ;
    }   
?> 

所以在我的数据库中,我有一个以下结构:

  1. 表单

    -form_id(PK, AI)
    
    -tile
    
    -date
    
  2. 问题表

    -question_id(PK, AI)
    
    -description
    
    -form_id(FK) references form_id in form table
    
  3. 答案表

    -answer_id(PK, AI)
    
    -answer_text
    
    -question_id(FK) references question_id from questions
    
  4. 小部件(存储从表单中选择的不同小部件/输入类型(广播,文本区域等)。)

    -widget_id(PK,AI)
    
    -widget_type
    
    -question_id(FK) references question_id from questions
    

    每个问题可以有多个答案,但只有一个窗口小部件类型。每个答案只能有一个问题,窗口小部件也可以。所以单个question_id可能会在答案表中多次出现。这就是我被卡住的地方:< / p>

    • 正确创建表单以实现此目的。问题及其所有可能的答案都是动态的。所以你可以决定在你去的时候添加问题和输入字段以获得答案。
    • 我可以动态添加更多问题和更多答案,但似乎无法弄清楚如何将每个答案链接到它的问题。
    • 我也遇到了一个挑战,即编写一个正确的查询,将question_id插入到问题表中,并将所有相关的外键插入其中。

    我真的很感激一些指示,所以我可以朝着正确的方向前进。真的很抱歉很长的问题。谢谢你

2 个答案:

答案 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 ....