IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Problème moteur de recherche php avec base donnée Mysql [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 59
    Par défaut Problème moteur de recherche php avec base donnée Mysql
    Bonjour,
    Je suis actuellement en stage dans une entreprise et mon maître de stage ma demander de créer un moteur de recherche avec du php et une base MySQL derrière avec affichage des résultats sous forme de tableau. Après quelques jours de recherche et étant débutant en php, je viens m'adressez a vous.

    Voici le html de saisi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     <form method="GET" action="recherche.php" >
    <input type="text" name="critere"><br />
    <input type="submit" value="Recherche">
    </form>
    voici le php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    <?php
     
    $host = "localhost";
     
    $user = "root";
     
    $password = "";
     
    $bdd = "electromodel";
     
    $connexion = @ mysql_connect($host, $user,$password) or exit("Impossible de se connecter !") ;
    mysql_select_db($bdd) or die("erreur de connexion a la base de donnees");
     
     
    $query = "SELECT REFERENCE_PRODUIT,LIBELLE_PRODUIT,DESCRIPTION FROM produit
    	WHERE LIBELLE_PRODUIT LIKE \"%$_GET[critere]%\"
    	or DESCRIPTION LIKE \"%$_GET[critere]%\"";
     
    $result = mysql_query($query);
    echo"$query";
    if (!mysql_fetch_row($result)) {
    echo "Aucun enregitrement ne correspond\n";
     
    }
     
    else {
     
    	while($row = mysql_fetch_row($result)){
     
    $ref = $row[0];
     
    $lib = $row[1];
     
    $desc = $row[2];
     
    echo"
    <table border =1>
    <tr>
    	<td>"
    		.$ref.
    	"</td>
    	<td>"
    		.$lib.
    	"</td>
    	<td>"
    		.$desc.
    	"</td>
    	
    
    </tr>
    
    </table>";
     
     
    }
    }
    ?>
    Je vous mets le code tel quel car ces identifiants sont provisoires.^^

    Donc mon problème est que j'ai testé ma variable avec un echo elle passe bien du formulaire au php et rentre également dans la requete SQL mais le problème c'est que le php me fourni toujours un résultat de moins qu'il n'y en a dans la base de donnée.

    Exemple : si je mets la requete obtenu via un echo ,j'obtiens 4 résultats en la collant dans sql alors que le Php ne m'en retourne que 3 à l'écran!

    Merci d'avance!

  2. #2
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Je vois pas mal de problème d'écriture dans ta requête. En réalité, ce ne sont pas réellement des problèmes mais la lisibilité n'est pas terrible.
    De plus, le mysql_fetch_row() ça pue un peu ^^

    la construction du tableau dans le while() n'est également pas correct (à moins qu'il faille un tableau par résultat mais ça me semble étrange).

    Voici un truc un peu mieux écrit, dis-moi si ça change quelque chose.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    $query = "SELECT REFERENCE_PRODUIT,LIBELLE_PRODUIT,DESCRIPTION FROM produit
    		WHERE LIBELLE_PRODUIT LIKE '%".$_GET['critere']."%'
    		or DESCRIPTION LIKE '%".$_GET['critere']."%'";
     
     
    $result = mysql_query($query);
    if (mysql_num_rows($result) > 0) {
    	echo '<table>';
    	echo '<tr><th>Référence</th><th>Libellé</th><th>Description</th></tr>';
    	while ($r = mysql_fetch_assoc($result)) {
    		echo '<tr>';
    		echo '<td>'.$r['REFERENCE_PRODUIT'].'</td>';
    		echo '<td>'.$r['LIBELLE_PRODUIT'].'</td>';
    		echo '<td>'.$r['DESCRIPTION'].'</td>';
    		echo '</tr>';
    	}
    	echo '</table>';
    } else {
    	echo "<p>Aucun enregitrement ne correspond</p>";
    }

  3. #3
    Membre émérite

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 411
    Par défaut
    Niveau sécurité, à revoir... Sérieux des $_GET ou $_POST directement dans la requête, c'est du petit lait pour le hacker débutant.

    De plus, histoire de profiter de ton stage et d'impressionner (potentiellement) ton maître de stage, préfère l'utilisation de mysqli_* ou de la classe PDO à la place de mysql_* qui n'est plus maintenue depuis 6 ans !

  4. #4
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Citation Envoyé par Shikiryu Voir le message
    Niveau sécurité, à revoir... Sérieux des $_GET ou $_POST directement dans la requête, c'est du petit lait pour le hacker débutant.

    De plus, histoire de profiter de ton stage et d'impressionner (potentiellement) ton maître de stage, préfère l'utilisation de mysqli_* ou de la classe PDO à la place de mysql_* qui n'est plus maintenue depuis 6 ans !
    Je plussoie, même si ça répond pas à sa question

    pour la sécurité, faut entourer tes variables de mysql_real_escape_string()

    Une fois de plus, ça c'est pour mysql_* le mieux étant mysqli_* (faut juste rajouter des i partout ^^)

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 59
    Par défaut
    Seigneur ! C'est exactement ce que je voulais^^
    Comme je l'avais dis le php n'est pas mon fort l'ayant peu voir pas du tout étudier en cours .Je suis tomber sur les fesses quand mon maître de stage ma demander d'effectuer cette tache^^.

    J'ai plus qu'à étudier les fonctions utiliser et ça sera bon.
    Après pour la mise en forme du tableau je pense pouvoir gérer =D
    Encore merci!

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 59
    Par défaut
    Pour te répondre Shikiryu .
    Ce moteur de recherche sera surement utiliser pour un catalogue comptant environ 70 000 produits x) et qui sera gérer en local.^^

  7. #7
    Membre émérite

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 411
    Par défaut
    Citation Envoyé par hotwheals Voir le message
    Pour te répondre Shikiryu .
    Ce moteur de recherche sera surement utiliser pour un catalogue comptant environ 70 000 produits x) et qui sera gérer en local.^^
    C'est toi qui voit... Si produire un code déprécié et non sécurisé te satisfait (et satisfait ta boite), go for it.

    Mais je ne vois pas le rapport avec le nombre de produits par contre.

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 59
    Par défaut
    Je disais ca par rapport au fait que je suis vraiment débutant en développement web et que donc la mise en place du site( avec autant de produit ) ainsi que du moteur de recherche sont pour moi des tâche extrèmement difficile sachant que je n'ai encore jamais fait de site qu'il soit statique ou dynamique. La manipulation des bases de donnée ca passe mais franchement le développement web est pour moi une science des plus obscur Oo même si de nombreux tuto sont disponible pour moi rien ne vaut l'apprentissage a l'aide d'un prof ou autre .^^

    Edit:

    J'ai essayé le sqli_* mais ca engendrai beaucoup de problème et de modification donc j'ai continuer sur le code de base et ça donne ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    <?php
     
    $host = "localhost";
     
    $user = "root";
     
    $password = "";
     
    $bdd = "electromodel";
     
    $connexion = @ mysql_connect($host, $user,$password) or exit("Impossible de se connecter !") ;
    mysql_select_db($bdd) or die("erreur de connexion a la base de donnees");
    $crit=$_POST['critere'];
    $query = "SELECT * FROM produit
    		WHERE LIBELLE_PRODUIT LIKE '%".$crit."%'
    		or DESCRIPTION LIKE '%".$crit."%'";
     
     
    $result = mysql_query($query);
    if (mysql_num_rows($result) > 0) {
    	echo '<table BORDER=1 >';
    	echo '<tr><th>Image</th><th>Référence</th><th>Libellé</th><th>Prix TTC</th><th>Prix HT</th><th>Fiche</th><th>Image Détail</th><th>Description</th></tr>';
    	while ($r = mysql_fetch_assoc($result)) {
    		echo '<tr>';
    		echo '<td>'.$r['PETITE_IMAGE_SITE_ORIGINE'].'</td>';
    		echo '<td>'.$r['REFERENCE_PRODUIT'].'</td>';
    		echo '<td>'.$r['LIBELLE_PRODUIT'].'</td>';
    		echo '<td>'.$r['PRIX_TTC'].'</td>';
    		echo '<td>'.$r['PRIX_HT'].'</td>';
    		echo '<td>'.$r['FICHE PRODUIT'].'</td>';
    		echo '<td>'.$r['GRANDE_IMAGE_SITE_ORIGINE'].'</td>';
    		echo '<td>'.$r['DESCRIPTION'].'</td>';
    		echo '</tr>';
    	}
    	echo '</table>';
    } else {
    	echo "<p>Aucun enregitrement ne correspond</p>";
    }
    ?>
    Je l'ai montrer a mon maitre de stage qui ma dit de rajouter les image et les liens présent dans la base mais la encore j'ai pas réussi a le faire j'obtiens des erreurs . Si vous avez un tuto pour modifier (ou du moins afficher les image et les url bref la mise en page)ce genre de tableau parce que je pensais que ca se ferait aussi facilement qu'un simple mais il semblerait que non parce que j'arrive pas a me dépatouiller avec les guillemets et autre^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Oracle] Lier PHP avec base de données oracle
    Par cisgeek dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 15/05/2013, 10h10
  2. Réponses: 10
    Dernier message: 29/08/2011, 15h03
  3. [MySQL] probleme de replication de base donnée mysql avec php
    Par christclamard dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 28/02/2008, 20h42
  4. [MySQL] Galerie image PHP avec Base de Donnée
    Par choulaone dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 30/05/2007, 17h51
  5. Créer des pages dynamiques PHP avec base de données
    Par noobspower dans le forum Langage
    Réponses: 8
    Dernier message: 13/02/2007, 08h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo