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

Aide pour une requête PHP

Lolopy
Lolopy
Niveau 67
07 août 2018 à 01:28:47

Bonjour,

Voici ma requête

$query = $db->prepare("SELECT id FROM FOLDER WHERE id_folder=:id_folder");
    while ($searchFolder != null) {
      $query->bindParam(':id_folder', $searchFolder);
      $query->execute();
      $searchFolderTarget = $query->fetch();
      $itemToRename[] = $searchFolderTarget;
      $searchFolder = $searchFolderTarget["id"];
    }

Le problème c'est que si ya plusieurs id avec le meme id_folder il en prend qu'un et du coup je perds les autres.
Moi je veux tous les prendre et remonter jusqu’à la racine dans tous les cas pour avoir tout au complet.

https://image.noelshack.com/fichiers/2018/32/2/1533598076-test.png

Savez vous comment faire ?

Merci

Pseudo supprimé
Pseudo supprimé 07 août 2018 à 08:28:49

fetchAll()

Lolopy
Lolopy
Niveau 67
07 août 2018 à 13:52:10

J'ai tenté mais ça renvoie du vide et ça permet pas de partir dans plusieurs direction

deepblue
deepblue
Niveau 16
07 août 2018 à 14:36:12

Tu pourrais filer un dump sql avec les colonnes "id" et "id_folder" stp ? Histoire de faire des tests.

20_cent_2017
20_cent_2017
Niveau 10
07 août 2018 à 14:36:45

test ta requête sur phpmyadmin déjà

deepblue
deepblue
Niveau 16
07 août 2018 à 14:49:40

…et sans faire de test, une solution naïve (peut-être fonctionnelle) :

<?php

function fooBar(PDOStatement $query, $searchFolder, array &$itemsToRename = null) {
    if (null === $itemsToRename) {
        $itemsToRename = [];
    }

    $query->bindParam(':id_folder', $searchFolder);
    $query->execute();

    $results = $query->fetchAll();

    foreach ($results as $result) {
        $itemsToRename[] = $result;

        fooBar($query, $result['id'], $itemsToRename);
    }

    return $itemsToRename;
}

$query = $db->prepare('SELECT id FROM FOLDER WHERE id_folder=:id_folder');
$searchFolder = ????;

$itemsToRename = fooBar($query, $searchFolder);
Lolopy
Lolopy
Niveau 67
07 août 2018 à 17:46:33

Le 07 août 2018 à 14:36:12 deepblue a écrit :
Tu pourrais filer un dump sql avec les colonnes "id" et "id_folder" stp ? Histoire de faire des tests.

Oui bien sur tient : http://www.sendbox.fr/6c34e5ed3cb553a1/folder.sql
Merci.

deepblue
deepblue
Niveau 16
07 août 2018 à 18:11:57

https://gist.deblan.org/en/view/5b69c482d05bd/72670da989f5a86602f92f1beb4fe005808f21d5 affiche https://gist.deblan.org/en/view/5b69c497f2f08/b1b880c3663e4f6e345569effacf3e99e7172224

Lolopy
Lolopy
Niveau 67
07 août 2018 à 18:24:35

Hum du coup si je vois bien c'est fonctionnel ? Si oui, merci.
Par contre je vois pas trop comment les valeurs sont sauvegardés pour aller dans toutes les directions.

Message édité le 07 août 2018 à 18:26:16 par Lolopy
deepblue
deepblue
Niveau 16
08 août 2018 à 09:32:19

Sauf erreur d'interprétation, j'ai répliqué ce que tu voulais faire dans ton premier post.

Il y a plusieurs choses à comprendre dans ce bout de code. La première est l'ensemble des paramètres qui prend la fonction "fooBar" :

  1. Une requête préparée
  2. Une valeur de "id_folder"
  3. Un tableau qui, par sa définition dans la signature de la fonction, sera modifiable. Ce paramètre peut ne pas être saisi

Avant d'aller plus loin, essaye de comprendre ce comportement :
- Code : https://gist.deblan.org/en/view/5b6a9a4b36c89/93347e62bca01e4844671f8a19a9117a9f1839f0
- Résultat : https://gist.deblan.org/en/view/5b6a9a64019e2/f2af705b8a40d85fe2d462ceed6e0d2ce5cfd290

Et celui ci :
- Code : https://gist.deblan.org/en/view/5b6a9a4b36c89/7a132f26211bb9c0e64d719fff547cdb31e4c02f
- Résultat : https://gist.deblan.org/en/view/5b6a9a64019e2/8c3811f4d4491b759c90b5041ef91ccc4a450e07

Tu remarques que la fonction "fooBar" s'appelle elle-même. Si tu comprends les 2 comportements précédents, tu comprendras comment mon code (semble) résoudre ton problème.

20_cent_2017
20_cent_2017
Niveau 10
08 août 2018 à 11:28:29

Le 08 août 2018 à 09:32:19 deepblue a écrit :
Sauf erreur d'interprétation, j'ai répliqué ce que tu voulais faire dans ton premier post.

