Page 1 sur 3

Recherche dans base MySQL et affichage du résultat

Posté : 01 nov. 2010, 00:48
par Meutledaron
Salut a tous,
J'ai fais un petit formulaire pour rechercher un membre dans ma base de données, cela fonctionne très bien sauf quelques petit soucis ...
QUe le membre existe ou pas j'ai quand meme le tableau qui s'affiche, or j'aimerai que si la personne n'a rien ecris dans le formulaire de recherche cela mete un message d'information, et que si personne n'est trouver un message aparaisse aussi. Voici mon code qui est appeler en spécifiant juste la variable : $recherche (qui est le nom de la personne qui est rechercher)

Code : Tout sélectionner

<?php include('connexion.php'); $sql = "SELECT * FROM membre where nom='$recherche' ORDER BY nom ASC"; //exécution de la requête: $requete = mysql_query( $sql ) ; $result = mysql_query($query); while( $result = mysql_fetch_object( $requete ) ) { echo("<table border=\"1\" width=\"714\"> <tr> <td width=\"704\"> <table border=\"0\" width=\"712\"> <tr> <td width=\"164\"> <p><b>Nom:</b></p> </td> <td width=\"538\"><font color=\"blue\">".$result->nom."</font></td> </tr> <tr> <td width=\"164\" height=\"24\"> <p><b>Prénom:</b></p> </td> <td width=\"538\" height=\"24\"><font color=\"blue\">".$result->prenom."</font></td> </tr> <tr> <td width=\"164\" height=\"27\"> <p><b>Téléphonne fixe :</b></p> </td> <td width=\"538\" height=\"27\"><font color=\"blue\">".$result->telfixe."</font></td> </tr> <tr> <td width=\"164\" height=\"27\"> <p><b>Téléphonne portable :</b></p> </td> <td width=\"538\" height=\"27\"><font color=\"blue\">".$result->telportable."</font></td> </tr> <tr> <td width=\"164\" height=\"27\"> <p><b>Adresse email :</b></p> </td> <td width=\"538\" height=\"27\"><font color=\"blue\">".$result->email."</font></td> </tr> <tr> <td width=\"164\" height=\"27\"> <p><b>Remarque :</b></p> </td> <td width=\"538\" height=\"27\"><font color=\"blue\">".$result->remarque."</font></td> </tr> </table> </td> </tr> </table><br> \n") ; } ?>

Re: Recherche dans base MySQL et affichage du résultat

Posté : 01 nov. 2010, 01:25
par moogli
salut,

[quote]
$sql = "SELECT * FROM membre where nom='$recherche' ORDER BY nom ASC";
//exécution de la requête:
$requete = mysql_query( $sql ) ;
$result = mysql_query($query);
[/quote]

Tu utilise $recherche, mais elle sort d'ou cette variable ? si c'est du formulaire il est préférable d'utilise $_POST['recherche'] ou $_GET['recherche'] suivant la méthode du formulaire.
Pourquoi ? parce que c'est la façon de faire par défaut des dernières version de php (V5 et suivante) et que tu est sur que cela fonctionne en V4. C'est aussi éviter une source d'ennui, car si tu a recherche dans l'url et dans le formulaire sais tu lequel tu va avoir ? (oui si tu connais regarde le bon paramètre du php.ini ^^).

Donc tu utilise cette variable si elle existe ce n'est pas bon.
ensuite il y a deux mysql_query(), a vue de nez le second retourne une erreur ? (ou affiche les erreurs).

comment résoudre ton problème ?

