Com. conditionnelles dans moteur rech PHP

Résolu/Fermé
Graig - 9 mai 2009 à 11:21
PhP Messages postés 1767 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 - 9 mai 2009 à 14:54
Bonjour,
J'ai développé un formulaire d'inscription en ligne (PHP lié à bd mysql) sur le site d'une manifestation sportive qu'organise notre association. Comme l'épreuve avait eu lieu l'an dernier, j'aimerais que les concurrents ayant déjà participé n'ait pas à renseigner les renseignements qu'ils ont donné l'an dernier (qui sont stockés dans un bd 2008).
Pour cela j'ai donc ajouté un nouveau formulaire leur demandant de saisir leur adresse mail pour les retrouver dans la bd 2008. Si la personne était inscrite l'an dernier, cela pré-remplit le formulaire d'inscrition et ils n'ont qu'à valider pour confirmer leur inscription pour cette année (inscription dans bd 2009). Cela fonctionne parfaitement si l'adresse mail n'est liée qu'à une personne.
Mais je peux faire face à 3 cas. Mon problème es le suivant :
1. l'adresse mail n'existe pas dans la bd -> j'aimerais mettre un texte disant que l'adresse n'a pas été trouvée
2. l'adresse existe et est reliée à une personne -> le formulaire est prérempli (cette fonction marche déjà)
3. l'adresse existe mais est liée à plusieurs personnes -> j'aimerais mettre un texte en listant les personnes concernées et en demandant de choisir laquelle inscrire
Je ne sais pas comment introduire les commandes conditionnelles pour gérer ces 3 cas.

Voici mon code source :
A. Formulaire de recherche (à partir du mail)
<form name="recherche" method="post" action="recherche.php">
<table width="500" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="225" align="right" class="txtTerre"><strong>saisissez votre adresse email :</strong></td>
<td width="225" align="left"><input name="search" type="text" size="35"/></td>
<td width="50" align="right"><input type="submit" name="chercher" value="OK"/></td>
</tr>
</table>
</form>

B. Page recherche.php
<?PHP
$db = mysql_connect('localhost', '****', '****');
mysql_select_db('inscriptions08',$db);
$recherche = $_POST['search'];
$sql = "SELECT * FROM inscriptions08 WHERE mail LIKE '$recherche'";
$req = mysql_query($sql) or die('Impossible de se connecter au serveur
'.$sql.'
'.mysql_error());
mysql_close();
while($data = mysql_fetch_array($req))
{
?>

<form name="insc" method="POST" action="confirmationHTML.php" class="txtTerre" onSubmit="return test();">
<table width="620" border="0" cellspacing="0">
<tr>
<td width="40"></td>
<td width="580"><img src="images/1.png" width="12" height="12" /> <strong><u>Complétez vos informations personnelles</u></strong>(* champs obligatoires)<p></td>
</tr>
<tr>
<td width="40"></td>
<td width="580">
<table width="555" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="150" height="30" align="justify" valign="middle"><div align="right">* Nom : </div></td>
<td width="25" height="30"> </td>
<td width="380" height="30" align="left" valign="middle"><input type="text" name="nom" size="45" maxlength="20" onChange="javascript:this.value=this.value.toUpperCase();" value="<?php echo $data['nom']; ?>"/></td>
</tr>
<tr>
<td width="150" height="30" align="justify" valign="middle"><div align="right">* Prénom : </div></td>
<td width="25" height="30"> </td>
<td width="380" height="30" align="left" valign="middle"><input type="text" name="prenom" size="45" maxlength="25" onChange="javascript:this.value=this.value.toUpperCase();" value="<?php echo $data['prenom']; ?>"/></td>
</tr>
..................... ainsi de suite pour les autres champs du formulaire ...................................
<?php
}
?>

Ce code ne fonctionne correctement que dans le cas 2 (une adresse a été trouvée pour une personne).
Comment ajouter les conditions pour les deux autres cas (aucun résultat trouvé ou choix entre plusieurs résultats)

Par avnce merci infiniment de votre temps
Cordialement
A voir également:

6 réponses

PhP Messages postés 1767 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
9 mai 2009 à 11:48
Bjr

ben lorsque pour une même adresse e-mail tu trouves plusieurs noms (déjà normalement on évite ce genre de cas de figure mais bon ...) tu peux les afficher dans une liste déroulante. Lorsque l'utilisateur sélectionne son nom dans la liste tous les champs du formulaire sont mis à jour.
C'est propre élégant mais (ben vi y'a toujours un "mais" lol) ça nécessite des stocker tous les enregistrements lu depuis la base de données dans des tables/des objtes JS. De plus il faut gérer le cas ou la personne remplie tout son formulaire mais sélectionne son nom dans la liste seulement après ...

