Affichage d'un formulaire de modification

Eléphant du PHP | 179 Messages

19 août 2005, 11:28

$requete1 = ""; // sélection des infos de la société choisie
 
//Connection à la base//
$lien = mysql_connect("xx","xx","xx");
mysql_select_db("xx", $lien);

//Selection des champs dans les tables "societes" et "groupes": requete 1//
	$requete="SELECT IdSociete, NomSociete, AutreNomSociete, NomGroupe, Specialite,
			s.Presentation, s.InfCompl, PaysOrigine, Adresse, Tel, Fax, SiteSociete,
			NomReprFr, AdresseReprFr, TelReprFr, FaxReprFr
			FROM societes s
			LEFT OUTER JOIN groupes g ON s.RefGroupe=g.IdGroupe
			WHERE IdSociete='".$IdSociete."'";
$requete2 = ""; // sélection des tous les groupes existants
 //Selection des champs dans la table groupe//
	$requete2="SELECT * FROM groupes";
<select name="age">
devient
<select name="RefGroupe">
<?php
$valeurChoisie = 24; // cette valeur sera l'id du groupe attribué à la société et récupéré par la requête 1
$RefGroupe = $IdGroupe (?)
for ($i=7; $i<=77; $i++) { // cette boucle sera celle qui listera les infos, un mysql_fetch_array par exemple à partir de la requête 2
while ($val2=mysql_fetch_array($result2)){
for ($i=$RefGroupe; $i<= :?: ; $i++){
if ($i == $valeurChoisie) { // si l'identifiant du groupe courant, est égal à celui des infos de la société, alors on positionne la liste dessus
echo '<option value="'.$i.'" selected="selected">'.$i.'</option>';
} else {
echo '<option value="'.$i.'">'.$i.'</option>';
}
}
?>
if ($i == $RefGroupe){
    echo  '<option value="'.$i.'" selected="selected">'.$i.'</option>';
    } else {
        echo '<option value="'.$i.'">'.$i.'</option>';
    }
}
Ca donnerait quelque chose comme ça?
 
//Connection à la base//
$lien = mysql_connect("xx","xx","xx");
mysql_select_db("xx", $lien);

//Selection des champs dans les tables "societes" et "groupes": requete 1//
	$requete="SELECT IdSociete, NomSociete, AutreNomSociete, NomGroupe, Specialite,
			s.Presentation, s.InfCompl, PaysOrigine, Adresse, Tel, Fax, SiteSociete,
			NomReprFr, AdresseReprFr, TelReprFr, FaxReprFr
			FROM societes s
			LEFT OUTER JOIN groupes g ON s.RefGroupe=g.IdGroupe
			WHERE IdSociete='".$IdSociete."'";
//Selection des champs dans la table groupe//
	$requete2="SELECT * FROM groupes";
//Fermeture de la base//
mysql_close($lien);
?>

<select name="RefGroupe">

<?php 
$RefGroupe = $IdGroupe
while ($val2=mysql_fetch_array($result2))
    {
      for ($i=$RefGroupe; $i<= :?: ; $i++)
          {
            if ($i == $RefGroupe)
               {
                echo  '<option value="'.$i.'" selected="selected">'.$i.'</option>';
                } 
            else 
                {
                echo '<option value="'.$i.'">'.$i.'</option>';
                }
            }
       }
</select>

J'ai l'impression que ça ne va pas... :? notamment pour la boucle.
Petit à petit, on devient moins petit... mais qu'est-ce qu'on vieillit!

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

19 août 2005, 12:01

la boucle est bonne, enfin le while, car le for est de trop

tu dis "je ne connais pas le nombre de valeur à l'avance"

c'est à ça que sert le while

- je récupère tous les groupes
- tant qu'il y en a j'en affiche un (le while)
- si celui que je traite en ce moment est le même que la valeur par défaut alors j'ajoute "selected"

ta valeur par défaut, tu la récupères dans ta requête 1
quand tu sélectionnes les infos d'une société tu dois bien pouvoir connaitre son identifiant de groupe non ?

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

19 août 2005, 12:19

Voici quelques corrections pour t'aider à avancer :
//Selection des champs dans les tables "societes" et "groupes": requete 1//
$requete="SELECT IdSociete, NomSociete, AutreNomSociete, NomGroupe, Specialite,
			s.Presentation, s.InfCompl, PaysOrigine, Adresse, Tel, Fax, SiteSociete,
			NomReprFr, AdresseReprFr, TelReprFr, FaxReprFr
			FROM societes s
			LEFT OUTER JOIN groupes g ON s.RefGroupe=g.IdGroupe
			WHERE IdSociete='".$IdSociete."'";

//Selection des champs dans la table groupe//
$requete2="SELECT * FROM groupes"; // --> on évite d'utiliser le SELECT *
    
//Fermeture de la base//
mysql_close($lien);
?>
<select name="RefGroupe">
<?php
$RefGroupe = ""; // cette valeur doit être récupérée grâce à la requête 1
while ($groupe = mysql_fetch_array($result2)) {          
	if ($groupe['id'] == $RefGroupe) {
		echo  '<option value="'.$groupe['id'].'" selected="selected">'.$groupe['nom'].'</option>';
	} else {
		echo '<option value="'.$groupe['id'].'">'.$groupe['nom'].'</option>';
	}
}
?>
</select>
Attention :
- il manque les mysql_query
- 'id' et 'nom' pour le groupe sont à remplacer par les bons noms de tes champs

Un petit article qui explique pourquoi éviter le SELECT * : http://frederic.bouchery.free.fr/?2004/ ... es-Etoiles

Invité
Invité n'ayant pas de compte PHPfrance

19 août 2005, 14:39

Il me replace encore sur le premier groupe des enregistrements et pas sur celui sélectionné.
Voici mon script après corrections (notamment pour la requete):
Nom du groupe :
<select name="RefGroupe">
<?php
//Connection à la base
$lien = mysql_connect("xx","xx","xx");
mysql_select_db("xx", $lien);

//Selection des champs dans la table groupe//
	$requete2="SELECT IdGroupe, NomGroupe, AutreNomGroupe, Presentation, InfCompl FROM groupes";

$RefGroupe = "";
	$result2=mysql_query($requete2);

		while ($groupe=mysql_fetch_array($result2))
	{
		    if ($groupe["IdGroupe"] == $RefGroupe)
               {
                echo  '<option value="'.$groupe['IdGroupe'].'" selected="selected">'.$groupe['NomGroupe'].'</option>';
                }
            else
                {
                echo '<option value="'.$groupe['IdGroupe'].'">'.$groupe['NomGroupe'].'</option>';
                }
        }
mysql_close($lien);
?>
</select>

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

19 août 2005, 14:54

normal, RefGroupe est initialisée à vide...

Eléphant du PHP | 179 Messages

19 août 2005, 14:59

](*,) Je dois mettre un selected?
Petit à petit, on devient moins petit... mais qu'est-ce qu'on vieillit!

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

