Recherche dans base MySQL et affichage du résultat

Eléphanteau du PHP | 39 Messages

01 nov. 2010, 00:48

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") ; } ?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

01 nov. 2010, 01:25

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

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 39 Messages

01 nov. 2010, 01:47

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.'); } } ?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

01 nov. 2010, 02:19

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); ?

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 39 Messages

01 nov. 2010, 02:58

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.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

01 nov. 2010, 03:05

vi c'est normal ;)

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

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 39 Messages

01 nov. 2010, 03:35

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 :(

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

01 nov. 2010, 03:50

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

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 39 Messages

01 nov. 2010, 03:54

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';

Eléphanteau du PHP | 39 Messages

01 nov. 2010, 04:05

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>');
}
}
?>
Modifié en dernier par Meutledaron le 01 nov. 2010, 14:07, modifié 1 fois.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

01 nov. 2010, 10:33

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 ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 39 Messages

01 nov. 2010, 14:12

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.

Eléphanteau du PHP | 39 Messages

01 nov. 2010, 21:42

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

ViPHP
ViPHP | 5462 Messages

01 nov. 2010, 22:06

separe ton html de ton php ca sera plus clair deja

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

01 nov. 2010, 22:39

j'ajoute un peu de lecture sur les tables html => http://fr.selfhtml.org/html/tableaux/co ... tm#definir

@+
Il en faut peu pour être heureux ......