Recherche dans base MySQL et affichage du résultat

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 : Recherche dans base MySQL et affichage du résultat

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

par moogli » 04 nov. 2010, 02:07

heu de rien :-)

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

par Meutledaron » 04 nov. 2010, 01:48

Voila le script est tip top maintenant un grand merci a toi moogli pour ton implication, et aux autres qui ont participer.

=D>

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

par moogli » 04 nov. 2010, 01:18

voila comment faire :
<?php
$res = mysql_query($requete);
                if ( mysql_num_rows($res) !==0) {
                while ($data = mysql_fetch_object($res)) {
                    echo '<p>id : '.$data->prenom.' <br /> '.$data->nom.
                        ' <br /> '.$data->telfixe.
                            ' <br /> '.$data->telportable.' <br /> '.$data->email
                            .' <br /> '.$data->remarque.'</p>';
                }
}else {
echo 'pas de correspondance';
}
?>
S'il tu cherche le nom tu tombera sur tout les membres de la même famille.

pour like, par exemple : select champ from table where autrechamp like '%valeur%;

@+

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

par Meutledaron » 03 nov. 2010, 21:11

Sinon petite question a pars :
Dans ma requete
$requete = 'select nom, prenom, telfixe, telportable, email, remarque from membre where nom="'.mysql_real_escape_string( $MyVariable ).'" OR prenom="'.mysql_real_escape_string( $MyVariable ).'" or telfixe="'.mysql_real_escape_string( $MyVariable ).'" or telportable="'.mysql_real_escape_string( $MyVariable ).'" or email="'.mysql_real_escape_string( $MyVariable ).'" order by nom asc';
Comment je peux modifier ma requète pour que la recherche se porte sur une partie d'un champ, je m'explique quand j'enregistre les membres d'une meme famille ils ont le meme nom avec dans le champ prenom rene et jeanette par exemple et je voudrais que si quelqu'un recherche jeanette il tombe sur ce champ aussi.

J'ai vu qu'ul fallais utiliser "like" mais je ne sais pas comment le metre.

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

par Meutledaron » 03 nov. 2010, 11:25

j'ai testé ce code
 if (isset($_POST['recherche'])) {
            if (!empty($_POST['recherche'])|| ($_POST['recherche']==='0')){
                mysql_connect('localhost','root','yyRu2TKEvyYpzFLK');
                mysql_select_db('test');
                $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';
                echo '<pre>',$requete,'</pre>';
                $res = mysql_query($requete);
                echo '<p>Y ',  mysql_num_rows($res),' tuples</p>';
                while ($data = mysql_fetch_object($res)) {
                    echo '<p>id : '.$data->prenom.' <br /> '.$data->nom.
                        ' <br /> '.$data->telfixe.
                            ' <br /> '.$data->telportable.' <br /> '.$data->email
                            .' <br /> '.$data->remarque.'</p>';
                }
            }
        }
        ?>
        <form action="" method="post">
            <label for="recherche">Recherche ?</label><input type="text" name="recherche" /><br />
            <input type="submit" value="Search" />
        </form>
et ça fonctionne correctement, je trouve bien les infos que j'ai mis dans la table membre et ce au 1er essai.

essai sans ton code de "protection" voir ce que ça donne.
essai aussi juste avec le code ci dessus histoire d’être certain que cela fonctionne pour toi !

Pour php 3 je parle de la version, tu la trouve avec echo phpversion();.

@+
Je vien de tester le code j'ai donc :
Pour aucun enregistrement :
select nom, prenom, telfixe, telportable, email, remarque from membre
where nom="personne"
OR prenom="personne"
or telfixe="personne"
or telportable="personne"
or email="personne"
order by nom asc
Y tuples

Le résultat est le même pour 1 ou plusieurs personnes trouver.

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

par Meutledaron » 03 nov. 2010, 11:13

Alors le résultat du test avec :
<?php echo mysql_num_rows($req); ?> placer tout a la fin du script me retourne 0 quand personne n'est trouver.

Sinon ca me retourne le nombre de personne trouver.

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

par moogli » 03 nov. 2010, 03:17