19 août 2005, 15:03

mais non ! :)

reprend le problème il est simple :

d'un coté une liste de valeur
de l'autre une valeur A

on souhaite positionner la liste sur A

donc pour chaque valeur de la liste, on regarde si elle est égale à A
si Oui : on met selected

mais là, ta valeur A est vide
tu dois la remplir avec ta première requête, car elle doit contenir l'identifiant du groupe de la société choisie

Eléphant du PHP | 179 Messages

19 août 2005, 15:16

Je crois que je commence à comprendre. Pour moi, le selected signifiait: l'item sélectionné et non pas "sélectionne l'item". C'est pour ça que ça m'échappait.

L'élément que je veux dans ma première requête c'est le RefGroupe (et par conséquent le NomGroupe) mais je ne peux pas écrire $RefGroupe = "RefGroupe" ou $RefGroupe = "NomGroupe". #-o
Petit à petit, on devient moins petit... mais qu'est-ce qu'on vieillit!

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

19 août 2005, 15:22

moi je commence à ne plus rien comprendre de ce que tu comprends

1 - tu récupères les infos de la société choisie, dont l'identifiant du groupe (ID1) : disons 5

2 - tu récupères l'identifiant (ID2) et le nom de chacun de sgroupes qui existe

3 - tu les affiches tous, et tu compares à chaque fois l'identifiant (ID2) à celui du groupe de la société (ID1)

4 - si ce sont les mêmes : tu insères selected="selected", qui veut dire "c'est sur cette valeur que doit être positionnée la liste déroulante au chargement de la page dans le navigateur

Eléphant du PHP | 179 Messages

