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 :

Passer un tableau par return


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Septembre 2017
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Septembre 2017
    Messages : 25
    Par défaut Passer un tableau par return
    Bonjour,

    Je n'ai plus développer depuis des années et je bute depuis une heure sur une difficulté.
    Je cherche à mutualiser la fonction de connexion et de requête dans un fichier à inclure.

    Voici mon fichier de fonctions : la première fonction connecte à la bdd et la seconde traite un requete. Premier fichier donc connexion.php

    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
     
     
    function connexion(){
     
    $serveur = 'localhost';
    $bdd = 'mabase';
    $utilisateur = "root";
    $mot_de_passe = "";
     
    $mysqli = new mysqli($serveur, $utilisateur, $mot_de_passe, $mabase);
     
    $mysqli->set_charset("utf8");return $mysqli;
     
    if ($mysqli->connect_error) {
        die('Erreur de connexion ('.$mysqli->connect_errno.')'. $mysqli->connect_error);
    }
     
    }
     
    function requete ($requete, $mysqli){
     
    $resultat = $mysqli->query($requete) or die ('Erreur '.$requete.' '.$mysqli->error);
     
     
    while ($ligne = $resultat->fetch_assoc()) {
     
     $resultats[] = $ligne;
     
    return $resultats; 
    }
    }
    Et voici le second fichier avec inclusion du premier. Il lance la requête et récupère les résultats (dans cette requete il doit donc récupérer 5 résultats) :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    include ('connexion.php');
     
    $mysqli=connexion();
     
     
    $requete = "SELECT DISTINCT * FROM mabase limit 5";
     
    $res=requete ($requete, $mysqli);
    ___________________________________

    Sauf que $res devrait être un tableau avec 5 résultats mais en fait ne renferme qu'un seul et unique résultat ! (mais $resultats est bien un tableau avec 5 résultats !).

    Y a t'il une meilleure façon de faire ?

    Merci de votre aide !

    Olivier

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Avec une bonne indentation de ton code, tu verrais tout de suite l'erreur.

  3. #3
    Membre averti
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Septembre 2017
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Septembre 2017
    Messages : 25
    Par défaut
    Vu ! Merci de ton aide.

    cela te parait-il une bonne façon de gérer un site avec ces deux fonctions mutualisées de cette façon ? ou y a t'il une bonne pratique différente ?

    merci !

  4. #4
    Membre Expert

    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2013
    Messages
    1 583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 583
    Par défaut
    Bonjour,

    Je pense que cela dépend de ton besoin, mais plus tu factorises plus tu gagnes du temps lors du débogage et des futurs développements.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while ($ligne = $resultat->fetch_assoc()) {
     
     $resultats[] = $ligne;
     
    return $resultats; 
    }
    Par contre ici tu fais un return juste après avoir ajouté un résultat à ton tableau du coup
    tu n'auras jamais plus.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while ($ligne = $resultat->fetch_assoc()) 
        $resultats[] = $ligne;
     return $resultats;

  5. #5
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    Enfin pour faire la même chose tu pourrais te contenter juste de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $resultat = $mysqli->query($requete) or die ('Erreur '.$requete.' '.$mysqli->error);
    return $resultat->fetch_all(MYSQLI_ASSOC);
    Généralement, on ne mélange pas dans le même fichier la connexion avec l'exécution (insertion, modification suppression, extraction, procédures stockées...)

  6. #6
    Membre averti
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Septembre 2017
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Septembre 2017
    Messages : 25
    Par défaut
    Merci de vos conseils !

    Effectivement je vais isoler la fonction de connexion dans un fichier (connexion.php par exemple) et je vais lire le tableau avec une boucle foreach pour extraire les données à afficher.
    Je profite de l'occasion pour vous poser une nouvelle question sur les bonnes pratiques : comment amener le contenu des pages ?

    A- mettre le contenu en tables et appeler les champs adhoc depuis la page index,
    B- créer physiquement des fichiers php appelés depuis la page index ?

    Je ne sais pas si je suis clair !
    Le site sera une photothèque (10 000 photos aujourd'hui car c'est une refonte d'un site que j'ai développé il y a 13 ans !) avec des formulaires de recherche multicriètres

    Olivier

Discussions similaires

  1. passer un tableau d'entier par valeurs à une fonction
    Par piotrr dans le forum Collection et Stream
    Réponses: 10
    Dernier message: 18/12/2007, 01h16
  2. Return d'un tableau par une fonction
    Par MegaNono dans le forum C
    Réponses: 4
    Dernier message: 30/04/2006, 18h26
  3. Réponses: 2
    Dernier message: 03/10/2005, 22h16
  4. [] Tri d'un tableau par ordre alphabétique
    Par cafeine dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/09/2002, 08h43

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