CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[PHP/AJAX] Barre de recherche "dynamique"

EithanR
EithanR
Niveau 10
09 février 2016 à 20:59:47

Bonjour, je vais essayer d'être le plus clair possible
J'ai un site ou je liste des fichiers en php, j'ai réussi à mettre un barre de recherche qui renvoie sur la même page, avec une variable GET, que j'utilise ensuite en pregmatch et qui va donc afficher uniquement les résultats qui "match". C'est tout fonctionnel.
Ce que j'aimerais maintenant, c'est que ce script avec la variable GET du pregmatch se refresh au moment ou je commence à taper dans la barre de recherche, et donc sans actualiser la page ou quoi que ce soit. Je sais que c'est possible puisque je l'ai déjà vu, puis tout est possible en programmation.
J'ai essayé de me renseigner mais j'ai pas vraiment réussi à trouver ce qu'il me fallait. Je sais qu'il faut utiliser Javascript ou ajax, chose que je ne connais pas du tout.
Quelqu'un ?

moxo75
moxo75
Niveau 6
09 février 2016 à 21:48:17

http://codepen.io/BadPinkChicken/pen/LGXaLM

Avec quelques modifications tu peux aisément faire ce que tu veux

h_benarfa
h_benarfa
Niveau 10
09 février 2016 à 22:26:30

tu charge un fichier php pour les resultats, tu met le contenu de la barre de recherche dans une variable et tu rafraichis la div en ajax

EithanR
EithanR
Niveau 10
09 février 2016 à 22:34:49

Le 09 février 2016 à 21:48:17 moxo75 a écrit :
http://codepen.io/BadPinkChicken/pen/LGXaLM

Avec quelques modifications tu peux aisément faire ce que tu veux

Faudrait que je refasse tout mon code, ce qui me convient pas trop, mais merci quand même

Le 09 février 2016 à 22:26:30 h_benarfa a écrit :
tu charge un fichier php pour les resultats, tu met le contenu de la barre de recherche dans une variable et tu rafraichis la div en ajax

Tu pourrais essayer de m'expliquer d'avantage ? Je connais pas dut tout ajax
Et comment je mets le texte dans une variable ? actuellement j'utilise un formulaire en GET en fait

crow999
crow999
Niveau 9
10 février 2016 à 03:22:04

Google a sûrement un Json qui traine dans ses archives avec à peu près tout les mots possibles :hap:
Suffit de faire appel à ce dernier via une requête $.Ajax

EithanR
EithanR
Niveau 10
10 février 2016 à 10:58:10

Bon j'ai l'impression que pas tout le monde a bien compris ce que je voulais. Jvais essayer d'être encore plus clair
https://image.noelshack.com/fichiers/2016/06/1455097639-ss-2016-02-10-at-10-43-02.jpg
J'aimerais qu'au moment où je rentre une lettre, la liste commence à filtrer les éléments

La barre de recherche :

<div class="flexsearch">
        <div class="flexsearch--wrapper">
            <form class="flexsearch--form" action="liste.php" method="get">
                <div class="flexsearch--input-wrapper">
                    <input type="hidden" name="dir" value="<?php echo htmlspecialchars($_GET['dir']); ?>">
                    <input class="flexsearch--input" type="search" name="search" placeholder="search" id="search">
                </div>
                <input class="flexsearch--submit" type="submit" value="&#10140;"/>
            </form>
        </div>
</div>

