2012-09-13 79 views
0

的HTML:我如何做一个PHP插入两个或多个独立的MySQL表

<html> 
<?php include 'C:\xampp\htdocs\paxdb\head.php'; 
include 'config/menu.php';?> 
<div id="dataentry"> 

<!--This section is the demographic text field area--> 
<form method="post" action="dataentered.php"> 
First Name:&nbsp;<input type="text" name="First_Name"/></br> 
</br> 
Last Name:&nbsp;<input type="text" name="Last_Name"/></br> 
</br> 
E-mail:&nbsp;<input type="text" name="email"/></br> 
</br> 

<!--This section is the age range checkbox selection area--> 
<p><u><b>Age Range</b></u></p> 
<input type="checkbox" name="age[]" id="20-25" value="20-25"/>&nbsp;20-25</br> 
<input type="checkbox" name="age[]" id="26-30" value="26-30"/>&nbsp;26-30</br> 
<input type="checkbox" name="age[]" id="31-35" value="31-35"/>&nbsp;31-35</br> 
</div> 
<div id="checkboxes"> 
</div> 

<!--This section is the trips take checkbox area--> 
<div id="tripstodatetype"> 
<p><u><b>WHAT TYPE OF TRIPS TO DATE HAVE YOU TAKEN?</b></u></p> 
<input type="checkbox" name="trip2date[]" id="Bus" value="Bus">&nbsp;Bus&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</br> 
<input type="checkbox" name="trip2date[]" id="Car" value="Car">&nbsp;Car</br> 
<input type="checkbox" name="trip2date[]" id="Weekend fly-in" value="Weekend fly-in">&nbsp;Weekend fly-in&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</br> 
</div> 
<div id="tripstodateborder"> 
</div> 

<!--This section is the type of trip client likes best checkbox area--> 
    <div id="triplikebest"> 
<p><u><b>WHAT TYPE OF TRIP DO YOU LIKE BEST?</b></u></p> 
<input type="checkbox" name="triplikebest[]" value="Bus">&nbsp;Bus&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</br> 
<input type="checkbox" name="triplikebest[]" value="Car">&nbsp;Car</br> 
<input type="checkbox" name="triplikebest[]" value="Weekend fly-in">&nbsp;Weekend fly-in&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</br> 
</div> 
<div id="triplikeborder"> 
</div> 

和PHP:

<html> 
<?php 
include 'head.php'; 
include 'config/menu.php'; 
$host="localhost"; 
$username="somename"; 
$password="somepass"; 
$dbname="pax"; 

$dbc = mysql_connect($host, $username, $password, $dbname); 
if (!$dbc) 
{ 
    die('Error connecting to MySQL server' . mysql_error()); 
    } 
mysql_select_db($dbname, $dbc); 

