2013-08-21 2 views
0

J'ai une question à propos de l'utilisation de la fonction mysql_insert_id lorsque je souhaite insérer de nouvelles données du format html dans plusieurs tables? La forme que je utilise est la suivante:Utilisation de la fonction mysql_insert_id

<form method="POST" action="insert.php"> 

    <table> 

     <tr> 
     <td>Room</td> 
     <td> 
      <select name="room"> 
      <?php 
       openDB(); 

      $sql = "SELECT room_id, name FROM room"; 
      $rs = executeDB($sql); 

     while(list($room_id, $name) = mysql_fetch_array($rs)) { 
    echo "<option value='$room_id'>$name</option>"; 
       } 
      ?> 
     </select> 
    </td> 
</tr> 

<tr> 
<td>Product</td> 
     <td> 
     <select name="product"> 

     <?php 
     openDB(); 

     $sql = "SELECT product_id, name FROM product"; 
     $rs = executeDB($sql); 

     while(list($product_id, $name) = mysql_fetch_array($rs)) { 

     echo "<option value='$product_id'>$name</option>"; 
    } 
      ?> 
      </select> 
     </td> 
    </tr> 

<tr> 
<td>Quantity</td> 
    <td> 
    <?php 
    openDB(); 

    $sql = "SELECT quantity FROM items_order"; 
    $rs = executeDB($sql); 

     while(list($quantity) = mysql_fetch_array($rs)) { 

     echo " <input type='number' name='quantity []' min='1' max='4'/></td>"; 

      } 
      ?> 
    </td> 
</tr> 
<tr> 
    <td colspan="2"> 
    <input type="submit" value="Submit"/> 
    </td> 
    </tr> 
</table> 
</form> 

ensuite saisir ces variables:

if(isset($_POST['user'])) { 
     $user= $_POST['user']; 
     $room_id = $_POST['room_id']; 
     $product_id = $_POST['product_id']; 
     $quantity= $_POST['quantity']; 
     $status = 0; // if it's payed or not, if it is status= 1 else status = 0 

Voici le code:

$sql = "INSERT INTO order (status, room_id, user_id) VALUES ('$status','$room_id','$user_id')"; 
$rs = mysql_query($sql); 

$newid = mysql_insert_id(); 

$sql2 ="INSERT INTO items_order VALUES ('$newid ','$product_id','$quantity')"; 
$rs = mysql_query($sql2); 

et il ne fonctionne pas.

Les tableaux que j'ai sont; ordre, items_order, product, la commande a order_id clé primaire comme auto increment, the items_order a deux clés primaires: order_id, et product_id car ce sont des clés étrangères, room a room_id, et le produit a product_id, les clés étrangères dans table de commande sont user_id, room_id, for. Dois-je utiliser cette fonction pour entrer de nouvelles données ou non? Et le plus important, qu'est-ce que je fais mal que ce code ne fonctionne pas? S'il vous plaît aider.

+0

Vous devez spécifier la langue que vous utilisez, en particulier dans les balises. –

+0

J'utilise php la base de données est dans ENGINE = InnoDB. – cappie

+0

Qu'est-ce qui ne fonctionne pas exactement? –

Répondre

-1

Je suis sûr que PHP n'utilise pas l'interpolation de chaîne, donc les chaînes que vous voyez dans le code du programme sont en fait ce qu'il essaie de donner à MySQL. Évidemment, cela ne fonctionnerait pas.

La méthode correcte consiste à utiliser des requêtes préparées dans lesquelles vous pouvez remplacer les paramètres de manière sûre. Ce que vous faites n'est qu'une invitation à une attaque par injection SQL. Bien sûr, l'ancienne extension MySQL pour PHP ne supporte pas ceux-ci, c'est pourquoi il est obsolète et devrait bientôt être retiré. Donc vous ne devriez pas l'utiliser.

Suivez ce lien et ses instructions et en apprendre davantage sur la bonne façon d'accéder à MySQL en PHP:

http://us3.php.net/manual/en/mysqlinfo.api.choosing.php

+0

Ceci est juste à des fins d'apprentissage – cappie

+0

C'est encore pire. Vous apprenez la mauvaise chose. Si vous travailliez sur une base de code existante, vous n'auriez probablement pas le choix, mais maintenant vous le faites. Alors s'il vous plaît, apprenez la bonne façon maintenant. –

+0

Tout est correct, mais comment cela répond-il au problème de l'OP? –