Sinon tu peux passer par une page intermédiaire en affichant la liste des personnes trouvées sous la forme de liens : quand on clique sur le lien on retombe alors sur le formulaire prérempli mais cette fois-ci ta requête se base sur le nom ou mieux l'identifiant unique de ta table inscriptions08
0
Merci de votre réponse rapide.
Au départ j'avais opté pour une requete par nom+prenom+année de naissance (ce qui m'aurait effectivement éviter la possibilité de réponses multiples) mais j'ai trouvé que c'était fastidieux tant pour moi que pour celui qui saisit les infos.
Je suis en train de bidouiller qq chose avec des if($nb_resultats != 0)... else if($nb_resultats == 1)... esle en ayant rajouté une variable $nb_resultats = mysql_num_rows($query);
Est-ce que cela vous semble correct ?
0
PhP Messages postés 1767 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
9 mai 2009 à 12:33
Oui c'est bien de cette manière qu'il faut procéder pour déterminer le nombre d'inscrits pour une même adresse email donnée

En fonction du résultat tu peux rediriger l'internaute vers telle ou telle page ou faire un include différent en PHP ce qui est mieux.

Maintenant tout dépend de la solution que tu as retenu pour gèrer le cas des "possibilités multiples"

Personnellement, je me mets à la place de l'internaute et moins il y'a d'étapes donc de pages différentes qui s'affichent et mieux c'est.
0
Je suis bien d'accord avec vous !
En fait j'aimerais faire :
Etape 1 :
saisie de l'adresse mail
Etape 2 :
si 0 résultat -> "Aucun résultat trouvé. Veuilez compléter le formulaire ci-dessous ou revenir en arrière pour saisir une autre adresse"
si 1 ou plusieurs résultats -> "Nous avons trouvé ... résultat(s) + liste des résultats sous la forme d'un formulaire avec bouton radio
-si 1 : un seul nom/prénom affiché avec bouton checked + bouton submit "continuer" vers étape 3
-si plusieurs : liste des nom/prénom avec invitation à sélectionner le bon par bouton radio + bouton submit "continuer" vers étape 3)
Etape 3 :
Formulaire prérempli il n'y a plaus qu'à confrmer l'inscription

Je pense avoir trouvé le fonctionnement de la fonction if... esle mais j'ai un problème maintenant pour définir les propriétés des boutons radio.
Voila le code que j'ai trouvé:

<?
if(isset($_POST['search']) && $_POST['search'] != NULL)
{
mysql_connect('localhost','****','****');
mysql_select_db('inscriptions08');
$search = htmlspecialchars($_POST['search']);
$query = mysql_query("SELECT * FROM inscriptions08 WHERE mail LIKE '$search'") or die (mysql_error()); $nb_resultats = mysql_num_rows($query);
if($nb_resultats != 0)
{
?>
<p>Nous avons trouvé
<? echo $nb_resultats;
if($nb_resultats > 1) { echo 'résultats.<br/>Sélectionnez la personne que vous voulez inscrire ci-dessous :'; } else { echo 'résultat.'; }
?>
<br/>
<?
while($data = mysql_fetch_array($query))
{
?>

<table align="center" width="400" border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="txtTerre"><a href="recherche2.php?id=<? echo $data['id']; ?>"><input type="radio" name="???" value="???" id="???" /><label for="masc"><? echo $data['nom']; ?> <? echo $data['prenom']; ?></label></a></td>
</tr>
</table>

<?
}
?>

<br/>
<br/>
Si votre nom ne figure ci-dessus, merci de compléter le formulaire ci-dessous.</p>
<?
}
else
{
?>
<p>Nous n'avons trouvé aucun résultat avec l’adresse mail "<? echo $_POST['search']; ?>".<br/>Merci de compléter le formulaire ci-dessous ou de revenir en arrière pour modifier l’adresse mail.</p>
<?
}
mysql_close();
}
else
{
?>
....................................formulaire vierge...................................
<?
}
?>
0
PhP Messages postés 1767 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
9 mai 2009 à 13:28
Dans tes boutons radio tu peux toujours écrire

<input type="radio" name="membre_id" value="<?php echo $data['id']; ?>" id="membre_id" />

