$requete = "INSERT INTO societes VALUES('','".$NomSociete."', '".$AutreNomSociete."','".$IdGroupe."','";
if (!empty ($tabSpecialite)){
foreach($tabSpecialite as $cle => $valeur)
{
$requete.=$valeur.',';
}
}
$requete = substr($requete, 0, -1);
$requete .="',".$Presentation."', '".$InfCompl."', '".$PaysOrigine."','".$Adresse."', '".$Tel."', '".$Fax."', '".$SiteSociete."', '".$NomReprFr."', '".$AdresseReprFr."', '".$TelReprFr."', '".$FaxReprFr."', '".$MAJ."')";
et si c'est toujours pas ça, je me retire
Code : Tout sélectionner
Societes
------------
IdSociete | NomSociete
1 | Batigro
possede
---------
IdSociete | id_specialite
1 | 1
1 | 3
Specialites
------------
id_specialite | libelle_specialite
1 | Editeur
2 | Diffuseur-Distributeur
3 | Producteur
Non tu n'auras pas à faire çapour éviter de devoir refaire du code, la requete devrai donner le résultat attendu, je pense (jamais utilisé ce type -> SET):
et si c'est toujours pas ça, je me retire Wink
J'ai vérifié dans le script de formulaire et dans la base si ce n'est pas une question d'orthographe mais ça n'a pas l'air d'être ça. Bô j'arriverai bien à trouver.INSERT INTO societes VALUES('','TEST3', '','','Diffuseur-Distributeur,Producteu','', '', '', '', '', '', '','', '', '', '', '')
Après une nuit de réflexion, je me dis que j'aurai probalement moins de difficultés à utiliser cette méthode: je pense que c'est un peu long à mettre en place mais que ça sera au final beaucoup plus simple (surtout si tu m'aidesmais bon effectivement maintenant que c'est fait, et si tu n'as pas le temps de changer, garde tes SET, mais à mon avis la conception est pas top Wink
<?php
//Récupération des données du formulaire//
$NomSociete = $_POST['NomSociete'];
$AutreNomSociete = $_POST['AutreNomSociete'];
$IdGroupe = $_POST['IdGroupe'];
$Specialite = $_POST['Specialite'];
$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."','".implode(',',$_POST['Specialite'])."','".$Presentation."', '".$InfCompl."', '".$PaysOrigine."', '".$Adresse."', '".$Tel."', '".$Fax."',
'".$SiteSociete."','".$NomReprFr."', '".$AdresseReprFr."', '".$TelReprFr."', '".$FaxReprFr."', '".$MAJ."')";
echo ($requete);
//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);
}
?>
<?php
//Récupération de l'identifiant de l'enregistrement//
$IdSociete = $_POST['IdSociete'];
?>
<!--Formulaire-->
<form action="b_societes_mod3.php" method="post">
<!--Récupération du champ caché-->
<input type="hidden" name="IdSociete" value="<? echo $IdSociete; ?>">
<?php
//Connection à la base//
$lien = mysql_connect("xx","xx","xx");
mysql_select_db("xx", $lien);
//Sélection de la table//
$requete="SELECT IdSociete, NomSociete, AutreNomSociete, RefGroupe, Specialite, Presentation,
InfCompl, PaysOrigine, Adresse, Tel, Fax, SiteSociete, NomReprFr, AdresseReprFr, TelReprFr, FaxReprFr, MAJ
FROM societes
WHERE IdSociete='".$IdSociete."'";
$result=mysql_query($requete);
//Affichage des données du tableau//
$NomSociete=mysql_result($result,0,'NomSociete');
$AutreNomSociete=mysql_result($result,0,'AutreNomSociete');
$RefGroupe=mysql_result($result,0,'RefGroupe');
$Specialite=mysql_result($result,0,'Specialite');
$Presentation=mysql_result($result,0,'Presentation');
$InfCompl=mysql_result($result,0,'InfCompl');
$PaysOrigine=mysql_result($result,0,'PaysOrigine');
$Adresse=mysql_result($result,0,'Adresse');
$Tel=mysql_result($result,0,'Tel');
$Fax=mysql_result($result,0,'Fax');
$SiteSociete=mysql_result($result,0,'SiteSociete');
$NomReprFr=mysql_result($result,0,'NomReprFr');
$AdresseReprFr=mysql_result($result,0,'AdresseReprFr');
$TelReprFr=mysql_result($result,0,'TelReprFr');
$FaxReprFr=mysql_result($result,0,'FaxReprFr');
$MAJ=mysql_result($result,0,'MAJ');
mysql_close($lien);
?>
Spécialité de la société : // Ici il faudrait : 1. que je puisse restituer la liste déroulante déjà sélectionnée, 2. que je puisse transmettre les nouvelles données s'il y a eu changement
<select name="Specialite"[]" size="3" multiple>
<option value="Editeur">Editeur</option>
<option value="Diffuseur-Distributeur">Diffuseur-Distributeur</option>
<option value="Producteur">Producteur</option>
</select>
Voici le second script, qui est censé effectuer la modification: <?php
//Récupération des données du formulaire//
$IdSociete = $_POST['IdSociete'];
$NomSociete = $_POST['NomSociete'];
$AutreNomSociete = $_POST['AutreNomSociete'];
$IdGroupe = $_POST['IdGroupe'];
$Specialite = $_POST['Specialite'];
$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("<h3><center>Vous n'avez pas rempli le champ nom</h3></center>");
}
//Sinon confirmer la modification//
else
{
//connection à la base//
$lien = mysql_connect("xx","xx","xx");
mysql_select_db("xx", $lien);
//requête de mise à jour//
$requete="UPDATE societes SET
NomSociete='".$NomSociete."',
AutreNomSociete='".$AutreNomSociete."',
RefGroupe='".$IdGroupe."',
Specialite= '".$Specialite."',
Presentation='".$Presentation."',
InfCompl='".$InfCompl."',
PaysOrigine='".$PaysOrigine."',
Adresse='".$Adresse."',
Tel='".$Tel."',
Fax='".$Fax."',
SiteSociete='".$SiteSociete."',
NomReprFr='".$NomReprFr."',
AdresseReprFr='".$AdresseReprFr."',
TelReprFr='".$TelReprFr."',
FaxReprFr='".$FaxReprFr."',
MAJ='".$MAJ."'
WHERE IdSociete='".$IdSociete."'";
$result=mysql_query($requete) or die('Il y a eu une erreur : <strong>' . mysql_error() . '</strong><br>Dans : <br>' . $requete);
print ("<h2><center>La société a été modifiée </center></h2>");
if (isset ($Specialite)) echo "Insertion de la spécialité: '".$Specialite."'";
//fermeture de la base//
mysql_close($lien);
}
?>
<select name="Specialite[]" size="3" multiple>
<option value="Editeur" <? if(in_array("Editeur",$Specialite)) echo "selected" ?>>Editeur</option>
<option value="Diffuseur-Distributeur" <? if(in_array("Diffuseur-Distributeur",$Specialite)) echo "selected" ?>>Diffuseur-Distributeur</option>
<option value="Producteur" <? if(in_array("Producteur",$Specialite)) echo "selected" ?>>Producteur</option>
</select>
En ce qui concerne le 2eme probleme tu fait une erreur en nomant le select:<select name="Specialite"[]"
essaie comme ceci:
<select name="Specialite[]"
et le meme principe que t'a montré cet informaticien Ben parce que je l'avais (mal) fait.Le code de la requête UPDATE a l'air bon, mais pourquoi tu n'as pas remis ton implode() du coup ? c'est le même système
Ben je crois que le problème venait de là. J'avais bêtement conclu que c'était le implode qui ne fonctionnait pas...En ce qui concerne le 2eme probleme tu fait une erreur en nomant le select:
PHP:
<select name="Specialite"[]"
essaie comme ceci:
PHP:
<select name="Specialite[]"
Du coup je découvre une nouvelle fonction (in_array). Ceci dit il me donne une erreur que je n'ai encore jamais rencontrée:Mais bon, voila ce qui devrai réglé ton problème de préséléction dans la liste:
Ce code remplace le select que tu as mis.
PHP:
<select name="Specialite[]" size="3" multiple>
<option value="Editeur" <? if(in_array("Editeur",$Specialite)) echo "selected" ?>>Editeur</option>
<option value="Diffuseur-Distributeur" <? if(in_array("Diffuseur-Distributeur",$Specialite)) echo "selected" ?>>Diffuseur-Distributeur</option>
<option value="Producteur" <? if(in_array("Producteur",$Specialite)) echo "selected" ?>>Producteur</option>
</select>
Warning: in_array():Wrong datatype for secund argument
et le meme principe que t'a montré cet informaticien
pour le UPDATE Wink
$Specialité = array ('Editeur', 'Diffuseur-Distributeur','Producteur');
Mais je ne sais pas où le placer. Lorsque je le place comme suit il m'affiche tous les items comme sélectionnés et pas ceux que j'ai sélectionnés spécifiquement.<td><h4>Spécialité de la société : </h4></td>
<td><select name="Specialite[]" size="3" multiple <? $Specialité = array ('Editeur', 'Diffuseur-Distributeur','Producteur');?>>
<option value="Editeur" <? if(in_array("Editeur",$Specialite)) echo "selected" ?>>Editeur</option>
<option value="Diffuseur-Distributeur" <? if(in_array("Diffuseur-Distributeur",$Specialite)) echo "selected" ?>>Diffuseur-Distributeur</option>
<option value="Producteur" <? if(in_array("Producteur",$Specialite)) echo "selected" ?>>Producteur</option>
</select></td>
$Specialite = array ($val1, $val2, $val3);
Dans ce cas là, comment est-ce que je les définis? Dans le cas d'un INSERT ou même de l'UPDATE, je n'avais pas besoin de le faire puisque un champ SET= array. Or dans ce cas précis, il ne semble plus reconnaître l'"array" puisqu'il n'applique pas in_array.