$first_name = mysql_real_escape_string($_POST['First_Name']); 
$last_name = mysql_real_escape_string($_POST['Last_Name']); 
$email = mysql_real_escape_string($_POST['email']); 
$age = $_POST['age']; 
$my_range = ""; 
foreach($age as $range) { 
    $my_range = $my_range . mysql_real_escape_string($range) . ", "; 
} 
$trip2date = $_POST['trip2date']; 
$my_triprange = ""; 
foreach($trip2date as $triprange) { 
    $my_triprange = $my_triprange . mysql_real_escape_string($triprange) . ", "; 
} 
mysql_query("INSERT INTO `pax` (`First_Name`, `Last_Name`, `email`, `age`,`trip2date`)  
    VALUES('$first_name','$last_name','$email', '$my_range','$my_triprange')") 
    or die(mysql_error()); 
mysql_close($dbc); 
?> 
<div class = "entered"> 
<p>Success! Your Data Has Been Submitted. Please click on <b>'DATA ENTRY'</b> above to enter another. </P> 
</div> 
    <?php include 'footer.php';?> 
    </div> 
    </div> 
    </body> 
</html> 

如果我把triprange数据成一个单独的表,我将如何转换INSERT查询来执行插入到新表中? (假设新的/第二个表被称为“旅行”)。 - 或者 - 在此处使用第二个INSERT查询更有意义吗?如果是这样,它应该如何保持连接到第一个表/ ID

谢谢你提前。

+0

你的编辑把你在正确的轨道上......你想要一个用户信息和车次之间有许多relatinoship 。这需要在两者之间共享的索引。 (每个用户的唯一ID,并将该ID添加到旅行表中以供参考) – Dave

+0

好吧,如果我要将此“多个”答案数据放入第二个表中,我将如何调整插入查询以包含输入的数据到第二个表中,还是仅仅编写第二个插入查询更有意义? – shane

回答

0

看着你的代码,你是否试图在相同的表中输入两次相同的数据?

如果不是你应该让你的查询一个变量,所以行会读这样的事情...

$query1 = mysql_query("INSERT INTO `pax` (`First_Name`, `Last_Name`, `email`, `age`,`trip2date`)  
    VALUES('$first_name','$last_name','$email', '$my_range','$my_triprange')") 
    or die(mysql_error()); 

你可以看看重复插入语句的另一个表,但使用声明相同的变量原始代码。

如果我错了,你能解释一下吗?

+0

对不起 - 您可能错过了我对我的问题的编辑。我的$ my_triprange数据有可能让调查答复者选择多个复选框来回答。所以,这意味着进入表格的答案可以是一个,两个或全部三个答案。所以,我正在考虑将它放到另一个表中(主要是为了了解后面的项目如何完成这项工作),问题是我现在是否需要第二个插入查询或是否有更好的方法来连接现有插入查询的第二个表? – shane

0
mysqli_multi_query(); 

在这里阅读本手册:http://php.net/manual/en/mysqli.multi-query.php

编辑:

<?php 

    /* connection conf */ 
    // use p: if you want to have a persistent connection 
    // this will improve the speed and resource usage of opening a connection 
    $host  = "p:localhost"; 
    $username = "somename"; 
    $password = "somepass"; 
    $dbname = "pax"; 

    /* make connection */ 
    $lnk = mysqli_connect($host, $username, $password, $dbname); 

    /* check connection */ 
    if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
    } 

    /* prepare variables */ 
    $first_name = mysqli_real_escape_string($_POST['First_Name']); 
    $last_name = mysqli_real_escape_string($_POST['Last_Name']); 
    $email  = mysqli_real_escape_string($_POST['email']); 
    $age  = $_POST['age']; 

    $my_range = ""; 
    foreach($age as $range) { 
    $my_range = $my_range . mysqli_real_escape_string($range) . ", "; 
    } 

    $trip2date = $_POST['trip2date']; 
    $my_triprange = ""; 
    foreach($trip2date as $triprange) { 
    $my_triprange = $my_triprange . mysqli_real_escape_string($triprange) . ", "; 
    } 

    /* execute query */ 
    mysqli_query($lnk, "INSERT INTO `pax` (`First_Name`, `Last_Name`, `email`, `age`,`trip2date`) " . 
        "VALUES('$first_name','$last_name','$email', '$my_range','$my_triprange');" 
       ); 

    /* execute multi query INSERT */ 
    mysqli_multi_query($lnk, "INSERT INTO `pax` (`First_Name`, `Last_Name`, `email`, `age`,`trip2date`) " . 
          "VALUES('$first_name','$last_name','$email', '$my_range','$my_triprange');" 
          "COMMIT;" 
        ); 

    /* execute multi query SELECT */ 
    $query = "SELECT CURRENT_USER();"; 
    $query .= "SELECT `email` FROM `pax` ORDER BY `id` LIMIT 5"; 

    if (mysqli_multi_query($lnk, $query)) { 
    do { 
     /* store first result set */ 
     if ($result = mysqli_store_result($lnk)) { 
     while ($row = mysqli_fetch_row($result)) { 
      printf("%s\n", $row[0]); 
     } 
     mysqli_free_result($result); 
     } 
     /* print divider */ 
     if (mysqli_more_results($lnk)) 
     printf("-----------------\n"); 

    } while (mysqli_next_result($lnk)); 
    } 

    /* close conenction */ 
    mysqli_close($dbc); 

    // I used your code and some samples from the PHP manual. 
    // Hope this piece of code helps you and others to understand mysqli better. 
    // Thanks to PHP for having the best manual. 

?> 
+0

谢谢 - 我实际上发现他们的手册只是为了让我迷惑,而不是当我开始时。对我来说,理解我是否可以使用我自己的示例代码查看潜在的解决方案(我可以更快地了解这些更改并了解每个更改的作用)对我来说更为容易。我是一个极端的新手,因为这是我第一次使用数据库。 – shane

+0

如果这是您的第一个数据库,您应该考虑从头开始重新编写它,并且您正在使用的mysql_函数将很快被弃用。你需要用mysqli_重写所有的东西。 – transilvlad

+0

谢谢 - 这将保持本地主机和用户几乎不知道excel更少的PHP;所以,我不太关心SQL注入 - 坦率地说,安装在服务器上之后,他们可以删除它,我感到无比自豪。那么,我该如何整合/使用你的建议'mysqli_multi_query();'? – shane

相关问题