Formulaire d'auto complétion

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Formulaire d'auto complétion

Re: Formulaire d'auto complétion

par yann18 » 05 juil. 2016, 22:46

Attention! la méthode fetch() n'existe plus en php5.4. (cf . fetch).Pour mysqli ta requête est invalide parcequ'ell interprète la fonction concat() pendant la préparation
$term = $term . '%';
$requete = $mysqli->prepare("SELECT title FROM ma_table WHERE title LIKE ?");
$requete->bind_param('s', $term);
$requete->execute();
$res = $requete->get_result();
$array = array();
while ( $donnee= $res->fetch_assoc() ) {
    array_push($array, $donnee['title']);
}

Re: Formulaire d'auto complétion

par Ryle » 05 juil. 2016, 15:16

@or1, le ? dans la requête est lié à la requête préparée, il sera remplacé par les valeurs transmises en bind lors de l'exécution. Pour autant, j'aurais aussi tendance à préférer éviter le concat() dans la requête et préfère la façon d'écrire suivante :
$requete = $mysqli->prepare("SELECT title FROM ma_table WHERE title LIKE ?");
$requete->bind_param('s', '%' . $term . '%');
A voir également l'encodage de tes pages et fichiers. En ajax, tu es automatiquement en utf8 et si ton titre comporte un accent, j'ai déjà constaté des problèmes de ce genre (on récupère une chaine vide ou nulle). Tu peux tester le code suivant et voir si cela change quelque chose:
while ($donnee = $requete->fetch()) {
    array_push($array, utf8_encode($donnee['title']) );
}

Re: Formulaire d'auto complétion

par moogli » 05 juil. 2016, 15:14

salut,

c'est quoi le code qui te donnes ce null ?

on peu avoir la table et un jeux de données simple pour tester ?

@+

Re: Formulaire d'auto complétion

par MaxP » 05 juil. 2016, 14:57

Je pense avoir un problème de requête ainsi qu'un problème de JS...

Re: Formulaire d'auto complétion

par MaxP » 04 juil. 2016, 17:29

Malheureusement moogli je n'obtiens pas du tout ce résultat grâce à ton code. J'ai []
Et lorsque dans l'url je fais une recherche j'ai : [null]
Pour un mot dont je devrais avoir une réponse...
Peut-être une erreur de requête en effet mais je ne saurais laquelle puisqu'en testant avec un select et un echo tout est ok, je récupère bien la base de données donc j'ai une grosse incompréhension.

Re: Formulaire d'auto complétion

par or 1 » 04 juil. 2016, 14:13

Il semble qu'il y ait une erreur dans votre requête SQL. Le message ci-bas peut vous aider à en trouver la cause.
ERROR: Ponctuation invalide @ 21
STR: ?,
SQL: SELECT CONCAT('My', ?, 'QL')

SELECT CONCAT( 'My', '?', 'QL' )
ne retourne pas d'erreur.

Re: Formulaire d'auto complétion

par moogli » 04 juil. 2016, 12:26

salut
Et pour info je n'ai aucun retour de requête HXR
qu'entends tu pas aucun retour ?

si tu accèdes directement à recup_nom.php dans ton navigateur préféré (ou un client rest) tu devrais voir le tableau JSON correspondant (comme [ "Choice1", "Choice2" ] )

as tu testé la requête SQL ?

Perso j'utiliserais plutôt un objet (comme dans cet exemple) histoire d'utiliser l'id et non le nom dans la suite (plus fiable).

Pour info tu as une affectation de $term en trop, je pense que ce que tu veux est ceci ? :
<?php

require 'inc_connexion.php';
$term = filter_input(INPUT_GET, 'term');

$requete = $mysqli->prepare("SELECT title FROM ma_table WHERE title LIKE CONCAT('%', ?, '%');");
$requete->bind_param('s', $term);
$requete->execute();
$array = array();

while ($donnee = $requete->fetch()) {
    array_push($array, $donnee['title']);
}
echo json_encode($array);
@+

Re: Formulaire d'auto complétion

par MaxP » 02 juil. 2016, 10:58

Et pour info je n'ai aucun retour de requête HXR

Formulaire d'auto complétion

par MaxP » 01 juil. 2016, 16:31

Bonjour,

Voici j'ai un petit soucis avec mon formulaire d'auto complétion qui ne comporte aucune erreur mais qui ne m'affiche rien du tout lorsque je commence une saisie...

J'ai du jQuery et jQuery-UI appelé dans mon header et voici le contenu de mon formulaire ainsi que de ma page de récupération de données :

Extrait du formulaire
<input type='text' id='nom' placeholder='Tapez un nom'>
      <script>
      jQuery(document).ready()
        $( '#nom' ).autocomplete({
          source : 'recup_nom.php',
          minLength : 2
        });
      </script>
Page de récupération
<?php require('inc_connexion.php'); ?>
<?php
    $term = filter_input(INPUT_GET, 'term');
    $term = $_GET['term'];
 
    $requete = $mysqli->prepare("SELECT title FROM ma_table WHERE title LIKE CONCAT('%', ?, '%');");
    $requete->bind_param('s', $term);
    $requete->execute();
    $array = array();
     
    while($donnee = $requete->fetch())
    {
        array_push($array, $donnee['title']);
    }
    echo json_encode($array);
?>
Merci à tous :)