@le barde : pourquoi doubler une variable ?

Ajoute un test sur le resultat de mysql_num_rows si == zero tu affiche le message qui va bien.

Chez 1&1 si tu veut utiliser php 5 il faut modifier les fichiers de .php a .php5

@+

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

par Meutledaron » 02 nov. 2010, 17:42

Je suis chez 1et1

Je vais essayer de passer la requète par variable.

Voila donc ma nouvelle requète :
$requete = 'select nom, prenom, telfixe, telportable, email, remarque from membre where nom="'.mysql_real_escape_string( $MyVariable ).'" OR prenom="'.mysql_real_escape_string( $MyVariable ).'" or telfixe="'.mysql_real_escape_string( $MyVariable ).'" or telportable="'.mysql_real_escape_string( $MyVariable ).'" or email="'.mysql_real_escape_string( $MyVariable ).'" order by nom asc';

La recherche se fais mais tjs ce problème : aucun message d'info quand la requete n'a retourner aucune resultat, sinon quand c'est vide, ou qu'il y a un ou plusiuers résultat ca fonctionne correctement.

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

par le barde » 02 nov. 2010, 16:53

Dans ta requête SQL :
$requete = 'select nom, prenom, telfixe, telportable, email, remarque from membre where nom="'.mysql_real_escape_string($_POST['recherche']).'" order by nom asc';
remplace $_POST['recherche'] par une variable déclarée avant pour éviter les quotes ' qui passent bizarrement d'une page à l'autre.
du genre :
$MyVariable = $_POST['recherche'];
$requete = 'select nom, prenom, telfixe, telportable, email, remarque from membre where nom="'.mysql_real_escape_string( $MyVariable ).'" order by nom asc';

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

par stealth35 » 02 nov. 2010, 14:55

J'utilise la version 4.4.9 de php

As-tu essayer de faire une recherche qui ne retourne aucun enregistrement ? moi ca ne me mets rien pas meme le message d'information.

Merci
pourquoi la 4.4.9 t'es chez quel hébergeur ?

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

par Meutledaron » 02 nov. 2010, 14:44

J'utilise la version 4.4.9 de php

As-tu essayer de faire une recherche qui ne retourne aucun enregistrement ? moi ca ne me mets rien pas meme le message d'information.

Merci

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

par moogli » 02 nov. 2010, 02:44

j'ai testé ce code
 if (isset($_POST['recherche'])) {
            if (!empty($_POST['recherche'])|| ($_POST['recherche']==='0')){
                mysql_connect('localhost','root','yyRu2TKEvyYpzFLK');
                mysql_select_db('test');
                $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';
                echo '<pre>',$requete,'</pre>';
                $res = mysql_query($requete);
                echo '<p>Y ',  mysql_num_rows($res),' tuples</p>';
                while ($data = mysql_fetch_object($res)) {
                    echo '<p>id : '.$data->prenom.' <br /> '.$data->nom.
                        ' <br /> '.$data->telfixe.
                            ' <br /> '.$data->telportable.' <br /> '.$data->email
                            .' <br /> '.$data->remarque.'</p>';
                }
            }
        }
        ?>
        <form action="" method="post">
            <label for="recherche">Recherche ?</label><input type="text" name="recherche" /><br />
            <input type="submit" value="Search" />
        </form>
et ça fonctionne correctement, je trouve bien les infos que j'ai mis dans la table membre et ce au 1er essai.

essai sans ton code de "protection" voir ce que ça donne.
essai aussi juste avec le code ci dessus histoire d’être certain que cela fonctionne pour toi !

Pour php 3 je parle de la version, tu la trouve avec echo phpversion();.

@+

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

par Meutledaron » 02 nov. 2010, 01:40

Alors je vais essaye de répondre a tout ça le plus précisement possible:

Deja le but de la chose, j'ai créer un site pour une association, il y a une partie membre avec un lien vers ma page de recherche pour que les membres puissent chercher les coordonnée d'une eprsonne en entrant son nom, prénom, numéro de téléphonne portable ou fixe ou son adresse email.