19 août 2005, 15:38

moi je commence à ne plus rien comprendre de ce que tu comprends
Il paraît qu'être pédagogue, c'est se mettre u niveau de son élève. Si tu tentes de te mettre au mien, tu riques d'avoir des surprises :lol:

1 - tu récupères les infos de la société choisie, dont l'identifiant du groupe (ID1) : disons 5
Si je ne me trompe pas, ça devrait correspondre à ça?
$RefGroupe = ""; 
2- tu récupères l'identifiant (ID2) et le nom de chacun de sgroupes qui existe
correspond à ça?
$requete2="SELECT IdGroupe, NomGroupe, AutreNomGroupe, Presentation, InfCompl FROM groupes";
3 - tu les affiches tous, et tu compares à chaque fois l'identifiant (ID2) à celui du groupe de la société (ID1)
est égal à ça?
 $result2=mysql_query($requete2);

        while ($groupe=mysql_fetch_array($result2))
    { 

4 - si ce sont les mêmes : tu insères selected="selected", qui veut dire "c'est sur cette valeur que doit être positionnée la liste déroulante au chargement de la page dans le navigateur
if ($groupe["IdGroupe"] == $RefGroupe)
               { 
 {
                echo  '<option value="'.$groupe['IdGroupe'].'" selected="selected">'.$groupe['NomGroupe'].'</option>';
                } 
Sinon il se place sur le premier par défaut? Comme ça?
 else
                {
                echo '<option value="'.$groupe['IdGroupe'].'">'.$groupe['NomGroupe'].'</option>';
                }
        } 
Petit à petit, on devient moins petit... mais qu'est-ce qu'on vieillit!

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

19 août 2005, 15:42

oui pour tout sauf pour le premier

si tu fais ça :
$RefGroupe = "";
$RefGroupe est donc vide donc tu n'auras aucune valeur qui correspondra dans ta liste, donc il se mettra sur le premier

$RefGroupe doit contenir :
l'identifiant du groupe auquel appartient la société que tu as choisie !
récupéré par la première requête, la grosse avec une jointure


Au boulot ! :ordi: ;)

Eléphant du PHP | 179 Messages

19 août 2005, 15:57

:shock: Oui oui ne vous énervez donc pas cher ouckileou, je voulais m'assurer que je faisais les bonnes correspondances entre ce que tu me disais et le code.

Je cherche une variable générale puisque l'identifiant du groupe peut être 0,1,2,etc. Cette variable dans ma table "societes" est $RefGroupe (c'est-à-dire l'identifiant du groupe auquel appartient une société qui correspond au champ RefGroupe). Mais je sens bien que ça n'est pas ça :oops:

C'est pourquoi j'ai écrit:

L'élément que je veux dans ma première requête c'est le RefGroupe (et par conséquent le NomGroupe) mais je ne peux pas écrire $RefGroupe = "RefGroupe"
Petit à petit, on devient moins petit... mais qu'est-ce qu'on vieillit!

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

19 août 2005, 16:05

mais non je ne m'énerve pas :)

donc si tu as un champ RefGroupe dans ta table société, et bien tu le sélectionnes dans ta requête

là je ne comprend pas le problème, tu sais pourtant bien récupérer des valeurs de la table dans des variables non ? mysql_result, mysql_fetch_array, mysql_fetch_row...etc

donc comme ça :
 $requete="SELECT IdSociete, NomSociete, RefGroupe
            LEFT OUTER JOIN groupes g ON s.RefGroupe=g.IdGroupe
            WHERE IdSociete='".$IdSociete."'";
$result = mysql_query($requete);

$RefGroupe = $result["RefGroupe"];
mais si tu as l'identifiant du groupe dans la table Sociétés, à quoi sert à la jointure ?

Eléphant du PHP | 179 Messages

19 août 2005, 16:20

A l'origine j'avais repris la requête initiale pour la changer par la requête avec jointure car je voulais optimiser mon script.

Finalement, il s'est avéré que j'étais tout de même obligée de faire une seconde requête pour afficher le groupe auquel appartient la société.

Finalement ça me donne un mixte:
<?php
//Récupération de l'identifiant de l'enregistrement//
$IdSociete = $_POST['IdSociete'];
?>

<!--Formulaire-->
<form action="b_societes_mod3.php" method="post">