Il y a plusieurs choses à comprendre dans ce bout de code. La première est l'ensemble des paramètres qui prend la fonction "fooBar" :

  1. Une requête préparée
  2. Une valeur de "id_folder"
  3. Un tableau qui, par sa définition dans la signature de la fonction, sera modifiable. Ce paramètre peut ne pas être saisi

Avant d'aller plus loin, essaye de comprendre ce comportement :
- Code : https://gist.deblan.org/en/view/5b6a9a4b36c89/93347e62bca01e4844671f8a19a9117a9f1839f0
- Résultat : https://gist.deblan.org/en/view/5b6a9a64019e2/f2af705b8a40d85fe2d462ceed6e0d2ce5cfd290

Et celui ci :
- Code : https://gist.deblan.org/en/view/5b6a9a4b36c89/7a132f26211bb9c0e64d719fff547cdb31e4c02f
- Résultat : https://gist.deblan.org/en/view/5b6a9a64019e2/8c3811f4d4491b759c90b5041ef91ccc4a450e07

Tu remarques que la fonction "fooBar" s'appelle elle-même. Si tu comprends les 2 comportements précédents, tu comprendras comment mon code (semble) résoudre ton problème.

pas besoins de faire une fonction récursive pour récupérer toutes enregistrement qui on id_folder identique !!!!!

Pseudo supprimé
Pseudo supprimé 08 août 2018 à 12:49:38

Le 07 août 2018 à 13:52:10 Lolopy a écrit :
J'ai tenté mais ça renvoie du vide et ça permet pas de partir dans plusieurs direction

si $query->fetch() retourne quelque chose, étonnant que $query->fetchAll() ne retourne rien :-)))

deepblue
deepblue
Niveau 16
08 août 2018 à 13:55:41

20_cent_2017, ça tombe bien, ce n'est pas ce que fait le code :ok: (!!!!!)

Thymotep
Thymotep
Niveau 10
08 août 2018 à 13:57:39

Le 08 août 2018 à 13:55:41 deepblue a écrit :
20_cent_2017, ça tombe bien, ce n'est pas ce que fait le code :ok: (!!!!!)

@Deepblue, je te présente 20_cent_2017, qui n'y comprends jamais rien mais qui la ramène sur tous les sujets. Désespérant :-(

Lolopy
Lolopy
Niveau 67
08 août 2018 à 16:16:31

Le 08 août 2018 à 12:49:38 tirealatete a écrit :

Le 07 août 2018 à 13:52:10 Lolopy a écrit :
J'ai tenté mais ça renvoie du vide et ça permet pas de partir dans plusieurs direction

si $query->fetch() retourne quelque chose, étonnant que $query->fetchAll() ne retourne rien :-)))

Ben oui mais des fois y a de bugs on comprends pas.

deepblue merci je vais voir et je reviendrais te dire mais a première vu tu as juste rajouté & dans ton code chose que je ne connais pas.

Message édité le 08 août 2018 à 16:18:28 par Lolopy
deepblue
deepblue
Niveau 16
08 août 2018 à 16:25:21

@Lolopy http://php.net/manual/fr/functions.arguments.php#functions.arguments.by-reference

@thymotep ah ben… :siffle:

20_cent_2017
20_cent_2017
Niveau 10
08 août 2018 à 20:22:48

Joli troll !!!

Le code marche bien...

affiche les erreurs ;)
FOLDER n'est pas folder !

Merci au troll j'ai perduis une heure de mon temps pour ça !

PS: par contre je vois pas le rapport avec les fonction récursive et ta solution au vu de ton explication.

Message édité le 08 août 2018 à 20:24:42 par 20_cent_2017
Lolopy
Lolopy
Niveau 67
09 août 2018 à 00:46:43

Pardon?

deepblue
deepblue
Niveau 16
09 août 2018 à 09:09:25

20_cent_2017, la casse dépend de l'OS et l'op doit tourner sous windows donc FOLDER == folder == FOLder dans son système de fichier. Une fonction qui s'appelle elle-même, c'est ce qu'on appelle la récursivité.

Lolopy, effectivement, le "&" dans la déclaration d'un paramètre d'une fonction permet de modifier le contenu de la variable lors de l'appel et ce, en dehors de la fonction (cf les 2 exemples où le var_dump met en évidence que $fruits [déclaré à l'extérieur de la fonction] est bien modifié ou pas par la fonction). Dans mon code, fooBar() appelle elle même fooBar() en déclarant au préalable $itemsToRename s'il n'est pas renseigné en paramètre. J'aurais aussi pu faire ça :

$searchFolder = 77;
$itemsToRename = [];
fooBar($query, $searchFolder, $itemsToRename);

var_dump($itemsToRename);

...mais c'est mois joli je trouve.

Message édité le 09 août 2018 à 09:09:39 par deepblue
20_cent_2017
20_cent_2017
Niveau 10
13 août 2018 à 10:07:12

J’ai vue null part qu’il était sous Windows

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