Donc pour éviter que nimporte qui puissent faire cette recherche j'ai sécuriser toutes les pages de la zone membre par ce script :
<?
require("../protec/passe/conf.php3");
$db_link = mysql_connect($sql_serveur,$sql_user,$sql_passwd);

// SELECTION DE L'ENREGISTREMENT CONTENANT L'ID EN COURS
$requete=mysql_db_query($sql_bdd,"select * from membre where id=\"$id\"",$db_link);

// SI L'ID N'EXISTE PAS
if(mysql_num_rows($requete)==0)
	{
	header("Location:$url_erreur");
	}
?>
qui est avant mon code pour rechercher les membres.

Ensuite la table membre est la suivante :
-- Structure de la table `membre`
-- 

CREATE TABLE `membre` (
  `id` int(11) NOT NULL auto_increment,
  `nom` varchar(30) collate latin1_german2_ci NOT NULL,
  `prenom` varchar(30) collate latin1_german2_ci NOT NULL,
  `email` varchar(90) collate latin1_german2_ci NOT NULL,
  `telfixe` varchar(15) collate latin1_german2_ci NOT NULL,
  `telportable` varchar(15) collate latin1_german2_ci NOT NULL,
  `remarque` text collate latin1_german2_ci NOT NULL,
  KEY `id` (`id`),
  FULLTEXT KEY `remarque` (`remarque`)
) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci AUTO_INCREMENT=10 ;


et pour finir un jeu de données minimal pour travailler :

Eh dsl je n'ai pas compris cette partie :x

Merci pour ton aide

PS: Je suis en php

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

par moogli » 02 nov. 2010, 01:32

çapart dans tous les sens ton truc la :

tu est en php 3 ?

si ton code de "sécurisation" est avant ça ne pose pas de problème pour $requete, par contre s'il utilise une variable $recherche ça peut poser problème (avec l'auto déclaration des variables).

avant d'aller plus loin montre nous
- le create table de la table membre
- un jeux de donnée minimal pour travailler.
- le but de la chose :)

faut reprendre les bases parce que je pige plus rien ;)

@+

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

par Meutledaron » 02 nov. 2010, 00:40

Ah ok alors
Pour une requete qui ne retourne rien (non vide)

MySQL n'a retourné aucun enregistrement. (traitement: 0.0010 sec.)
requête SQL:
SELECT nom, prenom, telfixe, telportable, email, remarque
FROM membre
WHERE nom = "jeanbon"
OR prenom = "jeanbon"
OR telfixe = "jeanbon"
OR telportable = "jeanbon"
OR email = "jeanbon"
ORDER BY nom ASC
LIMIT 0 , 30

Pour une requète qui a retourner 2 enregistrement
Affichage des enregistrements 0 - 1 (2 total, traitement: 0.0010 sec.)
requête SQL:
SELECT nom, prenom, telfixe, telportable, email, remarque
FROM membre
WHERE nom = "milbach"
OR prenom = "milbach"
OR telfixe = "milbach"
OR telportable = "milbach"
OR email = "milbach"
ORDER BY nom ASC
LIMIT 0 , 30

et pour une requète vide
J'ai directement mon message d'information qui apaprais sans exécuter la requète

Le problème se situe donc sur le message quand l'enregistrement n'a pas été trouver.

PS : Je ne comprend vraiment plus rien, mon formulaire fonctionne bien sauf que je n'ai pas le message "Aucune information trouver" quand la base ne retourne rien.

EDIT2: Je crois que je vien de trouver l'origine du problème !
Pour sécuriser mes pages je dois metre le petit code
<?
require("../protec/passe/conf.php3");
$db_link = mysql_connect($sql_serveur,$sql_user,$sql_passwd);

// SELECTION DE L'ENREGISTREMENT CONTENANT L'ID EN COURS
$requete=mysql_db_query($sql_bdd,"select * from membre where id=\"$id\"",$db_link);

// SI L'ID N'EXISTE PAS
if(mysql_num_rows($requete)==0)
	{
	header("Location:$url_erreur");
	}
?>
Es que ca ne serai pas ca qui fausserai les recherche j'ai pu voir que quelques variable sont identique.