Recuperation des donnees d'un formluaire dans 2 tables

Eléphant du PHP | 287 Messages

27 avr. 2009, 14:05

Bonjour à tous et toutes!
J'ai créé un formulaire d'inscription que voici :
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<form method="post" enctype="multipart/form-data" action="recup_donnee.php">
Nom :<input type="text" name="nom_etab" size="40" value="" maxlength="70"><br>
Texte :<textarea name="texte_etab" cols="40"></textarea><br>
Pictos :<?php
$db=mysql_connect('localhost', 'root', '') or die('Erreur de connexion '.mysql_error());
mysql_select_db('test_picto',$db);
$picto = "SELECT id_picto, nom_picto, image_picto FROM picto";
$result = mysql_query($picto);
while ($row = mysql_fetch_assoc($result)) {
echo '<input type="checkbox" name="picto[]" value="' . $row['id_picto'] . '"/>
<img src="picto/' . $row['image_picto'] . '">';
}
?><br>
<input type="submit" name="upload" value="Envoyer">
</form>
</body>
</html>
Maintenant je voudrai récupérer mes données dans mes tables :
- etab, où je recupère le nom et le texte (pas de souci pour inserer dans cette table)
- picto, table contenant mes pictos
- liaison, table dans laquelle je récupère le formulaire pour dire quel picto va à tel établissement

J'ai commencé mon formulaire comme ci, mais ça bloque au niveau des pictos :
<?php 
// On commence par récupérer les champs 
if(isset($_POST['nom_etab']))      $etab=$_POST['nom_etab'];
else      $etab="";

if(isset($_POST['texte_etab']))      $texte=$_POST['texte_etab'];
else      $texte="";

// On efface tout
$sql = "DELETE FROM liaison id_etab WHERE id_etab =" . $id_etab;
 
// on ré-ecrit
if (isset($_POST['picto'])) {
   foreach ($_POST['picto'] as $id_picto) {
       $sql = "INSERT INTO liaison (id_etab, id_picto) VALUES (id_etab, intval($id_picto))";
   }
}

// Aucun champ n'est vide, on peut enregistrer dans la table 
$db = mysql_connect('localhost', 'root', '')  or die('Erreur de connexion '.mysql_error());
mysql_select_db('test_picto',$db)  or die('Erreur de selection '.mysql_error()); 
     
// On écrit la requête sql 
$sql = "INSERT INTO etab(id_etab,etab,texte) VALUES('".mysql_real_escape_string('')."','".mysql_real_escape_string($etab)."','".mysql_real_escape_string($texte)."')";

// On récupère l'id_etab qui vient d'être généré 
$id_etab = mysql_insert_id(); 

// Ci-dessous on insère les infos dans liaison 
$sql = "INSERT INTO liaison(id_liaison, id_etab, id_picto) VALUES('','$id_etab','$id_picto')"; 
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 
     
// On insère les informations du formulaire dans la table 
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 

// On affiche le résultat pour le visiteur 
	echo "<br />";
	echo 'Votre Etablissement a été enregistré avec succés !';
	echo "<br />"; 

    mysql_close();  // on ferme la connexion 
?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

27 avr. 2009, 18:57

Sortez vos variables... Sortez vos variables... Image
...
ca permet d'y voir plus clair dans votre code, et éventuellement sur vos erreurs ;)
if (isset($_POST['picto'])) { 
   foreach ($_POST['picto'] as $id_picto) { 
       $sql = "INSERT INTO liaison (id_etab, id_picto) VALUES (id_etab, intval($id_picto))"; 
   } 
} 
Et exécutez vos requêtes, parce que sinon, ça marchera beaucoup moins bien :P
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

27 avr. 2009, 19:12

Le code que tu me donnes c'est celui que j'ai mis...

Mammouth du PHP | 991 Messages

27 avr. 2009, 19:18

Sortez vos variables... Sortez vos variables... Image
...
ca permet d'y voir plus clair dans votre code, et éventuellement sur vos erreurs ;)
if (isset($_POST['picto'])) { 
   foreach ($_POST['picto'] as $id_picto) { 
       $sql = "INSERT INTO liaison (id_etab, id_picto) VALUES (id_etab, intval($id_picto))"; 
   } 
} 
Et exécutez vos requêtes, parce que sinon, ça marchera beaucoup moins bien :P
je redis :
Et exécutez vos requêtes, parce que sinon, ça marchera beaucoup moins bien :P
DevOps, Symfony4, Hoa

ViPHP
AB
ViPHP | 5818 Messages

27 avr. 2009, 19:19

Quand tu auras suivi les conseils de Ryle ça devrait commencer à aller beaucoup mieux :)

En plus de son exemple il y a aussi
// On récupère l'id_etab qui vient d'être généré 
$id_etab = mysql_insert_id();
qui a été généré quand ?

Enfin juste pour dire qu'en plus de ces corrections, tu pourrais rendre ton code plus lisible en employant les opérateurs ternaires. Par exemple à la place de
if(isset($_POST['texte_etab']))      $texte=$_POST['texte_etab'];
else      $texte=""; 
on peut faire
$texte = isset($_POST['texte_etab']) ? $_POST['texte_etab'] : '';
Si cela t'intéresse il y a un tuto sur le sujet ici