par
yaug » 13 mai 2009, 10:24
Bonjour.
Je vais tenter de t'aider à solutionner ton problèmes.
Les pictos
Concernant l'enregistrement des pictos, regardons d'abord ton code html.
Tu utilises ceci :
Code : Tout sélectionner
echo '<input type="checkbox" name="picto[]" value="' . $row['id_picto'] . '"/>
Ce qui se traduira, une fois ton formulaire validé, par un tableau $_POST du style :
A première vue (et j'ai bien dit à première vue) cela devrait fonctionner si tu fais ceci :
// on ré-ecrit
if (isset($_POST['picto'])) {
foreach ($_POST['picto'] as $key => $id_picto) {
$sql = "INSERT INTO liaison (id_etab, id_picto) VALUES (id_etab, '".intval($id_picto))."'";
}
}
Tes requêtes
Il me semble quelque peu bizzare que tu faces des
en chaine, pour seulement exécuter tes requêtes à la fin.
Tu es sur du code que tu nous a mis? si oui, il y a un soucis car à chaque fois tu surcharges ta requêtes.
Il faudrait plutôt faire ceci:
<?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 vérifie si les champs sont vides
if(empty($etab) OR empty($texte))
{
echo '<font color="red">Aucun champ ne doit rester vide !</font>';
}
// Aucun champ n'est vide, on peut enregistrer dans la table
$db = mysql_connect('localhost', 'root', '') or die('Erreur de connexion '.mysql_error());
// sélection de la base
mysql_select_db('test_picto',$db) or die('Erreur de selection '.mysql_error());
// On efface tout
$sql = "DELETE FROM liaison id_etab WHERE id_etab =" . $id_etab;
// on insère les informations du formulaire dans la table
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); // !!! ICI, pense à éxécuter ta requête !
// on ré-ecrit
if (isset($_POST['picto'])) {
foreach ($_POST['picto'] as $key => $id_picto)
{
$sql = "INSERT INTO liaison (id_etab, id_picto) VALUES (id_etab, '".intval($id_picto))."'";
// !!! ICI, pense à éxécuter ta requête !
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.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 insère les informations du formulaire dans la table
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
// 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
?>
On récapitule.
- Erreur 1 :
Tu n'exécute pas ta requete de délete
- Erreur 2 :
Tu n'exécute pas tes insert de picto.
- Erreur 3 : Tu fais un second mysql_query($sql) après avoir inséré une premier fois dans "etab", mais sans avoir modifié ta requete.. ce qui fait donc que tu insert 2 fois.
J'espère que cela pourra t'aider.
Bonjour.
Je vais tenter de t'aider à solutionner ton problèmes.
[b]Les pictos[/b]
Concernant l'enregistrement des pictos, regardons d'abord ton code html.
Tu utilises ceci :
[code]
echo '<input type="checkbox" name="picto[]" value="' . $row['id_picto'] . '"/>
[/code]
Ce qui se traduira, une fois ton formulaire validé, par un tableau $_POST du style :
[code]
Array ( [0] => a [1] => b [2] => e );
[/code]
A première vue (et j'ai bien dit à première vue) cela devrait fonctionner si tu fais ceci :
[php]
// on ré-ecrit
if (isset($_POST['picto'])) {
foreach ($_POST['picto'] as $key => $id_picto) {
$sql = "INSERT INTO liaison (id_etab, id_picto) VALUES (id_etab, '".intval($id_picto))."'";
}
}
[/php]
[b]Tes requêtes[/b]
Il me semble quelque peu bizzare que tu faces des
[code]
$sql = "...";
[/code]
en chaine, pour seulement exécuter tes requêtes à la fin.
Tu es sur du code que tu nous a mis? si oui, il y a un soucis car à chaque fois tu surcharges ta requêtes.
Il faudrait plutôt faire ceci:
[php]
<?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 vérifie si les champs sont vides
if(empty($etab) OR empty($texte))
{
echo '<font color="red">Aucun champ ne doit rester vide !</font>';
}
// Aucun champ n'est vide, on peut enregistrer dans la table
$db = mysql_connect('localhost', 'root', '') or die('Erreur de connexion '.mysql_error());
// sélection de la base
mysql_select_db('test_picto',$db) or die('Erreur de selection '.mysql_error());
// On efface tout
$sql = "DELETE FROM liaison id_etab WHERE id_etab =" . $id_etab;
// on insère les informations du formulaire dans la table
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); // !!! ICI, pense à éxécuter ta requête !
// on ré-ecrit
if (isset($_POST['picto'])) {
foreach ($_POST['picto'] as $key => $id_picto)
{
$sql = "INSERT INTO liaison (id_etab, id_picto) VALUES (id_etab, '".intval($id_picto))."'";
// !!! ICI, pense à éxécuter ta requête !
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.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 insère les informations du formulaire dans la table
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
// 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
?>
[/php]
On récapitule.
- Erreur 1 :
Tu n'exécute pas ta requete de délete
- Erreur 2 :
Tu n'exécute pas tes insert de picto.
- Erreur 3 : Tu fais un second mysql_query($sql) après avoir inséré une premier fois dans "etab", mais sans avoir modifié ta requete.. ce qui fait donc que tu insert 2 fois.
J'espère que cela pourra t'aider.