Listes déroulantes à choix multiple

yola26
Invité n'ayant pas de compte PHPfrance

15 sept. 2005, 16:21

yes avec un peu de chance, grace à ton topic tu m'as permis d'avancer aussi ptetre ke j'arriveré à résoudre mon probleme moi aussi pour les checkbox

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

15 sept. 2005, 16:26

c'est une erreur MySQL, donc la ligne 1 correspond àla ligne 1 de la requête ;)

regarde :
Dans :
INSERT INTO societes VALUES('','TEST3', '',')
tu as à la fin une virgule et une apostrophe seules, ce n'est pas bon
regarde le post de yola26, c'est le même problème, et il y a un petit bout de code pour enlever la virgule en trop
http://www.phpfrance.com/forums/voir_sujet-8468.php

en passant, autant lister les colonnes que utilises (ici une seule) plutôt que d'insérer du vide ;)

Eléphant du PHP | 179 Messages

15 sept. 2005, 16:58

Ce formulaire est un ajout d'enregistrement: toutes les colones sont vouées à être remplies. C'était juste un test pour vérifier si ça pouvait fonctionner. Le souci, c'est que j'ai suivi le topic de Yola et j'ai aussi mis le petit bout de code (même si je ne savais pas encore à quoi ça allait servir :lol: ). J'ai modifié la requête. Il y a toujours une erreur mais il reconnaît plus de champs (c'est mieux non? :lol: )
$requete = "INSERT INTO societes VALUES('','".$NomSociete."', '".$AutreNomSociete."','".$IdGroupe."',";

if (!empty ($tabSpecialite)){
    foreach($tabSpecialite as $cle => $valeur){
       $requete.="'".$valeur."',";
       }
} 
$requete.="'".$Presentation."', '".$InfCompl."', '".$PaysOrigine."', '".$Adresse."', '".$Tel."', '".$Fax."', 
'".$SiteSociete."','".$NomReprFr."', '".$AdresseReprFr."', '".$TelReprFr."', '".$FaxReprFr."', '".$MAJ."')";
$requete = substr($requete, 0, -2); 

//Résultat de la requête//
	$result = mysql_query($requete) or die('Il y a eu une erreur : <strong>' . mysql_error() . '</strong><br>Dans : <br>' . $requete);
Voici le message d'erreur:
Il y a eu une erreur : Erreur de syntaxe près de ''' à la ligne 2
Dans :
INSERT INTO societes VALUES('','TEST3', '','','', '', '', '', '', '', '','', '', '', '', '
Petit à petit, on devient moins petit... mais qu'est-ce qu'on vieillit!

yola26
Invité n'ayant pas de compte PHPfrance

15 sept. 2005, 17:27

regarde mon post peut etre que tu trouveras la réponse que tu cherches

Eléphant du PHP | 179 Messages

16 sept. 2005, 08:59

Il ne me semble pas avoir d'erreur particulière (si si j'ai bien compris que j'en avais une ... ).

Mais j'ai une requête qui commence comme ceci:
$requete = "INSERT INTO societes VALUES('','".$NomSociete."', '".$AutreNomSociete."','".$IdGroupe."',"; 
Interrompue pour intégrer ma boucle sur le tableau qui correspond aux différentes valeurs transmises dans la liste déroulante (et dont la valeur $valeur est concaténée pour continuer la requête):
if (!empty ($tabSpecialite)){
    foreach($tabSpecialite as $cle => $valeur){
       $requete.="'".$valeur."',";
       }
} 
Puis je reprends et termine la requête (elle-même concaténée pour qu'il n'y ait pas d'interrruption:
$requete.="'".$Presentation."', '".$InfCompl."', '".$PaysOrigine."', '".$Adresse."', '".$Tel."', '".$Fax."',
'".$SiteSociete."','".$NomReprFr."', '".$AdresseReprFr."', '".$TelReprFr."', '".$FaxReprFr."', '".$MAJ."')"; 
Enfin, pour éviter les zigouigoui à la fin du type
INSERT INTO societes VALUES('','TEST3', '','','', '', '', '', '', '', '','', '', '', '', '
, j'intègre un bout de code qui est censé régler ce problème:
$requete = substr($requete, 0, -2); 
Est-ce que j'ai bien compris? Si oui, je ne vois pas où se situe l'erreur. Quelqu'un a-t-il une idée?
Petit à petit, on devient moins petit... mais qu'est-ce qu'on vieillit!

Eléphant du PHP | 493 Messages

16 sept. 2005, 09:20

peux-tu stp nous donner le contneu de la variable $requete JUSTE AVANT le mysql_query ?

Eléphant du PHP | 179 Messages

16 sept. 2005, 09:30

Voici le script actuel avec les transformations qui ont été faîtes:
<?php
//Récupération des données du formulaire//
$NomSociete = $_POST['NomSociete'];
$AutreNomSociete = $_POST['AutreNomSociete'];
$IdGroupe = $_POST['IdGroupe'];
$Specialite = (isset ($_POST['Specialite']))?$_POST['Specialite']:null;
$Presentation = $_POST['Presentation'];
$InfCompl = $_POST['InfCompl'];
$PaysOrigine = $_POST['PaysOrigine'];
$Adresse = $_POST['Adresse'];
$Tel = $_POST['Tel'];
$Fax = $_POST['Fax'];
$SiteSociete = $_POST['SiteSociete'];
$NomReprFr = $_POST['NomReprFr'];
$AdresseReprFr = $_POST['AdresseReprFr'];
$TelReprFr = $_POST['TelReprFr'];
$FaxReprFr = $_POST['FaxReprFr'];
$MAJ = $_POST['MAJ'];


//Si le champ "Nom" n'est pas complété//
if(!$NomSociete)
	{
	print("<h2><center>Veuillez donner un nom</center></h2>");
	}
//Sinon confirmer l'enregistrement//
else
	{
//Connection à la base//
	$lien = mysql_connect("xx","xx","xx");
	mysql_select_db("xx", $lien);
//Requête d'enregistrement//
	$requete = "INSERT INTO societes VALUES('','".$NomSociete."', '".$AutreNomSociete."','".$IdGroupe."','";//interruption pour lancer la boucle pour les données de la liste déroulante
if (!empty ($tabSpecialite)){
    foreach($tabSpecialite as $cle => $valeur){
       $requete.="'".$valeur."',";//suite de la requête
       }
}
// fin de la boucle et suite de la requête
$requete.="','".$Presentation."', '".$InfCompl."', '".$PaysOrigine."', '".$Adresse."', '".$Tel."', '".$Fax."', 
'".$SiteSociete."','".$NomReprFr."', '".$AdresseReprFr."', '".$TelReprFr."', '".$FaxReprFr."', '".$MAJ."')";
$requete = substr($requete, 0, -2); //suppression de la , et du " en trop (enfin il paraît ... :) )
//Résultat de la requête//
	$result = mysql_query($requete) or die('Il y a eu une erreur : <strong>' . mysql_error() . '</strong><br>Dans : <br>' . $requete);
	print ("<h3><center>La société a été enregistrée</h3></center>");
//Fermeture de la base//
mysql_close($lien);
}
?>
Petit à petit, on devient moins petit... mais qu'est-ce qu'on vieillit!

Eléphant du PHP | 493 Messages

16 sept. 2005, 09:31

peux-tu stp nous donner le contenu de la derniere requete exécutée stp ?!

Eléphant du PHP | 179 Messages

16 sept. 2005, 09:36

Excuse moi mais je crois que je ne comprends pas ta demande. :oops:
Petit à petit, on devient moins petit... mais qu'est-ce qu'on vieillit!

Eléphant du PHP | 493 Messages

16 sept. 2005, 09:39

...
//Résultat de la requête//
    $result = mysql_query([b]$requete[/b]) or die('Il y a eu une erreur : <strong>' . mysql_error() . '</strong><br>Dans : <br>' . $requete);
    print ("<h3><center>La société a été enregistrée</h3></center>");
//Fermeture de la base//
mysql_close($lien);
}
je voudrais le contenu de la variable en gras, à ce moment, juste avant d'executer :
$result = mysql_query([b]$requete[/b])
merci :wink:

Edit: le parser de phpBB semble avoir un peu du mal !

Eléphant du PHP | 179 Messages

16 sept. 2005, 09:49

Soit tu me demandes à quoi correspond requête (mais je doute que ce soit ça puisque je l'ai indiqué plus haut),

Soit tu me demandes le résultat de la requête et dans ce cas là il m'affiche une erreur:
Il y a eu une erreur : Erreur de syntaxe près de ''' à la ligne 2
Dans :
INSERT INTO societes VALUES('','TEST5', '','','','', '', '', '', '', '', '','', '', '', '', '
Soit je n'ai toujours pas compris ta question et tu es doté d'une grande patience :wink:
Petit à petit, on devient moins petit... mais qu'est-ce qu'on vieillit!

Eléphant du PHP | 493 Messages

16 sept. 2005, 10:00

Oulala ... excuse moi ... je viens de voir un truc. désolé d'avoit été aussi lourd :lol:

Bon, comme tu peux le constater ta requete n'est pas complete (il manque le bout avec la parenthese fermante), or ton script me semble juste (au premier coup d'oeil). Il me semble que le probleme vienne de :
$requete = substr($requete, 0, -2);
retire cette ligne et normalement tout devrait aller

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

16 sept. 2005, 10:16

$requete = substr($requete, 0, -2); 
cette ligne n'est pas en trop, elle est simplement mal placée

dans cette boucle :
if (!empty ($tabSpecialite)){
    foreach($tabSpecialite as $cle => $valeur){
       $requete.="'".$valeur."',";//suite de la requête
       }
}
après chaque valeur on rajoute une virgule
sauf que pour la dernière valeur on aura donc une virgule en trop
cette ligne sert à l'enlever, comme c'était indiqué
(-2 car il y a aussi un espace à enlever)

la ligne en question doit donc se trouver juste après la boucle

quand on construit une requête dynamiquement, on affiche toujours le SQL généré, ça aide à voir où se trouve l'erreur
et c'est ce que demandait Vaedan

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

16 sept. 2005, 11:42

Bonjour, il est vrai que le substr est mal placé mais
pour eviter de mettre le "substr" il suffit de replacer -> ',
l'écrire avant la valeur (dans la boucle).
$requete = "INSERT INTO societes VALUES('','".$NomSociete."', '".$AutreNomSociete."','".$IdGroupe."'";//ne pas écrire ,' ici
if (!empty ($tabSpecialite)){
    foreach($tabSpecialite as $cle => $valeur){
       $requete.=",'".$valeur."'";//mais l'écrire ici avant la variable
       }
}
// fin de la boucle et suite de la requête
$requete.=",'".$Presentation."', '".$InfCompl."', '".$PaysOrigine."', '".$Adresse."', '".$Tel."', '".$Fax."',
'".$SiteSociete."','".$NomReprFr."', '".$AdresseReprFr."', '".$TelReprFr."', '".$FaxReprFr."', '".$MAJ."')";

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

16 sept. 2005, 11:49

oui effectivement

ou alors si on a des valeurs après ne pas la mettre avant ces valeurs

tout est une question d'arrangement et fonction de la requête que l'on souhaite avoir à la fin ;)