Et une partie du script qui liste avec la prise en charge de la recherche (je sais c'est ptet pas la meilleure solution mais c'est celle que j'ai trouvé, et elle est fonctionnelle.

foreach($ffs as $ff)
    {
        if(preg_match('#'.$_GET['search'].'#i', $ff))
        {
jtepiedbouche
jtepiedbouche
Niveau 7
10 février 2016 à 11:02:38

Utilise la fonction onkeyup de js qui demande en ajax à la page php si le nom est contenu dans la liste des fichiers

Pseudo supprimé
Pseudo supprimé 10 février 2016 à 19:14:31

en effet,

la méthode difficile est
- d'appeler le fichier php sur le keyup,
- le fichier retourne la liste des résultats.
- Tu affiche la liste des résultats sous ton champ de recherche...
- tu bind des events sur les éléments.

la méthode simple c'est
-installer jquery,
- puis jqueryui et prendre l'autocomplete.

 
$( "#id_du_champ" ).autocomplete({
      source: "fichier_a_interroger.php",
      minLength: 2,  // caractère requis avant d'appeler les sources
      select: function( event, ui ) {  //fonction appelée lors de la sélection
      
      }
    });

il suffit de l'instancier sur ton champ et tu n'auras ensuite que la partie serveur à coder.

Message édité le 10 février 2016 à 19:16:24 par Pseudo supprimé
Pseudo supprimé
Pseudo supprimé 10 février 2016 à 19:16:32

en effet,

la méthode difficile est
- d'appeler le fichier php sur le keyup,
- le fichier retourne la liste des résultats.
- Tu affiche la liste des résultats sous ton champ de recherche...
- tu bind des events sur les éléments.

la méthode simple c'est
-installer jquery,
- puis jqueryui et prendre l'autocomplete.

 
$( "#id_du_champ" ).autocomplete({
      source: "fichier_a_interroger.php",
      minLength: 2,  // caractère requis avant d'appeler les sources
      select: function( event, ui ) {  //fonction appelée lors de la sélection
      
      }
    });

il suffit de l'instancier sur ton champ et tu n'auras ensuite que la partie serveur à coder.

deepblue
deepblue
Niveau 16
10 février 2016 à 19:46:26

https://dev-jvc.deblan.org/ajax/
Source : https://gitnet.fr/deblan/tests/src/master/ajax

h_benarfa
h_benarfa
Niveau 10
10 février 2016 à 22:15:52

utilise l'event .change :

$(".flexsearch--input").change(function(){ [appel du fichier de requete avec la valeur en parametre dans l'url] });

mais blinde de sécurité par contre :hap:

Message édité le 10 février 2016 à 22:16:41 par h_benarfa
EithanR
EithanR
Niveau 10
10 février 2016 à 23:54:28

Bon, j'ai continué à chercher, et j'ai plus ou moins réussi.

<input class="flexsearch--input" type="search" name="search" placeholder="search" id="search" onkeyup="refresh(this.value);">
<script>
 function refresh(inputVal){
        var searchvar = $('input[name="search"]').val();
        $("#refresh").load("liste-script.php?dir=<?php echo $_GET['dir']; ?>&search=" + searchvar);
    }
</script>
<div id="refresh">
<?php
include('liste-script.php');
?>
</div>

C'est plus ou moins fonctionnel, je m'explique :
Dans le dossier "musiques" par exemple, ca marche comme je veux (la liste s'actualise en fonction de ce que j'écris) mais dans le dossier films, je vais commencer à taper, mais ca ne s'actualise pas, tous les fichiers sont affichés. Par contre, au moment ou je rentre une lettre de trop (qui ne match avec aucun fichier), là il va actualiser et donc passer à la suite du script, à savoir afficher "Aucun résultat"

https://image.noelshack.com/fichiers/2016/06/1455144428-ss-2016-02-10-at-11-44-33.jpg https://image.noelshack.com/fichiers/2016/06/1455144416-ss-2016-02-10-at-11-44-37.jpg

https://image.noelshack.com/fichiers/2016/06/1455144476-ss-2016-02-10-at-11-45-08.jpg https://image.noelshack.com/fichiers/2016/06/1455144491-ss-2016-02-10-at-11-45-17.jpg

J'ai tenté plusieurs truc :
changer le lien de "destination" du refresh en mettant
$("#refresh").load("'''<u>liste.php</u>'''?dir=<?php echo $_GET['dir']; ?>&search=" + searchvar); ''(le lien de la page actuelle)'' au lieu de $("#refresh").load("'''<u>liste-script.php</u>'''?dir=<?php echo $_GET['dir']; ?>&search=" + searchvar); ''(où se trouve le script qui liste)''

Voilà j'espere avoir été assez clair, si quelqu'un a une piste ça serait cool

EithanR
EithanR
Niveau 10
11 février 2016 à 00:07:15

J'ai oublié
En faisant ça donc (changer le lien de destiantion) tout marche, mais le problème c'est que j'ai le header de la page et la barre de recherche qui s'affichent en double quoi...

deepblue
deepblue
Niveau 16
11 février 2016 à 00:23:19

Le 10 février 2016 à 19:46:26 deepblue a écrit :
https://dev-jvc.deblan.org/ajax/
Source : https://gitnet.fr/deblan/tests/src/master/ajax

EithanR
EithanR
Niveau 10
11 février 2016 à 00:32:07

Le deuxieme lien ne marche pas
Mais sinon j'aimerais juste essayer de régler mon problème, vu que j'y suis presque arrivé, et non pas tout recoder.
Si je vois vraiment que je n'y arrive pas, je le referais en utilisant une de vos solution.
Mais merci de ta réponse quand même

moxo75
moxo75
Niveau 6
11 février 2016 à 08:38:08

Le 11 février 2016 à 00:07:15 EithanR a écrit :
J'ai oublié
En faisant ça donc (changer le lien de destiantion) tout marche, mais le problème c'est que j'ai le header de la page et la barre de recherche qui s'affichent en double quoi...

Pour eviter ce problème découpe mieux tes fichiers (et ne met pas ton header dans list.php )

deepblue
deepblue
Niveau 16
11 février 2016 à 09:34:36

…ou alors on se met à utiliser les bonnes pratiques et on évite de faire ce que l'op a tenté de réaliser.

yes-man
yes-man
Niveau 13
11 février 2016 à 09:37:23

Vaudrait mieux veiller à faire les choses plus correctement et proprement parce que là.. :(

EDIT: deep too fast :oui:

Message édité le 11 février 2016 à 09:37:44 par yes-man
EithanR
EithanR
Niveau 10
11 février 2016 à 11:13:07

Le 11 février 2016 à 09:34:36 deepblue a écrit :
…ou alors on se met à utiliser les bonnes pratiques et on évite de faire ce que l'op a tenté de réaliser.

Bah je veux bien un lien qui me ramène pas sur un 404 alors
Et j'aimerais bien qu'on m'explique pourquoi c'est pas une bonne idée de faire ce que "l'op a tenté de réaliser"

deepblue
deepblue
Niveau 16
11 février 2016 à 11:18:13

Oops, le dépôt était privé. Au temps pour moi :ok:

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment