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 :

Autoriser la recherche dans une bdd avec des mots contenant une apostrophe


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 293
    Par défaut Autoriser la recherche dans une bdd avec des mots contenant une apostrophe
    Bonjour à tous.
    Je vous explique mon problème:
    J'ai une info telle que(bières spéciales: l'abbaye d'aulne)
    Quand j'introduit les mots : bières spéciales, bière, abbaye, aulne dans le formulaire de recherche, il me renvoie la ligne contenant cette info; mais lorsque j'introduit l'expression (abbaye d'aulne) contenant l'apostrophe, il me renvoie(pas d'enregistrement dans cette table) Problèmes d'apostrophe?

    Comment résoudre ce problème en tenant compte que j'utilise like %$h% dans la requête de selection dans ma bdd($h correspond au $_POST[donnees]?
    Comme d'habitude, je compte sur vos bienveillants conseils.
    Merci
    Claudine

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    D'une manière générale, quand on veut utiliser une apostrophe dans une requête SQL, il faut la doubler :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT la_colonne
    FROM la_table
    WHERE une_autre_colonne = 'L''Abbaye de la bonne bière'

    Normalement, les modules PHP qui font l'interface avec le SGBD gèrent ça sans problème :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $recherche = "L'Abbaye de la bonne bière";
     
    $sql : "
    	SELECT la_colonne
    	FROM la_table
    	WHERE une_autre_colonne = :recherche
    ";
     
    $prep = $connexion->prepare($sql);
    $prep->bindValue(':recherche', $recherche, PDO::PARAM_STR);
    $prep->execute();
     
    $result = $prep->fetch(PDO::FETCH_ASSOC);
    => C'est PDO qui se débrouille avec l'apostrophe dans $recherche.

    Maintenant, sans votre code et sans savoir quel SGBD vous utilisez, ça va être difficile de vous aider efficacement.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 28
    Par défaut
    Salut,

    Je pense que tu auras besoin la commande :


  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 293
    Par défaut
    Bonjour CinePhil,
    Désolée d'avoir tarder à vous remercier et répondre à votre proposition, mais j'ai lu que vous faisiez appel à PDO et de ce fait , j'ai dû adapter mon search.php à la place de mysqli, ce qui m'a causé pas mal de problèmes. Bref ça fonctionne normalement, si ce n'est l'affichage (pas d'enregistrements dans la bd ) l'echo le renseigne même lorsqu'il affiche les lignes du tableau;
    Voudriez-vous voir la ligne de code(problèmes )?
    Je suis impatiente de voir comment adapter votre proposition avec l'apostrophe: a cet effet, j'ai ajouter une colonne dans ma bdd"Rech1" avec indication 'l'abbaye d'Aulne' dans celle-ci.

    Donc code sql devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Select infos 
    From coordonnees
    Where Recht1='l'abbaye d'Aulne' // les mots introduits dans le formulaire de recherche
    //Mais comment adapter une double requête dans mon search.php ci-dessous sans perturber la requête existante?
    monVoiciCode search.php
    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
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
    <?php
     
    try
     {
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
     
    $bdd = new PDO('mysql:host=localhost;dbname=jf96clients', 'root', '', $pdo_options);
     
    $h=$_POST['vosdonnees'];
    $v=$_POST['ville'];
     
    if ($_POST['ville']=="")
      {
    //on recupère tout le contenu de la table coordonnées
     
    $reponse=$bdd ->query("SELECT * FROM coordonnees WHERE   categorie LIKE '%$h%' or selection LIKE '%$h%'or infos LIKE'%$h%' or motscles LIKE '%$h%' or ville LIKE '%$h%' or Rech1 LIKE'%$h%' ");
     
    {
     //on affiche les donnees dans le tableau  
    //echo '<div id="infos"></div>';
    // si on a récupéré un résultat on l'affiche.
     
     
        echo '<table bgcolor="FFFFFF">'."\n";
            // première ligne on affiche les titres prénom et surnom dans 2 colonnes
        echo '<tr>';
       echo '<td bgcolor="#669999"><b><u>selection</u></b></td>';
       echo '<td bgcolor="#669999"><b><u>nom</u></b></td>';
       echo '<td bgcolor="#669999"><b><u>prenom</u></b></td>';
     
       echo '<td bgcolor="#669999"><b><u>MaPage</u></b></td>';
     
       echo '<td bgcolor="#669999"><b><u>Ouverture</u></b></td>';
     
       echo '<td bgcolor="#669999"><b><u>ville</u></b></td>';
     
       echo '<td bgcolor="#669999"><b><u>SiteWeb</u></b></td>';
     
       echo '<td bgcolor="#669999"><b><u>numtel</u></b></td>';
       echo '<td bgcolor="#669999"><b><u>adresse</u></b></td>';
       echo '<td bgcolor="#669999"><b><u>province</u></b></td>';
       echo '</tr>'."\n";
        // lecture et affichage des resultats 
     
       While($donnees=$reponse->fetch())
           {
           echo '<tr>';
    	//138
       echo '<td bgcolor="#CCCCCC">'.$donnees["selection"].'</td>';
       echo '<td bgcolor="#90EE90">'.$donnees["nom"].'</td>';
       echo '<td bgcolor="#90EE90">'.$donnees["prenom"].'</td>';
     
       echo'<td bgcolor="#CCCCCC"onClick="showPopup(event, \'' . addslashes($donnees['infos']) . '\')">'.$donnees["MaPage"].'</a></td>'; 
     
       echo'<td bgcolor="#CCCCCC"onClick="showPopup(event, \'' . addslashes($donnees['horaire']) . '\')">'.$donnees["Ouverture"].'</a></td>'; 
     
       echo '<td bgcolor="#CCCCCC">'.$donnees["ville"].'</td>';
     
       echo '<td bgcolor="#CCCCCC">'.$donnees["SiteWeb"].'</td>';
     
       echo '<td bgcolor="#9ACD32">'.$donnees["numtel"].'</td>';
       echo '<td bgcolor="#9ACD32">'.$donnees["adresse"].'</td>';
       echo '<td bgcolor="#9ACD32">'.$donnees["province"].'</td>';	
       echo '</tr>'."\n";
        }
        echo '</table>'."\n";
        // fin du tableau.
         } 
    	if($donnees==0 and $donnees['selection']==0 and $donnees['infos']==0) 
    {echo 'Pas d\'enregistrements dans cette table...';
    }
     
    //on affiche le résultat
     
    }
    else 
    // suite.........

    Sincères remerciements pour votre aide.
    Claudine

  5. #5
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    or ville LIKE '%$h%'
    Cela ne devrait-il pas être $v ici ?

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ($_POST['ville']=="")
      {
    $reponse=$bdd ->query("SELECT * FROM coordonnees WHERE   categorie LIKE '%$h%' or selection LIKE '%$h%'or infos LIKE'%$h%' or motscles LIKE '%$h%' or ville LIKE '%$h%' or Rech1 LIKE'%$h%' ");
    Si la ville est vide on lance une requête dans laquelle on cherche une ville ?

    D'autre part, votre accolade ouvrante du if n'est pas fermée. Vous enchaînez avec une autre accolade ouvrante.

    Autres remarques :
    1) Il vaut mieux éviter la guerre des étoiles !

    2) Un code indenté et aéré est plus agréable à lire et à déboguer.

    3) Attention aux injections SQL en utilisant directement $_POST !
    Il vaut donc mieux préparer la requête avec des paramètres puis "binder" ces paramètres :

    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
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
     
    <?php
     
    try
    {
    	$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
     
    	$bdd = new PDO('mysql:host=localhost;dbname=jf96clients', 'root', '', $pdo_options);
     
    	$h = $_POST['vosdonnees'];
    	$v = $_POST['ville'];
     
    	if ($_POST['ville'] == "")
    	{
    		//on recupère tout le contenu de la table coordonnées
     		$sql = "
    			SELECT /* les colonnes nécessaires et pas étoile ! */
    			FROM coordonnees
    			WHERE categorie LIKE :recherche
    				OR selection LIKE :recherche
    				OR infos LIKE :recherche
    				OR motscles LIKE :recherche
    				OR ville LIKE :recherche
    				OR Rech LIKE :recherche
    		";
     
    		$prep = $bdd->prepare($sql);
    		$prep->bindValue(':recherche', '%'.$h.'%', PDO::PARAM_STR);
    		$prep->execute();
     
    		$reponse = $prep-fetchAll(PDO::FETCH_ASSOC);
    	} // Fin if ($_POST['ville'] == "")
    	// Ne faudrait-il pas un else ici si la ville a été renseignée ? Sinon à quoi sert le champ ville et la variable $v qui en découle ?
     
    } // Fin try
    catch (PDO_EXCEPTION $e)
    {
    	echo '<br/>ERREUR PDO dans '.$e->getFile(). ' L.'.$e->getLine().' : '.$e->getMessage();
    }
     
     
    //on affiche les donnees dans le tableau  
    //echo '<div id="infos"></div>';
    // si on a récupéré un résultat on l'affiche.
     
     
    echo '<table bgcolor="FFFFFF">'."\n";
            // première ligne on affiche les titres prénom et surnom dans 2 colonnes
    	echo '<tr>';
    		echo '<td bgcolor="#669999"><b><u>selection</u></b></td>';
    		echo '<td bgcolor="#669999"><b><u>nom</u></b></td>';
    		echo '<td bgcolor="#669999"><b><u>prenom</u></b></td>';
    		echo '<td bgcolor="#669999"><b><u>MaPage</u></b></td>';
    		echo '<td bgcolor="#669999"><b><u>Ouverture</u></b></td>';
    		echo '<td bgcolor="#669999"><b><u>ville</u></b></td>';
    		echo '<td bgcolor="#669999"><b><u>SiteWeb</u></b></td>';
    		echo '<td bgcolor="#669999"><b><u>numtel</u></b></td>';
    		echo '<td bgcolor="#669999"><b><u>adresse</u></b></td>';
    		echo '<td bgcolor="#669999"><b><u>province</u></b></td>';
    	echo '</tr>'."\n";
     
    // lecture et affichage des resultats 
     
    foreach($reponse as $key => $donnees)
    {
    	echo '<tr>';
    		echo '<td bgcolor="#CCCCCC">'.$donnees["selection"].'</td>';
    		echo '<td bgcolor="#90EE90">'.$donnees["nom"].'</td>';
    		echo '<td bgcolor="#90EE90">'.$donnees["prenom"].'</td>';
    		echo'<td bgcolor="#CCCCCC"onClick="showPopup(event, \'' . addslashes($donnees['infos']) . '\')">'.$donnees["MaPage"].'</a></td>'; 
    		echo'<td bgcolor="#CCCCCC"onClick="showPopup(event, \'' . addslashes($donnees['horaire']) . '\')">'.$donnees["Ouverture"].'</a></td>'; 
    		echo '<td bgcolor="#CCCCCC">'.$donnees["ville"].'</td>';
    		echo '<td bgcolor="#CCCCCC">'.$donnees["SiteWeb"].'</td>';
    		echo '<td bgcolor="#9ACD32">'.$donnees["numtel"].'</td>';
    		echo '<td bgcolor="#9ACD32">'.$donnees["adresse"].'</td>';
    		echo '<td bgcolor="#9ACD32">'.$donnees["province"].'</td>';	
    	echo '</tr>'."\n";
    } // Fin foreach($reponse as $key => $donnees)
     
    echo '</table>'."\n";
    // fin du tableau.
     
    /* Là ça devient un peu la pagaille ! 
         } // Ça ferme quoi ?
    */
     
    if($donnees==0 and $donnees['selection']==0 and $donnees['infos']==0) 
    {
    	echo 'Pas d\'enregistrements dans cette table...';
    }
     
    //on affiche le résultat
     
    /* else de quoi ?
    }
    else 
    // suite.........

    4) Isolez la partie HTML du PHP et isolez le CSS du HTML, c'est plus propre !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 293
    Par défaut
    merci CinePhil pour ces bons conseils qui assurent une lisibilité totale: c'est superbe;
    Pour ce qui est du nouveau code: que ce soit sur mon serveur local(easy PHP) ou sur mon hébergeur: c'est impossible voir message ci-dessous: j'ai même simplifier (pas de recherche par ville)

    [Sat Oct 21 06:03:41 2017] [error] [client 91.182.145.101] PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected' in /datas/vhosts/...../httpdocs/searchpasville.php:113\nStack trace:\n#0 /datas/vhosts/...../httpdocs/searchpasville.php(113): PDOStatement->execute()\n#1 {main}\n thrown in /datas/vhosts/...../httpdocs/searchpasville.php on line 113, referer: http://......./

    Je reste sceptique et débordée par tous ces messages d'erreurs: invalid catalog: c'est- à dire ?
    je crois que le plus simple, c'est de doubler dans les infos par exemple: abbaye d'Aulne(abbaye Aulne), ce qui permet d'avoir les infos de cette lignes si un consommateur tape dans le formulaire de recherche:abbaye d'aulne

    sincères remerciements
    Claudine

  7. #7
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    [Sat Oct 21 06:03:41 2017] [error] [client 91.182.145.101] PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected'
    Ça veut dire qu'il ne trouve pas votre base de données MySQL.

    Vérifiez votre configuration ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	$bdd = new PDO('mysql:host=localhost;dbname=jf96clients', 'root', '', $pdo_options);
    Quand ce sera fait et que vous n'avez plus le message d'erreur, autre bonne habitude à prendre : créez un user MySQL pour votre application qui a tous les droits sur votre BDD et aucune autre.
    Et donnez un mot de passe à l'utilisateur root !

    Votre BDD est une passoire, en l'état !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 293
    Par défaut
    merci pour votre réponse, mais il y a bien entendu un root et mdp indiqué chez l'hébergeur et rien ni fait car il donne une page blanche avec erreur comme indiquée précedemment:

    [Tue Oct 24 09:35:39 2017] [error] [client 91.182.145.101] PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected' in /datas/vhosts/XXXXX/httpdocs/searchpasville.php:113\nStack trace:\n#0 /datas/vhosts/XXXXX/httpdocs/searchpasville.php(113): PDOStatement->execute()\n#1 {main}\n thrown in /datas/vhosts/XXXXX/httpdocs/searchpasville.php on line 113, referer: http://XXXXXX/
    Voici les scripts corrigés et simplifés
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
     
    <<!DOCTYPE html >
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
     
    <title>search sans ville.php  sous PDO</title>
    <head>
     
    <script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
    <style type="text/css">
    		#popup
               {
    			padding: 10px;
    			background-color: #CCC;
    			width: 700px;
    		}
     
    		#popup.floatable 
               {
    			position: fixed;			
    		}
    	</style>
     
    <script type="text/javascript">
    function showPopup(evt, text) 
    { 
        var top = evt.clientY + document.body.scrollTop; 
        var left = evt.clientX + document.body.scrollLeft; 
        var p = document.getElementById("popup"); 
     
        p.innerHTML = text; 
        p.style.top = top; 
        p.style.left = left; 
        p.style.display = "inline"; 
    } 
     function hidePopup() 
    { 
        document.getElementById("popup").style.display = "none"; 
    } 
    </script> 
     
    <style> 
    .popup
    { 
        position:absolute; 
        z-index : 2; 
        display : none; 
        border-style:solid; 
        border-width:1px; 
        border-color:#909090; 
        background:#f0f0f0;
        padding:25px;
        border-radius:25px;
        margin-top:15px;
        width:800px;
    }
    table
     .hasInfo
    {
        cursor: pointer;
    }
     
    <\table> 
    </style> 
     
    <div id="popup" class="popup" onClick="hidePopup()"></div> 
     
    <script language="javascript"> 
    function show_info(text)
     {
    	var ele = document.getElementById('info');
    	ele.innerHTML = text;
     } 
    </script> 
     
     
    <?php
     
    echo'<strong>Faites votre choix dans la liste :<br>
    Un clic sur nosINFOS.clic ou NotreHoraire.clic vous donne les renseignements fournis par les adhérents.</strong>';
     
    try
     {
         $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
     
    $bdd= new PDO ("mysql: host = localhost;  dbname = JF96_clients" , 'JF96_admin', 'Cl16-358ru1zv', $pdo_options)  ;
     
         $h=$_POST['vosdonnees'];
     
         $v=$_POST['ville'];
     
     
     
     
                 //on recupère tout le contenu de la table coordonnées
     
                 $sql="
         
    	               Select categorie, selection, infos,motscles, ville,recht1
    	               from coordonnees
    	               WHERE categorie LIKE: recherche
    	                     OR selection LIKE:recherche 
    			             OR infos LIKE:recherche
    			             OR motscles LIKE:recherche
    			             OR ville LIKE:recherche
    			             OR Rech1 LIKE:recherche
    	  
    	             ";
     
     
    	             $prep=$bdd->prepare($sql);
     
    	             $prep->bindValue(':recherche','%'.$h.'%',PDO::PARAM_STR);//
     
    	             $prep->execute();
     
     
     
    	             $reponse=$prep-fetchAll(PDO::FETCH_ASSOC);
     
     
     
     
     }// Fin du try 
     
      catch(PDO_EXCEPTION $e)
     {
     
           echo'<br/>ERREUR PDO	dans'.$e->getFile().'L'.$e->getLine().':'.$e->getMessage();
     
     }		
     
     //on affiche les donnees dans le tableau  
     
     
       echo '<table bgcolor="FFFFFF">'."\n";
     
            // premiere ligne on affiche les titres selection,nom,prenom,etc... dans les colonnes
     
               echo '<tr>';
                     echo '<td bgcolor="#669999"><b><u>selection</u></b></td>';
     
                     echo '<td bgcolor="#669999"><b><u>nom</u></b></td>';
     
                     echo '<td bgcolor="#669999"><b><u>prenom</u></b></td>';
     
                     echo '<td bgcolor="#669999"><b><u>MaPage</u></b></td>';
     
                     echo '<td bgcolor="#669999"><b><u>Ouverture</u></b></td>';
     
                     echo '<td bgcolor="#669999"><b><u>ville</u></b></td>';
     
                     echo '<td bgcolor="#669999"><b><u>SiteWeb</u></b></td>';
     
                     echo '<td bgcolor="#669999"><b><u>numtel</u></b></td>';
     
                     echo '<td bgcolor="#669999"><b><u>adresse</u></b></td>';
     
                     echo '<td bgcolor="#669999"><b><u>province</u></b></td>';
     
               echo '</tr>'."\n";
     
            // lecture et affichage des resultats 
     
            foreach($reponse as $key=>$donnees)   
     
           {
     
               echo '<tr>';
     
                     echo '<td bgcolor="#CCCCCC">'.$donnees["selection"].'</td>';
     
                     echo '<td bgcolor="#90EE90">'.$donnees["nom"].'</td>';
     
                     echo '<td bgcolor="#90EE90">'.$donnees["prenom"].'</td>';
     
                     echo'<td bgcolor="#CCCCCC"onClick="showPopup(event, \'' . addslashes($donnees['infos']) . '\')">'.$donnees["MaPage"].'</a></td>'; 
     
    	             echo'<td bgcolor="#CCCCCC"onClick="showPopup(event, \'' . addslashes($donnees['horaire']) . '\')">'.$donnees["Ouverture"].'</a></td>'; 
     
                     echo '<td bgcolor="#CCCCCC">'.$donnees["ville"].'</td>';
     
                     echo '<td bgcolor="#CCCCCC">'.$donnees["SiteWeb"].'</td>';
     
       				 echo '<td bgcolor="#9ACD32">'.$donnees["numtel"].'</td>';
     
                     echo '<td bgcolor="#9ACD32">'.$donnees["adresse"].'</td>';
     
                     echo '<td bgcolor="#9ACD32">'.$donnees["province"].'</td>';	
     
               echo '</tr>'."\n";
     
     
            } // fin foreach($reponse as $key=>$donnees) 
     
            echo '</table>'."\n";
     
    	    //Fin du tableau
     
    	if($donnees['categorie']==0 and $donnees['selection']==0 and $donnees['infos']==0)
     
       {
    	   echo 'Pas d\'enregistrements dans cette table...';
       }
     
    //on affiche le résultat
     
     
     
     
    ?>
    <center>
    <input type="button" value= "Nouvelle recherche"
    onClick="document.location.href= document.referrer"/>
    </center>
    </head>
    pouvez-vous m'expliquer la signification de:113\nStack trace:\n#0 /datas/vhosts/XXXXX/httpdocs/searchpasville.php(113): PDOStatement->execute()\n#1 {main}\n thrown in /datas/vhosts/XXXXX/httpdocs/searchpasville.php on line 113, referer: http://XXXXXX/

    Claudine

  9. #9
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Essayez sans les espaces dans la chaîne de connexion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $bdd= new PDO ("mysql:host=localhost;dbname=JF96_clients" , 'USER_MYSQL', 'SON_MOT_DE_PASSE', $pdo_options)  ;
    Et ne donnez pas vos user MySQL et mot de passe au forum !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 293
    Par défaut
    Re Bonjour Cine phil,

    J'ai modifié comme demandé, avec nouveau message d'erreur:

    Tue Oct 24 10:07:16 2017] [error] [client 91.182.145.101] PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ': recherche\n\t OR selection LIKE:recherche \n\t\t\t O' at line 3' in /datas/vhosts/XXXXX/httpdocs/searchpasville.php:113\nStack trace:\n#0 /datas/vhosts/XXXXX/httpdocs/searchpasville.php(113): PDOStatement->execute()\n#1 {main}\n thrown in /datas/vhosts/XXXXX/httpdocs/searchpasville.php on line 113, referer: http://XXXXX.
    Apparemment, c'est la syntaxe !
    Merci pour votre collaboration
    Claudine

  11. #11
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Je m'y attendais !
    Ça manque d'espace dans votre requête !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $sql="
    	SELECT categorie, selection, infos,motscles, ville,recht1
    	FROM coordonnees
    	WHERE categorie LIKE :recherche
    		OR selection LIKE :recherche 
    		OR infos LIKE :recherche
    		OR motscles LIKE :recherche
    		OR ville LIKE :recherche
    		OR Rech1 LIKE :recherche
    ";
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 293
    Par défaut
    Bonsoir Cine Phil
    Correction faite, mais j'ai un autre message d'erreur:

    Tue Oct 24 19:01:09 2017] [error] [client 91.182.145.101] PHP Fatal error: Call to undefined function fetchAll() in /datas/vhosts/infopub.be/httpdocs/searchpasville.php on line 117, referer: http://XXXXXXXXXX/
    Comment définir une fonction fetchAll? la ligne 117: $reponse=$prep-fetchAll(PDO::FETCH_ASSOC);.
    Merci pour votre aide précieuse.
    Claudine

  13. #13
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Il faut faire un peu attention à la syntaxe !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $reponse=$prep->fetchAll(PDO::FETCH_ASSOC);
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 293
    Par défaut
    Bonjour Cine Phil,
    Oui, je suis distraite et malheureusement je n'en sortirait pas sans votre aide.
    Après correction, nouveaux messages d'erreur:

    [Tue Oct 24 22:00:34 2017] [error] [client 91.182.145.101] PHP Warning: Illegal string offset 'selection' in /datas/vhosts/XXXX/httpdocs/searchpasville.php on line 169, referer: http://XXXXXXXXXX/
    [Tue Oct 24 22:00:34 2017] [error] [client 91.182.145.101] PHP Warning: Illegal string offset 'nom' in /datas/vhosts/XXXXX/httpdocs/searchpasville.php on line 171, referer: http:/XXXXX/
    [Tue Oct 24 22:00:34 2017] [error] [client 91.182.145.101] PHP Warning: Illegal string offset 'prenom' in /datas/vhosts/XXXXXX/httpdocs/searchpasville.php on line 173, referer: http://XXXXXX/
    idem pour 'infos' , 'MaPage' et le reste.....
    Apparemment, $donnees ne correspond pas à $row[selection] comme j'avais avant dans While($row=mysqli_fetch_array($result)).
    Puis-je de nouveau solliciter votre aide?
    Claudine

  15. #15
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Retour sur la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql="
    	SELECT categorie, selection, infos,motscles, ville,recht1 // ...
    Ensuite la réponse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	             $reponse=$prep-fetchAll(PDO::FETCH_ASSOC);
    $reponse est un tableau qui, pour chaque ligne de résultat de la requête, va reprendre les colonnes de résultat de la requête.

    Donc c'est comme si le fetch all créait le tableau $reponse de cette manière :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $reponse['1']['categorie'] = 'une catégorie';
    $reponse['1']['selection'] = 'une selection';
    $reponse['1']['infos'] = 'une info';
    $reponse['1']['motscles'] = "un mot clé (ou une liste vu le pluriel, ce qui n'est pas top au niveau de la modélisation des données mais c'est un autre sujet)";
    $reponse['1']['recht1'] = 'un recht1';
    $reponse['2']['categorie'] = 'catégorie de la deuxième ligne de résultat de la requête';
    $reponse['2']['selection'] = 'sélection de la deuxième ligne de résultat de la requête';
    $reponse['2']['infos'] = 'info de la deuxième ligne de résultat de la requête';
    $reponse['2']['motscles'] = 'mot clé de la deuxième ligne de résultat de la requête';
    $reponse['2']['recht1'] = 'recht1 de la deuxième ligne de résultat de la requête';
    ...

    Donc forcément, quand vous appelez ensuite 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
    foreach($reponse as $key=>$donnees)   
           {
               echo '<tr>';
                    echo '<td bgcolor="#CCCCCC">'.$donnees["selection"].'</td>';
                     echo '<td bgcolor="#90EE90">'.$donnees["nom"].'</td>';
                     echo '<td bgcolor="#90EE90">'.$donnees["prenom"].'</td>';
                     echo'<td bgcolor="#CCCCCC"onClick="showPopup(event, \'' . addslashes($donnees['infos']) . '\')">'.$donnees["MaPage"].'</a></td>'; 
    	         echo'<td bgcolor="#CCCCCC"onClick="showPopup(event, \'' . addslashes($donnees['horaire']) . '\')">'.$donnees["Ouverture"].'</a></td>'; 
                     echo '<td bgcolor="#CCCCCC">'.$donnees["ville"].'</td>';
                     echo '<td bgcolor="#CCCCCC">'.$donnees["SiteWeb"].'</td>';
    		echo '<td bgcolor="#9ACD32">'.$donnees["numtel"].'</td>';
                     echo '<td bgcolor="#9ACD32">'.$donnees["adresse"].'</td>';
                     echo '<td bgcolor="#9ACD32">'.$donnees["province"].'</td>';	
               echo '</tr>'."\n";
            } // fin foreach($reponse as $key=>$donnees)
    Forcément, il y a des données inexistantes dans $reponse et ça renvoie une erreur.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 293
    Par défaut
    Bonjour CinePhil
    Quand vous dites que"Forcément, il y a des données inexistantes dans $reponse et ça renvoie une erreur.", c'est faux car j'ai tester avec l'ancienne méthode qui me renvoie un tableau avec 2 lignes complètes pour le mot de recherche 'resto' donc pas de données inexistantes.

    Dans notre cas actuel, pour le même mot de recherche"resto", il me renvoie le tableau ci-dessous:

    selection	nom	prenom	MaPage	Ouverture	ville	SiteWeb	numtel	adresse	province
    L	L	L	L	L	L	L	L	L	L
    P	P	P	P	P	P	P	P	P	P
    V	V	V	V	V	V	V	V	V	V
    5	5	5	5	5	5	5	5	5	5
    Pas d'enregistrements dans cette table...
    Et si je vais voir les erreurslogs, il m'affiche:
    [Tue Oct 24 22:00:34 2017] [error] [client 91.182.145.101] PHP Warning: Illegal string offset 'selection' in /datas/vhosts/XXXX/httpdocs/searchpasville.php on line 169, referer: http://XXXXXXXXXX/
    [Tue Oct 24 22:00:34 2017] [error] [client 91.182.145.101] PHP Warning: Illegal string offset 'nom' in /datas/vhosts/XXXXX/httpdocs/searchpasville.php on line 171, referer: http:/XXXXX/
    [Tue Oct 24 22:00:34 2017] [error] [client 91.182.145.101] PHP Warning: Illegal string offset 'prenom' in /datas/vhosts/XXXXXX/httpdocs/searchpasville.php on line 173, referer: http://XXXXXX/
    idem pour 'infos' , 'MaPage' ,'Ouverture','ville'.
    Ce tableau affiché ainsi que les erreurs peuvent-il vous mettre sur la piste?

    Remerciements
    claudine

  17. #17
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Quand vous dites que"Forcément, il y a des données inexistantes dans $reponse et ça renvoie une erreur.", c'est faux car j'ai tester avec l'ancienne méthode qui me renvoie un tableau avec 2 lignes complètes pour le mot de recherche 'resto' donc pas de données inexistantes.
    Peut-être parce que l'ancienne méthode était avec un très moche SELECT * dans la requête et que les colonnes attendues par l'affichage étaient ainsi présentes dans le résultat de requête ?

    Le fait est que dans le dernier code, SELECT categorie, selection, infos,motscles, ville,recht1 ne va sûrement pas donner en résultat un nom, un prénom...
    Par contre, selection, infos et ville ne devraient pas sortir en erreur... si la requête renvoie un résultat.

    D'ailleurs, avez-vous essayé votre requête directement sur MySQL pour voir quel résultat elle donne, si elle en donne un ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  18. #18
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 293
    Par défaut
    Bonjour
    D'ailleurs, avez-vous essayé votre requête directement sur MySQL pour voir quel résultat elle donne, si elle en donne un ?
    j'ai introduit dans Mysql:
    SELECT categorie, selection, infos, motscles, ville, Recht1 FROM coordonnees et cela donne toutes les listescomplétées de la table

    Claudine

  19. #19
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Et avec le WHERE que vous avez programmé, y a t-il un résultat ?

    Vous avez compris que votre requête ne peut pas donner un nom, un prénom... ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  20. #20
    Invité
    Invité(e)
    Par défaut
    Bonjour Claudine, (on se connait, non ? )

    Merci de re-montrer ton code à chaque fois (par copier-coller*)
    Sinon, on ne sait pas dire quoi corriger.

    * Le blabla ne remplace pas un code précis !

    Mais surtout, il faut faire preuve de rigueur !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Ouvrir une bdd avec des fichier .MYI . MYD et . FRM
    Par djams9 dans le forum Débuter
    Réponses: 2
    Dernier message: 16/07/2018, 18h48
  2. [XL-2010] Recherche dans un tableau avec des cases vide alternée
    Par tlt dans le forum Excel
    Réponses: 7
    Dernier message: 23/12/2016, 14h29
  3. Remplir une bdd avec des données libre de droit
    Par wyzer dans le forum Débuter
    Réponses: 0
    Dernier message: 29/06/2011, 16h31
  4. Erreur dans une requête avec des valeurs contenant \
    Par KIK83 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 11/12/2009, 16h06
  5. Réponses: 10
    Dernier message: 02/04/2007, 17h22

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