<!--Champ caché à transmettre-->
<input type="hidden" name="IdSociete" value="<? echo $IdSociete; ?>">

<?php
//Connection à la base//
$lien = mysql_connect("xx","xx","xx");
mysql_select_db("xx", $lien);

//Selection des champs dans les tables "societes" et "groupes"//
	$requete="SELECT IdSociete, NomSociete, AutreNomSociete, NomGroupe, Specialite,
			s.Presentation, s.InfCompl, PaysOrigine, Adresse, Tel, Fax, SiteSociete,
			NomReprFr, AdresseReprFr, TelReprFr, FaxReprFr
			FROM societes s
			LEFT OUTER JOIN groupes g ON s.RefGroupe=g.IdGroupe
			WHERE IdSociete='".$IdSociete."'";

//Résultat de la requête
	$result=mysql_query($requete) or die(mysql_error());

$IdSociete = mysql_result($result,0,'IdSociete');
$NomSociete = mysql_result($result,0,'NomSociete');
$AutreNomSociete = mysql_result($result,0,'AutreNomSociete');
$NomGroupe = mysql_result($result,0,'NomGroupe');
$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');

//Fermeture de la base//
mysql_close($lien);
?>



<?php echo '<input type="text" name="NomSociete" size=60 value="'.$NomSociete.'">';?><br>

<?php echo '<input type="text" name="AutreNomSociete" size=60 value="'.$AutreNomSociete.'">';?><br>

Nom du groupe :
<select name="RefGroupe">
<?php
//Connection à la base
$lien = mysql_connect("xx","xx","xx");
mysql_select_db("xx", $lien);

//Selection des champs dans la table groupe//
	$requete2="SELECT IdGroupe, NomGroupe, AutreNomGroupe, Presentation, InfCompl FROM groupes";

$RefGroupe = " :?: ";
	$result2=mysql_query($requete2);

		while ($groupe=mysql_fetch_array($result2))
			{
		    if ($groupe["IdGroupe"] == $RefGroupe)
               {
                echo  '<option value="'.$groupe['IdGroupe'].'" selected="selected">'.$groupe['NomGroupe'].'</option>';
                }
            else
                {
                echo '<option value="'.$groupe['IdGroupe'].'">'.$groupe['NomGroupe'].'</option>';
                }
        }
mysql_close($lien);
?>
</select>



<textarea name="Presentation" rows="8" cols="45"><? echo $Presentation;?></textarea><br>


<textarea name="InfCompl" rows="8" cols="45"><? echo $InfCompl;?></textarea><br>

<?php echo '<input type="text" name="PaysOrigine" value="'.$PaysOrigine.'">';?><br>

<textarea name="Adresse" rows="8" cols="45"><? echo $Adresse;?></textarea>
<br>
<?php echo '<input type="text" name="Tel" value="'.$Tel.'">';?><br>

<?php echo '<input type="text" name="Fax" value="'.$Fax.'">';?><br>

<?php echo '<input type="text" name="SiteSociete" size=60 value="'.$SiteSociete.'">';?><br>

<?php echo '<input type="text" name="NomReprFr" size=60 value="'.$NomReprFr.'">';?><br>

<textarea name="AdresseReprFr" rows="8" cols="45"><? echo $AdresseReprFr;?></textarea><br>

<?php echo '<input type="text" name="TelReprFr" value="'.$TelReprFr.'">';?><br>

<?php echo '<input type="text" name="FaxReprFr" value="'.$FaxReprFr.'">';?><br>

<input type="submit" value="Modifier">
Il faut donc que je revienne à un simple SELECT sans jointure pour ma première requete puisque je n'ai plus besoin de la jointure (puisque je ne peux pas optimiser le tout en une seule requete)?
Petit à petit, on devient moins petit... mais qu'est-ce qu'on vieillit!

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

19 août 2005, 16:23

Tout dépend de ce que tu veux faire

Mais d'après ce que je comprend, tu peux faire deux requête simples

- une pour récupérer les infos de la société, dont le numéro de groupe
- une pour récupérer les infos de tous les groupes

sachant que le nom du groupe sera indiqué dans la liste

Tu pourrais faire une une seule requête avec jointure si tu voulais afficher une fiche société par exemple, avec directement le nom du groupe de celle-ci
Auquel cas il te faudrait donc récupérer le nom du groupe lié à l'identifiant du groupe de société