2011-11-11 4 views
0

j'ai forme simple:problèmes PHP avec l'enregistrement des données dans la base de données MySQL

<form action="add.php" method="post" > 
     <input name="name" maxlength="30"/><br/> 
     <textarea cols="80" name="description" rows="10"> 
     </textarea><br/> 

     <table> 
      <thead> 
        <tr> 
         <th></th> 
         <th width="200px">Shop list</th> 
        </tr> 
      </thead> 
      <tbody div class ="table"> 
      <?php 
      $result = mysql_query("SELECT shop_id, name FROM shop") or die(mysql_error()); 
      if(mysql_num_rows($result) > 0) { 
       while($row = mysql_fetch_assoc($result)) { 
       echo '<tr> 
         <td> 
         <input type="checkbox" name="identifer[]" value="'.$row['shop_id'].'" /> <br /></td> 
         <td>'.ucfirst($row['shop']).'</td> 
         </tr> ';  
                 } 
              } 
        ?> 

    </tbody></table> 
<input type="submit" value="Add"> 
</form> 

Je veux enregistrer les résultats dans la base de données dans deux tables différentes: livre (book_id, nom, description) et lieux . Dans places tableau Je veux enregistrer les magasins où vous pouvez acheter ce livre (places_id, book_id, shop_id).

Je add.php fichier (il ne fonctionne pas):

<?php 
    $name = $_POST['name']; 
    $description = $_POST['description']; 



     $identifer =($_POST['identifer']); 
     if (isset($identifer)){ 

      $id_arr = implode(',', $identifer); 
      $result = mysql_query("INSERT INTO places (places_id, book_id, shop_id) VALUES (NULL, NULL ($id_arr))") or die(mysql_error()); 

     } 




$q = "INSERT INTO baldas (book_id, name, description) VALUES (NULL, '$name', '$description')"; 

$result2 = mysql_query($q) or die(mysql_query()); 

    ?> 

Je suis confus que je dois enregistrer les résultats dans deux tableaux différents dans le même temps, aussi j'ai des problèmes avec l'identification qui checkboxes sont vérifiés et d'écrire les résultats dans la base de données, surtout je n'ai aucune idée de la façon de traiter book_id. Un conseil serait utile.

Répondre

1

Je ne sais pas comment faire face à book_id

Vous insérez d'abord les valeurs dans la table baldas, puis appelez mysql_insert_id()

<?php 
    $q = "INSERT INTO baldas (book_id, name, description) VALUES (NULL, '$name', '$description')"; 
    $result = mysql_query($q) or die(mysql_query()); 

    $bookID = mysql_insert_id(); 

    // CODE TO INSERT INTO `places` TABLE USING $bookID // 
?> 

présente des problèmes d'identification qui checkboxes sont vérifiés

La façon dont vous les avez, vous auriez à boucle à travers le réseau $_POST['identifier'] pour identifier le shop_id

<?php 
    foreach((array)$_POST['identifier'] as $shopID) { 
     $q2 = "INSERT INTO places (place_id, book_id, shop_id) VALUES (NULL, '$bookID', '$shopID')";  
     $result2 = mysql_query($q2) or die(mysql_error()); 
    } 
?> 

Si ce n'est pas vérifié ne sera pas affiché dans le $_POST

+0

Nous vous remercions de votre réponse rapide. Mais je peux toujours le faire correctement. :( 'foreach ((tableau) $ _ POST [ 'identifiant'] comme $ shopID) { $ q2 = « INSERT INTO lieux (place_id, book_id, shop_id) VALUES (NULL, '$ bookID', « $ shopID ') "; \t $ result2 = mysql_query (q2 $) ou mourir (mysql_query()); }' Ce code donne 0 Ai-je raté quelque chose – Lina

+0

votre déclaration die doit être 'mysql_error'.?. Peut-être que vous obtiendrez l'erreur que vous rencontrez (parce que l'INSERT semble bien à partir de l'information que nous avons jusqu'à présent) – DTest

0

Je pense que cela pourrait être le problème avec la définition des ID à NULL, si les ID sont auto-incrémentant (ce que je suppose qu'ils sont). Regarde ça.

La visualisation des erreurs est toujours utile.

0

Le tableau qui contient tous les 'lieux', vous pouvez acheter un livre devrait avoir:

  • place_id qui est auto-incrémentée et 'local' à cette table. ID, unique.
  • book_id est l'identifiant du livre de la table livres (plusieurs lignes avec ce existeront)
  • shop_id est l'identifiant du magasin de la table des magasins (que vous n'avez pas mentionné)

Il y aura une ligne pour chaque endroit où un livre peut être acheté. Donc, vous devriez seulement besoin d'une requête si vous ajoutez un place qui un livre peut être acheté:

INSERT INTO places (book_id, shop_id) VALUES ($book_id, $shop_id) 

Avis je ne comprend pas place_id, car cela devrait être auto-incrémentée.

1

Essayez ceci, l'espoir peut vous aider:

<?php 
    $name = $_POST['name']; 
    $description = $_POST['description']; 
    $identifer[] =($_POST['identifer']); 
    $y = null; 
    if(count($identifer) > 1){ 
     foreach($identifer as $x){ 
      $y .= $x.","; 
     } 
     $val = rtrim($y,","); 
    } else { 
     $val = $identifer[0] 
    } 
    $result = mysql_query("INSERT INTO places (places_id, book_id, shop_id) VALUES (NULL, NULL, '$val')") or die(mysql_error()); 

    $q = "INSERT INTO baldas (book_id, name, description) VALUES (NULL, '$name', '$description')"; 

    $result2 = mysql_query($q) or die(mysql_query()); 
?> 

si places_id sur les lieux de table et book_id sur Baldas de table sont AUTO_INCREMENT vous pouvez essayer pour add.php

<?php 
    $name = $_POST['name']; 
    $description = $_POST['description']; 
    $identifer = $_POST['identifer']; 
    $shop_id = null; 
    if(isset($identifer)) $shop_id = implode(',', $identifer); 
    $q = "INSERT INTO baldas (name, description) VALUES ('$name', '$description')"; 
    $result = mysql_query($q) or die(mysql_query()); 
    $book_id = mysql_insert_id(); 
    $result2 = mysql_query("INSERT INTO places (book_id, shop_id) VALUES ('$book_id', '$shop_id')") or die(mysql_error()); 
?> 
Questions connexes