Mais ca ne sert pas à grand chose ici dans la mesure ou tes liens bypassent les boutons radio et le formulaire (dans lequel les boutons radio sont censés se trouver n'est-ce pas ?) en renvoyant l'utilisateur vers la page recherche2.php dès qu'il fait son choix.
Si tu veux que l'utilisateur sélectionne d'abord un bouton radio et qu'ensuite il fasse le submit tu dois supprimer les liens.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
J'ai bien avancé grace à vos conseils.
Reste un petit écueil...
A l'étape 2 lorsque plusieurs résultats s'affichent avec le code tel que je l'ai écrit je n'arrive pas à sélectionner entre les différents noms. Il sélectionne toujours le premier.

<form action="recherche2.php" name="form" method="post">
<table align="center" width="400" border="0" cellspacing="0" cellpadding="0">
<?
while($data = mysql_fetch_array($query))
{
?>
<tr>
<td class="txtTerre" align="center"><input type="radio" name="id" value="<?php echo $data['id']; ?>" id="id" /><label for="id"><? echo $data['nom']; ?> <? echo $data['prenom']; ?></label></a></td>
</tr>
<?
}
?>
<tr>
<td align="center" height="50"><input type="submit" value="Continuer"/></td>
</tr>
</table>
</form>

Sinon le reste fonctionne jusqu'à l'étape finale.
Merci encore de votre aide
0
PhP Messages postés 1767 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
9 mai 2009 à 14:37
je n'arrive pas à sélectionner entre les différents noms. Il sélectionne toujours le premier.

Sélectionner quoi ? Je ne comprends pas ... C'est l'utilisateur qui sélectionne non ?
0
Graig > PhP Messages postés 1767 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009
9 mai 2009 à 14:48
oui c'est l'utilisateur qui selectionne dans la liste des résultats trouvés mais avec la fonction <label> telle que je l'avais écrite si je cliquais sur n'importe quel nom/prenom proposé cela cochait le bouton de la première ligne.
En revanche les boutons eux fonctionnaient idépendemment.
J'ai donc enlevé la fonction label pour obliger l'utilisateur à cocher le bouton et tout fonctionne à merveille (j'ai été un peu fénéant je n'ai pas voulu chercher plus loin comment faire fonctionner le <label> sur toutes les lignes...).
Mille merci pour votre aide
Cordialement
Graig
0
Ce n'est pas bien grave c'est le <label> qui ne fonctionne pas mais les boutons eux fonctionnent parfaitement.
Voici donc le code tel qu'il fonctionne pour ceux qui chercheraient et qui voudraient préserver leurs cheveux...

Etape 1 : Formulaire de recherche (HTML)
<form name="recherche" method="post" action="recherche.php">
<table width="500" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="225" align="left"><input name="search" type="text" size="35"/></td>
<td width="50" align="right"><input type="submit" name="chercher" value="OK"/></td>
</tr>
</table>
</form>

Etape 2 : Traitement de la recherche (PHP)
<?php
if(isset($_POST['search']) && $_POST['search'] != NULL)
{
mysql_connect('localhost','****','****');
mysql_select_db('base_donnee');
$search = htmlspecialchars($_POST['search']);
$query = mysql_query("SELECT * FROM base_donnee WHERE mail LIKE '$search'") or die (mysql_error());
$nb_resultats = mysql_num_rows($query);
if($nb_resultats != 0)
{
?>
<p class="txtTerre" align="center"><strong>Nous avons trouvé
<? echo $nb_resultats;
if($nb_resultats > 1) { echo " résultats.<br/>Sélectionnez la personne que vous voulez inscrire ci-dessous :</strong>"; } else { echo " résultat.</strong>"; }
?>

<form action="recherche2.php" name="form" method="post">
<table align="center" width="400" border="0" cellspacing="0" cellpadding="0">
<?
while($data = mysql_fetch_array($query))
{
?>
<tr>
<td class="txtTerre" align="center"><input type="radio" name="id" value="<?php echo $data['id']; ?>" id="id" /><? echo $data['nom']; ?> <? echo $data['prenom']; ?></td>
</tr>
<?
}
?>
<tr>
<td align="center" height="50"><input type="submit" value="Continuer"/></td>
</tr>
</table>
</form>

<p class="txtTerre" align="center"><strong><em>Si votre nom ne figure pas dans la liste, merci de compléter le formulaire ci-dessous.</em></strong></p>
<br />
<?
}
else
{
?>
<p class="txtTerre" align="center"><strong>Aucun résultat trouvé avec l’adresse mail "<? echo $_POST['search']; ?>".</strong></p>
<p class="txtTerre" align="center"><strong><em>Merci de compléter le formulaire ci-dessous ou de revenir en arrière pour modifier l’adresse mail.</em></strong></p>
<br />
<?
}
mysql_close();
}
?>

L'étape 3 est l'affichage classique du résultat sélectionné suivant la mise en forme que vous voulez.

Un immense merci à PHP pour son aide au combien précieuse et son expertise.
Cordialement
0
PhP Messages postés 1767 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
9 mai 2009 à 14:54
Merci ;-)

Ah oui le label je me demandais bien à quoi il pouvait servir ....

http://fr.selfhtml.org/html/formulaires/structurer.htm

Pas sûr qu'on puisse l'utiliser avec les boutons radio lol
0