tu test si la valeur existe puis si elle est pas vide, ensuite tu créer la requete et l'execute.
par exemple
[php]
<?php
//inclusion de tous ce que tu veut d'utilise pour la connection au sgbd (mysql ici)
if (isset($_POST['recherche'])) {
// le formulaire a bien été posté
if (!empty($_POST['recherche'])|| ($_POST['recherche']==='0')){
//le est remplit (pourquoi le test sur zéro ? parce qu'il est considéré comme false
//ici on créer la requete SQl en utilisant $_POST['recherche'] et non recherche, on profite pour utiliser mysql_real_escpe_string pour éviter les injectionsSQL
$requete = 'select nom, prenom,telfixe,telportable,email,remarque from membre where nom="'.mysql_real_escape_string($_POST['recherche']).'" order by nom asc';
$req = mysql_query($requete);
if ($ret === false) {
echo 'erreur SQL : '.mysql_error().'<br />'.$requete.'<br />';
}
else {
//ok on traite la requête suivant le nombre de résultat
if (mysql_num_rows($ret)!=0){
//affichage du table avec les infos trouvées
}
else {
// affichage du message indiquant que l'on a pas trouvé decorrespondance.
}
}
}
else {
// message pour $_POST['recherche'] vidé CaD formulaire valider champ vide
}
}
?>
[/php]

ce type de permet de réaliser ce que tu souhaite "simplement".

Pour plus d'info sur les fonctions utiliser => http://www.php.net

@+

Re: Recherche dans base MySQL et affichage du résultat

Posté : 01 nov. 2010, 01:47
par Meutledaron
Merci pour ta réponse,
Le problème maintenant c'est que meme si je mets un nom qui est dans la base Mysql j'ai le message : Aucune correspondance trouver.

Voici ton code que j'ai completer :

Code : Tout sélectionner

<?php //inclusion de tous ce que tu veut d'utilise pour la connection au sgbd (mysql ici) include('connexion.php'); if (isset($_POST['recherche'])) { // le formulaire a bien été posté if (!empty($_POST['recherche'])|| ($_POST['recherche']==='0')){ //le est remplit (pourquoi le test sur zéro ? parce qu'il est considéré comme false //ici on créer la requete SQl en utilisant $_POST['recherche'] et non recherche, on profite pour utiliser mysql_real_escpe_string pour éviter les injectionsSQL $requete = 'select nom, prenom, telfixe, telportable, email, remarque from membre where nom="'.mysql_real_escape_string($_POST['recherche']).'" order by nom asc'; $req = mysql_query($requete); if ($ret === false) { echo 'erreur SQL : '.mysql_error().'<br />'.$requete.'<br />'; } else { //ok on traite la requête suivant le nombre de résultat if (mysql_num_rows($ret)!=0){ echo("<table border=\"1\" width=\"714\"> <tr> <td width=\"704\"> <table border=\"0\" width=\"712\"> <tr> <td width=\"164\"> <p><b>Nom:</b></p> </td> <td width=\"538\"><font color=\"blue\">".$result->nom."</font></td> </tr> <tr> <td width=\"164\" height=\"24\"> <p><b>Prénom:</b></p> </td> <td width=\"538\" height=\"24\"><font color=\"blue\">".$result->prenom."</font></td> </tr> <tr> <td width=\"164\" height=\"27\"> <p><b>Téléphonne fixe :</b></p> </td> <td width=\"538\" height=\"27\"><font color=\"blue\">".$result->telfixe."</font></td> </tr> <tr> <td width=\"164\" height=\"27\"> <p><b>Téléphonne portable :</b></p> </td> <td width=\"538\" height=\"27\"><font color=\"blue\">".$result->telportable."</font></td> </tr> <tr> <td width=\"164\" height=\"27\"> <p><b>Adresse email :</b></p> </td> <td width=\"538\" height=\"27\"><font color=\"blue\">".$result->email."</font></td> </tr> <tr> <td width=\"164\" height=\"27\"> <p><b>Remarque :</b></p> </td> <td width=\"538\" height=\"27\"><font color=\"blue\">".$result->remarque."</font></td> </tr> </table> </td> </tr> </table><br> \n") ; } else { // affichage du message indiquant que l'on a pas trouvé decorrespondance. echo('Aucune correspondance trouver.'); } } } else { // message pour $_POST['recherche'] vidé CaD formulaire valider champ vide echo('Merci de saisir un nom avant de lancer la recherche.'); } } ?>

