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 :

Like dans requête Mysql


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2012
    Messages : 164
    Par défaut Like dans requête Mysql
    Bonsoir,

    J'arrive bientôt (enfin) à la fin de mon site que je n'aurais jamais réalisé sans votre aide. Il me reste un tout petit truc à faire, pas si petit que ça : Une recherche :

    J'ai donc crée le formulaire de Recherche

    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
    <form method="post" action="traitement_recherche.php">
       <p class="titre">Sélectionner les activités de votre choix</p>
     
    <?php
    $reponse = $bdd->query('SELECT * FROM activite'); 
    while ($donnees = $reponse->fetch())
    {
    ?>
        <input type="checkbox" name="ract[]" id="ract" value="<?php echo $donnees['nom_act'];?>"/> <label for="ract"><?php echo $donnees['nom_act'];?></label><br />
       </p>
     
    <?php
    }
    $reponse->closeCursor();
    ?>
     
    <p class="titre"><label for="optliv">Souhaitez-vous vous faire livrer ?</label></p>
    <select name="optliv" id="optliv" selected="v">
    <p><option value="v">--</option></p>
    <p><option value="oui">Oui</option></p>
    <p><option value="non">Non</option></p>
    </select>    
     
    <p class="titre"><label for "optemp">Souhaitez-vous prendre un plat à emporter ?</label></p>
    <select name="optemp" id="optempt selected="v">
    <p><option value="v">--</option></p>
    <p><option value="oui">Oui</option></p>
    <p><option value="non">Non</option></p>
    </select>
    	<p><input class="submit" type="submit" value="Valider ma recherche" /></p>
     
    </form>
    Voici le résultat côté PHP avec un petit ECHO pour vérifier que les valeurs sont bien renvoyées et ça fonctionne :

    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
     
    <h3>Voici le résultat de votre recherche :</h3>
    <?php
     
    //traitement des variables retournées par le formulaire recherche
     
    	//Traitement des cases à cochées
    	if(isset($_POST['ract']))
    	{ //sera vrai si au moins un moins un checkbox est coché
     
    		foreach($_POST['ract'] as $act)
    		{
    		echo $act; 
    		}
    	}
     
    //traitement des données par liste
    echo $_POST['optliv'];
    echo $_POST['optemp'];
    J'étais très content de moi ! Surtout pour afficher les résultats Chexbox.

    Mais... viens la requête et là... Par exemple, ici, je souhaiterai qu'il m'affiche uniquement les restaurants avec les activités sélectionnées et... ERROR !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $reponse = $bdd->query('SELECT * FROM restos WHERE spe1 LIKE '.$act.'');
     
    while ($donnees = $reponse->fetch())
    {
    ?>
    <p>Nom du restaurant : <?php echo $donnees['nom']; ?></p>
    <?php
    }
    ?>
    L'erreur me dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Call to a member function fetch() on a non-object in C:\wamp\www\DjibRestos\traitement_recherche.php on line 63
    Donc si j'ai bien traduit, il me dit que j'appelle une partie de la fonction qui n'est pas un objet ? ! ?

    Si j'ai bien compris la traduction, sachez que je n'ai pas compris l'erreur ! Comment doit-on rendre un non objet en objet ?

    Merci de vos explications

  2. #2
    Membre chevronné
    Femme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2009
    Messages : 236
    Par défaut
    Salut,
    Tu peux utiliser pdo fect obj pour transformer tes données en objets
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    $sth->fetch(PDO::FETCH_OBJ)
    Pour la doc complete, c'est ici .

  3. #3
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    tu as testé cette requete directe dans ta base après un echo $reponse ?
    Il n'y aurait pas quelques guillemets et quelques pourcentages ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $reponse = $bdd->query('SELECT * FROM restos WHERE spe1 LIKE "%'.$act.'%"');
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  4. #4
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2012
    Messages : 164
    Par défaut Fonctionnement réussi pour un choix
    Merci Dendrite ! Ça fonctionne parfaitement... Sauf que ça fonctionne que si l'utilisateur sélectionne un seul choix

    Si jamais il en sélectionne deux, par exemple Piscine et Bowling, l'echo retourne comme valeur pour $act : 'PiscineBowling'.

    Du coup, il me sort que ceux qui ont le Bowling...

    Une idée ? Une fonction miracle ?

  5. #5
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Un sujet qui date de quelques jours seulement...

    http://www.developpez.net/forums/d13...herche-simple/

    et après yotman voulait un order by, il a fait un autre sujet

    http://www.developpez.net/forums/d13...tion-order-by/
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  6. #6
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2012
    Messages : 164
    Par défaut Une petite erreur... Fatale ! Call a member non-object
    Bonsoir Dendrite,

    Merci pour ta réponse. J'ai essayé d'adapter le code au mien mais la réussite n'est pas au rendez-vous ! C'est ça quand on apprends ! On se casse souvent les dents

    Voici mon code final :

    Code de connection :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    try
    {
        $bdd = new PDO('mysql:host=localhost;dbname=djibrestos', 'root', '');
    }
    catch (Exception $e)
    {
            die('Erreur : ' . $e->getMessage());
    }
    ?>
    Voici le code qui répond à mon formulaire de recherche :

    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
    <?php include("include/connect.php");?>
    <h3>Voici le résultat de votre recherche :</h3>
    <?php
    //traitement des variables retournées par le formulaire recherche
    	$reponse='';	
    	//Traitement des cases à cochées
    	if(isset($_POST['ract']))
    	{ //sera vrai si au moins un moins un checkbox est coché
     
    		foreach($_POST['ract'] as $act)
    		{
    		$reponse = $bdd->query('SELECT * FROM restos WHERE spe1 LIKE "%'.$act.'%" UNION ');
    		}
    		//quand la boucle est terminée, il faut enlever le dernier union
    		$reponse=substr($reponse,0,-6);
    	}
     
    //traitement des données par liste
    echo $_POST['optliv'];
    echo $_POST['optemp'];
     
    while ($donnees = $reponse->fetch())
    {
    ?>
    <p>Nom du restaurant : <?php echo $donnees['nom']; ?></p>
    <?php
    }
    ?>
    Et voici la réponse (Le même problème que l'autre fois )

    Fatal error: Call to a member function fetch() on a non-object in C:\wamp\www\DjibRestos\traitement_recherche.php on line 63
    Rien que lire Fatal error me fait pleurer !

    J'ai essayé le code de Malinaka pour transformer en objet mais j'ai du me planter car ça ne change rien...

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

Discussions similaires

  1. [MySQL] Manipulation heure dans requête MySQL
    Par kuja2053 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 30/08/2007, 12h22
  2. [MySQL] Simples quotes dans requête mysql
    Par jean-pierre96 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 17/05/2007, 17h11
  3. Insérez variable PHP dans requête Mysql
    Par jeremie74 dans le forum Requêtes
    Réponses: 11
    Dernier message: 22/08/2006, 18h21
  4. Réponses: 1
    Dernier message: 07/08/2006, 10h22
  5. date dans requête mysql
    Par camflex dans le forum Langage SQL
    Réponses: 1
    Dernier message: 16/11/2005, 12h29

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