Coucou Christophe,

Pour passer des paramètres à une requête préparée avec l'extension PDO, j'utilise personnellement 2 méthodes, qui sont les suivantes :

1. Méthode 1 :

$stmt->bindValue(':pseudo', '%'.$pseudo.'%', PDO::PARAM_STR);
$stmt->execute ();

2. Méthode 2 :

Je passe directement les paramètres lors de l'exécution de la requête préparée, comme suit :

$stmt->execute (array ('pseudo', '%'.$pseudo.'%'));

Remarque que dans la seconde méthode, je ne mets pas le ":" pour faire référence au marqueur nominatif.

bindParam ne fonctionne pas très bien avec PDO chez moi aussi, tu n'es pas le seul.

Autrement, dans l'exemple de mon précédent message, le nom de la table "membres" est au pluriel, tu dois la mettre au singulier pour ton cas, car apparemment, ta table "membre" est au singulier.

Voili voilou, merci à toi.

Bien amicalement,
Abdel.

-----Message d'origine----- From: Christophe Garnier
Sent: Monday, July 31, 2017 10:46 AM
To: Proglist
Subject: [progliste] Re: Recherche de car actères et base de données

Salut Abdel et tous
Merci beaucoup pour ton code. En fait j’utilise déjà pro et les requêtes préparées avec bindparap Malheureusement bindparap n’excepte pas ce que je lui entre. Voici la ligne et le message d’erreur.
//Je mets la requête dans une constante
const CHERCHERMEMBRE = 'select id, pseudo from membre where pseudo like :pseudo';
//La ligne qui ne marche pas.
$stmt->bindParam(":pseudo", '%'.$pseudo.'%', PDO::PARAM_STR);
Voici le message d’erreur dans le blog
[31-Jul-2017 11:31:32 Europe/Berlin] PHP Fatal error: Uncaught Error: Cannot pass parameter 2 by reference in /Applications/MAMP/htdocs/classe/MembreManager.php:132
Merci d’avance





Le 30 juil. 2017 à 00:33, Abdel <abdelkrim.bens...@free.fr> a écrit :

Resalut Christophe,

En PDO, je vais te donner la syntaxe entière pour préparer une requête de recherche dans une BDD, avec les commentaires qui vont avec.

Je suis certain que tu vas apprécier la simplicité d'utilisation de cette extension !

Le fichier view.php est en PJ, si tu veux, tu pourras le définir comme action à ton formulaire.

Tu devras bien entendu préciser le nom de ta bdd, ainsi que le nom d'utilisateur et le mot de passe.

Le nom du serveur devra être modifié également s'il est différent de localhost.

<!-- début du code -->
<?php
// Récupération du pseudo à partir du formulaire.
$pseudo = $_POST['pseudo'];
// Connexion à la BDD.
$db = new PDO('mysql:host=localhost;dbname=nomDeLaBDD;charset=utf8', 'nomDutilisateur', 'motDePasse');
// Création de la requête préparée en utilisant un marqueur nominatif.
$query = $db->prepare('SELECT id, pseudo FROM membres WHERE pseudo LIKE :pseudo'); // Exécution de la requête en lui passant le pseudo en paramètre entourée des symboles '%'.
$query->execute(array('pseudo' => '%' . $pseudo . '%'));
// Si le nombre de résultats est supérieur à 0.
if ($query->rowCount() > 0)
{
// On crée un tableau pour accueillir les données résultantes de la recherche.
echo "<table border=\"1\">\n";
// Récupération des données dans un tableau associatif pour chaque ligne de résultat.
foreach ($query->fetchAll(PDO::FETCH_ASSOC) as $row) {
// On extrait uniquement les clés des tableaux dans une variable $clé.
extract ($row);
echo "<tr><td>'$id'</td><td>'$pseudo'</td></tr>\n";
}
echo '</table>';
}
else
{
// Le nombre de résultats est égal à 0, rien trouvé !
echo '<p>Pas de résultats !</p>';
}
?>
<!-- Fin du code -->

Voila, dis-moi ce que tu en penses !

Bien amicalement,
Abdel.



-----Message d'origine----- From: Abdel
Sent: Saturday, July 29, 2017 5:31 PM
To: progliste@ml.free.fr
Subject: [progliste] Re: Recherche de caractères et base de données

Salut Christophe,

Dans ce cas, tu peux utiliser une requête préparée avec marqueur
non-nominatif "?".

Quelle méthode utilise-tu pour exécuter ta requête préparée?

Quelle est la version du PHP que tu utilises sur ton serveur?

Si elle  est assez récente, je te conseille vivement de passer à mysqli ou
PDO, car ces 2 extensions proposent la méthode prepare en orienté objet, qui
est fort appréciable et beaucoup plus d'actualité.

Si tu veux toutefois rester avec mySQL, essai ce qui suit :

