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

  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...

  7. #7
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(isset($_POST['ract'])){ 
    echo '<pre>';
    print_r($_POST['ract']);
    echo '</pre>';
    }
    Peux-tu copier coller ce que ceci t'affiche ?
    Tu es sûr que cette variable est du type array ?

    Rien que lire Fatal error me fait pleurer
    Ouh la, faut arrêter le développement et ne surtout pas faire de bricolage, ni de tricot, ni de cuisine non plus, si tu es si fragile.
    N'oublie pas, Plus ça rate, et plus on a de chances que ça marche.
    http://perso.cimetz.com/jvoyenne/shadok/devises.htm
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  8. #8
    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 J'ai bien un tabeau apparemment
    Voici la réponse quand je coche billard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Array
    (
        [0] => Billard
    )
    Et quand je coche tout
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Array
    (
        [0] => Piscine
        [1] => Billard
        [2] => Bowling
        [3] => Spectacle
    )
    Et bien sûr la même erreur qui suit...

    AIE... Je viens de me taper sur les doigts en réparant la clim avec une aiguille à tricoter : je vais arrêter le tricot et le bricolage !

  9. #9
    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 J'ai bien un tabeau apparemment
    Voici la réponse quand je coche billard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Array
    (
        [0] => Billard
    )
    Et quand je coche tout
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Array
    (
        [0] => Piscine
        [1] => Billard
        [2] => Bowling
        [3] => Spectacle
    )
    Et bien sûr la même erreur qui suit...

    AIE... Je viens de me taper sur les doigts en réparant la clim avec une aiguille à tricoter : je vais arrêter le tricot et le bricolage !

  10. #10
    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
    ah, je n'avais pas vu.
    La voilà ton erreur.
    Tu ne peux pas lancer en boucle ta méthode query !
    Pardi.
    Faut concaténer un truc en boucle genre $sql, puis l'envoyer une seule fois après. pardi...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	if(isset($_POST['ract']))
    	{
     $sql='';
    		foreach($_POST['ract'] as $act)
    		{
    		$sql.='SELECT * FROM restos WHERE spe1 LIKE "%'.$act.'%" UNION ';
    		}
    		//quand la boucle est terminée, il faut enlever le dernier union
    		$sql=substr($sql,0,-6);
    $reponse = $bdd->query($sql);
    	}
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  11. #11
    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 Problème de boucle ?
    J'ai mis à mon code à jour grâce à Dendrite que je remercie

    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
     
    <?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é
    		$sql='';
    		foreach($_POST['ract'] as $act)
    		{
    		$sql.'SELECT * FROM restos WHERE spe1 LIKE "%'.$act.'%" UNION ';
    		}
    		//quand la boucle est terminée, il faut enlever le dernier union
    		$rsql=substr($reponse,0,-6);
    		$reponse = $bdd->query($sql);
    	}
     
    //traitement des données par liste pour l'instant qui ne sert à rien juste pour voir
    echo $_POST['optliv'];
    echo $_POST['optemp'];
     
    if(isset($_POST['ract'])){  //pour voir le résultat du tableau
    echo '<pre>';
    print_r($_POST['ract']);
    echo '</pre>';
    }
    Puis le code suivant pour l'affichage, et c'est là qu'est l'erreur, la même :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    while ($donnees = $reponse->fetch())
    {
    ?>
    <p>Nom du restaurant : <?php echo $donnees['nom']; ?></p>
    <?php
    }
    ?>
     
    Voici l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Fatal error: Call to a member function fetch() on a non-object in C:\wamp\www\DjibRestos\traitement_recherche.php on line 69
    J'ai donc essayé de RÉFLÉCHIR ET...

    J'ai fait ceci en virant la boucle While

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <p>Nom du restaurant : <?php echo $reponse['nom']; ?></p>
    Et là miracle, plus d'erreur.... mais plus de résultat non plus, mais l'array est juste !

  12. #12
    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 Si on changeait de connection ?
    Je me demande si je ne vais pas me connecter autrement qu'avec PDO ? Qu'en pensez-vous ?

  13. #13
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    Surtout pas, maintenant que tu te connectes avec PDO, reste sur PDO (c'est le meilleur système de connexion qui soit en PHP).

  14. #14
    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
    Bon, je ne sais pas où tu en es, mais quand je vois que tu copies colles mes propositions, puis les modifies au hasard... je me demande si tu comprends ce que tu fais. Le minimum, c'est de tester MES propositions telles quelles et de commenter ici avant de bidouiller.
    $sql devient à un moment $rsql puis $sql à nouveau... Ca ne peut pas fonctionner. Mais là, c'est du niveau... savoir copier coller.

    Ce que tu ne comprends pas depuis le début, c'est que quand tu vois cette erreur

    Fatal error: Call to a member function fetch() on a non-object in C:\wamp\www\DjibRestos\traitement_recherche.php on line 63
    Ce n'est aucunement un problème PDO. Ton SQL fabriqué via PHP pose problème parce que tu fais des erreurs, et PDO n'est qu'un révélateur, pas une cause. Sinon quoi ? Tu t'imagines que PDO fonctionne une fois sur deux ?
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  15. #15
    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
    Bonjour Dendrite,

    Je voulais quand même te remercier de tes réponses et t'éclairer un peu sur mes "copier coller".

    Ce ne sont pas vraiment des "copier coller" sans réfléchir étant donné que le fameux $rslq que je n'avais pas vu est une faute de frappe. Alors effectivement, ça ne fonctionne pas.

    Tant qu'à PDO, j'ai réaliser un système de session pris sur un tuto. Le soucis est la connexion à la base de données. Si j'utilise le tuto, aucun problème. En revanche, si je me connecte par PDO, alors ça ne fonctionne pas. Je me suis donc fait deux page de connexion différente. Pour un connaisseur, c'est ridicule, mais pour moi ça marche !

    Pour mon erreur, c'est la même qui apparait. Cependant, je vois que tu m'a donné comme ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $reponse = $bdd->query($sql);
    Et moi, pour appeller les réponses, dans la fameuse boucle While qui renvoie, une erreur, j'ai mis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ($donnees = $sql->fetch())
    Faut-il que $donnees soit égale à $sql ou bien, ce qui me semblerait plus logique, à $reponse ?

    J'ai essayé les deux, la même erreur revient, mais ça serait un début, non ?

  16. #16
    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
    Bon, on va procéder par étape, parce que je conçois que PDO semble bien difficile au début, et mérite un exo à lui tout seul.
    Oublie ta problématique de départ et reviens juste à "Comment faire marcher PDO".
    Ne mélange pas les différents modes de connexion, c'est juste mettre le bazar dans ta tête et dans ton code.
    Fais-toi une page test.php et mets ceci dessus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $db = new PDO('mysql:host=sqlserver;dbname=database', 'username',
    'password');
    if($db){
    echo 'Je me connecte en PDO comme un grand et je peux aller plus loin';
    }
    else{
    echo 'Je cherche pourquoi ça marche pas';
    }
    Et dis moi ce que ça affiche.

    Si tu peux te connecter en PDO, voici ce que tu mets maintenant dans test.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
    $db = new PDO('mysql:host=sqlserver;dbname=database', 'username','password');
    if($db){
    	//Mon tableau PHP de résultats
    	$results=array();
    	//le SQL théorique
    	$sql='SELECT * from maTable;';
    	//la préparation qui va te dire si ton SQL est correct
    	$sth = $dbh->prepare($sql);
    	//le lancement de la requête
    	$sth->execute();
    	//récupération de chaque row organisé en tableau associatif
    	while($row = $sth->fetch(PDO::FETCH_ASSOC)){
    		array_push($results,$row);
    	}
    	//fermeture de la connexion
    	$db=NULL;
    }
    else{
       echo 'Base indisponible';
    }
    //ton array PHP alimenté par ta base est dorénavant exploitable
    if(isset($results){
       echo '<pre>';
       print_r($results);
       echo '</pre>';
    }
    Et enfin si la page précédente fonctionne, tu peux aller encore plus loin, en personnalisant ton $sql. Je crois que je t'ai tout dit !
    Si tu ne fais pas ces 3 étapes dans l'ordre, tu ne sauras jamais ce qui coince.

    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
    if(isset($_POST['ract'])){
        $sql='';
        foreach($_POST['ract'] as $act){
           $sql.='SELECT * FROM restos WHERE spe1 LIKE "%'.$act.'%" UNION ';
        }
    	//quand la boucle est terminée, il faut enlever le dernier union
    	$sql=substr($sql,0,-6);//le sql est correct
     
        $db = new PDO('mysql:host=sqlserver;dbname=database', 'username','password');
        if($db){
    	    //Mon tableau PHP de résultats
    	    $results=array();
    	    //la préparation qui va te dire si ton SQL est correct
    	    $sth = $dbh->prepare($sql);
    	    //le lancement de la requête
    	    $sth->execute();
    	    //récupération de chaque row organisé en tableau associatif
    	    while($row = $sth->fetch(PDO::FETCH_ASSOC)){
    		    array_push($results,$row);
    	    }
    	    //fermeture de la connexion
    	    $db=NULL;
        }
        else{
           echo 'Base indisponible';
        }
        //ton array PHP alimenté par ta base est dorénavant exploitable
        if(isset($results){
           echo '<pre>';
           print_r($results);
           echo '</pre>';
        }
    }
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  17. #17
    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
    Dendrite,

    Je te remercie pour cette série de test qui s'est bien déroulé, pour arriver au résultat final : Ça fonctionne ! Je ne pourrais jamais assez te remercier depuis le temps que je me prends la tête. En plus, ayant un peu près compris le principe, sachant que j'avais plusieurs activités dans des champs différents, j'ai crée un champs total pour concaténer toutes les activités à la création du restos. De ce fait, il fait la recherche qu'ici et ça fonctionne à merveille.

    J'ai maintenant deux questions :

    Dans la requête $sql, ... que veut dire UNION ? (enfin, à quoi sert-il ?)

    Et enfin, comment afficher les résultats, du moins le nom des champs concernés, avec ECHO... J'ai essayé quelques lignes sans succès. ?

  18. #18
    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
    Bon ben super !

    Pour te répondre

    Si tu avais une égalité en SQL, tu pourrais avoir une syntaxe de ce type
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from matable where nom in ('DUPONT','DURAND','MARTIN');
    Mais là, c'est un like, qui compare un morceau de ta chaîne, alors il faut une syntaxe qui dise va me chercher tous ceux qui ont 'DUP' ET tous ceux qui ont 'DUR' ET tous ceux qui ont 'MAR', union, c'est le ET.

    Comment on affiche $results ? comme tous les tableaux de tableaux associatifs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
       //ton array PHP alimenté par ta base est dorénavant exploitable
        if(isset($results){
          foreach($results as $result){
          //même nom que les champs de ta base
           echo $result['monChamp1'].' '.$result['monChamp2'].'<br/>';
          }
        }
    Bon, et maintenant, tu te fais un tuto pour débutant. A quoi ça sert que l'on se décarcasse sinon ? et tu mets "résolu".
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  19. #19
    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
    Merci pour tout. Et aussi pour le "IN" que je ne connaissais pas.

    Pour le tuto, j'avais l'intention de le le faire, avec tout ce que j'ai pu apprendre ici ! J'espère qu'il servira à d'autres Mega Grand Débutant !

    Je vais essayé maintenant, pour finir ma base, de supprimer ma connexion 2, pour qu'il n'y en ai qu'une seule, un peu sur le même principe et aussi de faire fonctionner la fonction php(mail) ! Encore du taf !

    Et bien sûr, je n'oublie pas...

    Merci à toi !

+ 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