Affichage d'un formulaire de modification

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Affichage d'un formulaire de modification

par ouckileou » 22 août 2005, 09:01

- il manque juste le FROM de la première requête
- les deux requêtes me semblent bonnes, comme ça ça devrait marcher

par Elisa » 19 août 2005, 16:54

Oui c'est ce que j'ai fait à l'origine. Je vais remodifier mon script pour avoir:
1. Requête pour afficher toutes les informations sur la société
2. Requête pour afficher le nom du groupe auquel appartient la société (que je peux modifier car il se présente sous forme de liste déroulante).

J'ai donc une nouvelle requête:
$requete="SELECT IdSociete, NomSociete, AutreNomSociete, RefGroupe, Specialite,
			Presentation, InfCompl, PaysOrigine, Adresse, Tel, Fax, SiteSociete,
			NomReprFr, AdresseReprFr, TelReprFr, FaxReprFr
			WHERE IdSociete='".$IdSociete."'";
Elle ne fonctionne pas:
Erreur de syntaxe près de 'WHERE IdSociete='3'' à la ligne 4
lignes 1 à 4 =>
 <?php
//Récupération de l'identifiant de l'enregistrement//
$IdSociete = $_POST['IdSociete'];
?>

Et une seconde requête différente qui rassemble les informations qui concernent le groupe rattaché par IdGroupe == RefGroupe: je n'ai donc plus besoin de faire référence à ma première requête?
<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";
$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>

par ouckileou » 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é

par Elisa » 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)?

par ouckileou » 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 ?

par Elisa » 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"

par ouckileou » 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: ;)

par Elisa » 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>';
                }
        } 

par ouckileou » 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

par Elisa » 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

par ouckileou » 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

par Elisa » 19 août 2005, 14:59

](*,) Je dois mettre un selected?

par ouckileou » 19 août 2005, 14:54

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

par Invité » 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>

par ouckileou » 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