PREPARE recherche FROM 'SELECT id, pseudo FROM membre WHERE pseudo LIKE ?';
SET @pseudo = CONCAT ('%', $_POST['pseudo'], '%';
EXECUTE recherche USING @pseudo;

Bien amicalement,
Abdel.

-----Message d'origine----- From: Christophe Garnier
Sent: Friday, July 28, 2017 9:34 AM
To: Proglist
Subject: [progliste] Re: Recherche de caractères et b ase de données


Être Bonjour. Merci beaucoup pour ces explications mais ça ne fonctionne
pas. Concrètement j’utilise des requêtes préparées avec des marqueurs et non
des variables ;
Ma requête de base est
'select id, pseudo from membre where pseudo =:pseudo';
Si je la modifie avec like % j’ai essayé
'select id, pseudo from membre where pseudo like "%:pseudo%"';
Quand je dis ça marche pas je veux dire précisément que la recherche ne
donne aucun résultat même en mettant le pseudo complet dans la recherche.
Merci



Le 27 juil. 2017 à 08:25, Abdel <abdelkrim.bens...@free.fr> a écrit :

Coucou Christophe,

Je corrige tout d'abord le sujet de la discussion car il est un peu confus avec ces caractères illisibles.

Lorsque tu soumets ton formulaire en utilisant la méthode "post", à un fichier script de traitement PHP, tu dois savoir que les champs de ton formulaire soumis se transforment automatiquement en variables PHP de type tableau associatif.

Ainsi, un champ "pseudo" dans le formulaire original verra sa valeur stockée dans une variable $_POST['pseudo'] une fois dans le script de traitement PHP.

Puisque ta version de PHP t'autorise encore à utiliser mysql, voici comment tu devras orienter ta requête.

// On stocke le champ pseudo dans une variable $pseudo.
$pseudo = $_POST['pseudo'];
// Voici maintenant la requête de recherche des occurrences saisies dans le formulaire. $requete = mysql_query ("select id, pseudo from membre where pseudo like '%$pseudo%'");

Si ta bdd comporte des données personnelles, il est préférable d'échapper les occurrences saisies avec la fonction mysql_real_escape_string, afin de protéger tes données contre les injections SQL.

// On stocke le champ pseudo dans une variable $pseudo en échappant les caractères spéciaux.
$pseudo = mysql_real_escape_string($_POST['pseudo']);
// Voici maintenant la requête de recherche des occurrences saisies dans le formulaire. $requete = mysql_query ("select id, pseudo from membre where pseudo like '%$pseudo%'");

En fait, on peut considérer que notre ami Yannick a répondu à 90% de ta demande, je me suis chargé des 10% restants en répondant à ta seconde question.

Voili voilou, teste et dis-nous si ça marche.

Bien amicalement,
Abdel.

-----Message d'origine----- From: Christophe Garnier
Sent: Tuesday, July 25, 2017 2:24 PM
To: Proglist
Subject: [progliste] �tf-8?B?UmU6IFtwcm9nbGlzdGVdIO+/vXRmLTg/UT9SZWNoZXJjaGVfZGVf?�tf-8?B?Y2FyYWN0w6hyZXNfZXRfYmFzZV9kZV9kb25uw6llc18/TWVzc2FnZS1JZDog?�tf-8?B?PDFGNkM3RSAyQS1DQzVGLTQ4NTctQUI3RS1ENUVDNDY1RDI4RDNAZ21haWwu?�tf-8?B?Y29tPg�Date: Tue, 25 Jul 2017 15:24:17 +0200

bonjour. Merci c’est très claire. Mais dans l’administration du site je veux par exemple dans un champ de formulaire, rechercher un utilisateur qui s’appelle christophe. Mais admettons que je ne sache pas exactement comment ça s’écrit. Je veux rentrer par exemple tophe dans mon champ de formulaire. ensuite je veux qu’en validant la recherche, qu’elle trouve tous les éléments qui contiennent tophe. Je traite ça en php et mysql via des requêtes préparées. Pour l’instant voici la requête que j’avais effectué avant de poser la question sur le forum.


'select id, pseudo from membre where pseudo =:pseudo';
Merci


Le 25 juil. 2017 à 13:45, Yannick Youalé <mailtoloco2...@gmail.com> a écrit :

Salut Christophe,


Pour résoudre ton problème tu dois apprendre à placer le caractère % dans tes requêtes mysql et utiliser le mot clé de comparaison "LIKE".


Exemple pour trouver un nom qui commence par "yan" voici une requête:


SELECT nom FROM membres WHERE nom LIKE 'yan%'


Si tu veux trouver les noms qui ont la chaîne "yan" à l'intérieur, tu peux employer une requête de ce genre:

SELECT nom WHERE nom LIKE '%yan%'


Et là, quelle que soit la position de la chaîne "yan" dans le nom, il sera retenu.


J'espère que tu as compris le truc.


Yannick Daniel Youalé
La programmation est une religion. Aimez-la, ou quittez-la.
www.visuweb.net


Le 25/07/2017 à 09:30, Christophe Garnier a écrit :
Salut à tous.
Je crée une interface d’administration de mon site pour par exemple avoir la liste des membres, supprimer un ou tous les membres…
J’utilise mysql pour la bdd.
Si je cherche un membre par son pseudo complet ça fonctionne bien. Par contre si je frappe par exemple les 4 premières lettres du pseudo, il n’est pas trouvé. Quelle est la solution pour que ça fonctionne ?
Merci

Progliste :
Pour se d�sinscrire de la liste : mailto:progliste-requ...@ml.free.fr?subject=unsubscribe

Pour voir les archives de la liste :
http://www.mail-archive.com/progliste@ml.free.fr/

Je vous rappelle que les pi�ces jointe sont activ�s leur taille est limit� � 2 MO

Pour acc�der aux fichiers de la liste
http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
Ou en utilisant la nouvelle page de partage :
http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt
Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en priv�, je vous r�pondrez en priv�.



---
Cet email a fait l'objet d'une analyse antivirus par AVG.
http://www.avg.com



Progliste :
Pour se d�sinscrire de la liste : mailto:progliste-requ...@ml.free.fr?subject=unsubscribe

Pour voir les archives de la liste :
http://www.mail-archive.com/progliste@ml.free.fr/

Je vous rappelle que les pi�ces jointe sont activ�s leur taille est limit� � 2 MO
Pour acc�der aux fichiers de la liste
http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
Ou en utilisant la nouvelle page de partage :
http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt
Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en priv�, je vous r�pondrez en priv�.



Progliste :
Pour se d�sinscrire de la liste : mailto:progliste-requ...@ml.free.fr?subject=unsubscribe

Pour voir les archives de la liste :
http://www.mail-archive.com/progliste@ml.free.fr/

Je vous rappelle que les pi�ces jointe sont activ�s leur taille est limit� � 2 MO

Pour acc�der aux fichiers de la liste
http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
Ou en utilisant la nouvelle page de partage :
http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt
Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en priv�, je vous r�pondrez en priv�.

Progliste :
Pour se d�sinscrire de la liste : mailto:progliste-requ...@ml.free.fr?subject=unsubscribe

Pour voir les archives de la liste :
http://www.mail-archive.com/progliste@ml.free.fr/

Je vous rappelle que les pi�ces jointe sont activ�s leur taille est limit� � 2 MO
Pour acc�der aux fichiers de la liste
http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
Ou en utilisant la nouvelle page de partage :
http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt
Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en priv�, je vous r�pondrez en priv�.



Progliste :
Pour se d�sinscrire de la liste :
mailto:progliste-requ...@ml.free.fr?subject=unsubscribe

Pour voir les archives de la liste :
http://www.mail-archive.com/progliste@ml.free.fr/

Je vous rappelle que les pi�ces jointe sont activ�s leur taille est limit� �
2 MO

Pour acc�der aux fichiers de la liste
http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
Ou en utilisant la nouvelle page de partage :
http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt
Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en priv�, je
vous r�pondrez en priv�.

Progliste :
Pour se d�sinscrire de la liste : mailto:progliste-requ...@ml.free.fr?subject=unsubscribe

Pour voir les archives de la liste :
http://www.mail-archive.com/progliste@ml.free.fr/

Je vous rappelle que les pi�ces jointe sont activ�s leur taille est limit� � 2 MO

Pour acc�der aux fichiers de la liste
http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
Ou en utilisant la nouvelle page de partage :
http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt
Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en priv�, je vous r�pondrez en priv�.
<view.php>

Progliste :
Pour se d�sinscrire de la liste : mailto:progliste-requ...@ml.free.fr?subject=unsubscribe

Pour voir les archives de la liste :
http://www.mail-archive.com/progliste@ml.free.fr/

Je vous rappelle que les pi�ces jointe sont activ�s leur taille est limit� � 2 MO

Pour acc�der aux fichiers de la liste
http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
Ou en utilisant la nouvelle page de partage :
http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt
Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en priv�, je vous r�pondrez en priv�.

Progliste :
Pour se d�sinscrire de la liste : 
mailto:progliste-requ...@ml.free.fr?subject=unsubscribe

Pour voir les archives de la liste :
http://www.mail-archive.com/progliste@ml.free.fr/       

Je vous rappelle que les pièces jointe sont activés leur taille est limité à 2 MO
Pour acc�der aux fichiers de la liste
http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
Ou en utilisant la nouvelle page de partage :
http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt
Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en priv�, je 
vous r�pondrez en priv�.
        
        

Répondre à