Re: Recherche dans base MySQL et affichage du résultat

Posté : 01 nov. 2010, 02:19
par moogli
hum ligne 10 et 17 c'est $req et pas $ret

et au vu de tes rajouts tu ne pense pas qu'il manque un $result = mysql_fetch_object($req); ?

@+

Re: Recherche dans base MySQL et affichage du résultat

Posté : 01 nov. 2010, 02:58
par Meutledaron
Merci moogli ca marche a présent :)

Je suis novice dnas le domaine du php, je découvre petit a petit.

Hum je vien de voir que si j'ai plusieurs enregistrement contenant le même nom je n'ai que le premier qui s'affiche.

Re: Recherche dans base MySQL et affichage du résultat

Posté : 01 nov. 2010, 03:05
par moogli
vi c'est normal ;)

un tutoqui t'explique ce qu'il te manque http://phpdebutant.org/article66.php

@+

Re: Recherche dans base MySQL et affichage du résultat

Posté : 01 nov. 2010, 03:35
par Meutledaron
D'après ce que j'ai compris du tuto il faut que je mete :

while($result = mysql_fetch_array($req))

Je l'ai donc placer a la place de mon
$result = mysql_fetch_array($req)

Mais ca me donne un formulaire vide :(

Re: Recherche dans base MySQL et affichage du résultat

Posté : 01 nov. 2010, 03:50
par moogli
mysql_fetch_object, parce qu'en suite tu utilise la notation objet (avec les ->).

n'oublie pas les{} autour du tableau,et aussi de déclarer le tableau une seul fois avant le while

@+

Re: Recherche dans base MySQL et affichage du résultat

Posté : 01 nov. 2010, 03:54
par Meutledaron
Je te remercie 1000X mooglie =D>

Ca marche a merveille j'ai meme améliorer le tableau pour que les adresse email soit directement sous forme de lien et pour effectuer une recherche plus complète sur le nom, prenom etc

ce qui donne :

$requete = 'select nom, prenom, telfixe, telportable, email, remarque from membre where nom="'.mysql_real_escape_string($_POST['recherche']).'" OR prenom="'.mysql_real_escape_string($_POST['recherche']).'" or telfixe="'.mysql_real_escape_string($_POST['recherche']).'" or telportable="'.mysql_real_escape_string($_POST['recherche']).'" or email="'.mysql_real_escape_string($_POST['recherche']).'" order by nom asc';

Re: Recherche dans base MySQL et affichage du résultat

Posté : 01 nov. 2010, 04:05
par Meutledaron
Ra j'ai la poisse...
J'ai des résultat que quand j'actualise ma page sinon rien :'(
<?php
include('connexion.php');
if (isset($_POST['recherche'])) {
if (!empty($_POST['recherche'])|| ($_POST['recherche']==='0')){
$requete = 'select nom, prenom, telfixe, telportable, email, remarque from membre where nom="'.mysql_real_escape_string($_POST['recherche']).'" OR prenom="'.mysql_real_escape_string($_POST['recherche']).'" or telfixe="'.mysql_real_escape_string($_POST['recherche']).'" or telportable="'.mysql_real_escape_string($_POST['recherche']).'" or email="'.mysql_real_escape_string($_POST['recherche']).'" order by nom asc';
$req = mysql_query($requete);
if ($req === false) {
echo 'erreur SQL : '.mysql_error().'<br />'.$requete.'<br />';
}
else { 
while($result = mysql_fetch_object($req))
if (mysql_num_rows($req)!=0){
echo("<table border=\"1\" width=\"714\">
    <tr>
        <td width=\"704\">
            <table border=\"0\" width=\"712\">
                <tr>
                    <td width=\"164\">

                        <p><b>Nom:</b></p>
                    </td>
                    <td width=\"538\"><font color=\"blue\">".$result->nom."</font></td>
                </tr>
                <tr>
                    <td width=\"164\" height=\"24\">
                        <p><b>Prénom:</b></p>
                    </td>
                    <td width=\"538\" height=\"24\"><font color=\"blue\">".$result->prenom."</font></td>
                </tr>
                <tr>
                    <td width=\"164\" height=\"27\">
                        <p><b>Téléphonne fixe :</b></p>
                    </td>
                    <td width=\"538\" height=\"27\"><font color=\"blue\">".$result->telfixe."</font></td>
                </tr>
                <tr>
                    <td width=\"164\" height=\"27\">
                        <p><b>Téléphonne portable :</b></p>
                    </td>
                    <td width=\"538\" height=\"27\"><font color=\"blue\">".$result->telportable."</font></td>
                </tr>
                <tr>
                    <td width=\"164\" height=\"27\">
                        <p><b>Adresse email :</b></p>
                    </td>
                    <td width=\"538\" height=\"27\"><font color=\"blue\"><a href=\"mailto:".$result->email."\">".$result->email."</a></font></td>
                </tr>
                <tr>
                    <td width=\"164\" height=\"27\">
                        <p><b>Remarque :</b></p>
                    </td>
                    <td width=\"538\" height=\"27\"><font color=\"blue\">".$result->remarque."</font></td>
                </tr>
            </table>
        </td>
    </tr>
</table><br> \n") ;
}
else {
echo('<br><br><br><center><b><font color="blue">Votre recherche pour "'); echo($recherche); echo('" n\'a retourner aucun résultat.</font><br><a href="javascript:window.history.go(-1);">Revenir a la page de recherche</a>');
}
}
}
else {
echo('<br><br><br><center><b><font color="blue">Merci de saisir un nom, un prénom, un numéro de téléphonne ou une adresse email avant de lancer la recherche.</font><br><a href="javascript:window.history.go(-1);">Revenir a la page de recherche</a>');
}
}
?>

Re: Recherche dans base MySQL et affichage du résultat

Posté : 01 nov. 2010, 10:33
par Ryle
Peux tu utiliser les balises [ php ] lorsque tu postes du code php ? La coloration syntaxique rend le code plus facile à lire :)

Sinon concernant ton problème, si tu n'as pas les données lors de ton premier appel à la page mais uniquement lors du second, ne serait-ce pas tout simplement du au fait que tu n'exécutes ta requête que lorsque $_POST['recherche'] est défini, et que lorsque tu accèdes à ta page pour la première fois, $_POST ne contient rien ?

Re: Recherche dans base MySQL et affichage du résultat

Posté : 01 nov. 2010, 14:12
par Meutledaron
Salut Ryle,

Je vien d'éditer mon poste au dessus pour utiliser les balises php. En effet c'est mieux lol

Sinon la variable $recherche contien bien ce que je recherche

J'ai placer a la fin de mon code : <?php echo $recherche; ?> et il me retourne ce que j'ai demander j'ai aussi essayer avec <?php echo $_POST['recherche']; ?> et pareil il me retourne mon mot clé.

PS : je vien de voir que je dois avoir un problème au niveau des variables parsque je dois faire une recherche sur un mot qui n'existe pas, ou une recherche avec "$recherche" vide pour qu'a ma prochaine recherche ca fonctionne.

Re: Recherche dans base MySQL et affichage du résultat

Posté : 01 nov. 2010, 21:42
par Meutledaron
mysql_fetch_object, parce qu'en suite tu utilise la notation objet (avec les ->).

n'oublie pas les{} autour du tableau,et aussi de déclarer le tableau une seul fois avant le while

@+
Je ne sais pas comment faire pour déclarer le tableau avant le while *-* a tu une piste stp ?
merci

Re: Recherche dans base MySQL et affichage du résultat

Posté : 01 nov. 2010, 22:06
par stealth35
separe ton html de ton php ca sera plus clair deja

Re: Recherche dans base MySQL et affichage du résultat

Posté : 01 nov. 2010, 22:39
par moogli
j'ajoute un peu de lecture sur les tables html => http://fr.selfhtml.org/html/tableaux/co ... tm#definir

@+