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 :

Comment exécuter une requête SQL au seins d'une fonction?


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2010
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 128
    Par défaut Comment exécuter une requête SQL au seins d'une fonction?
    Bonjour,

    Comment exécuter et exploiter les données d'une requête SQL inclus dans une fonction?

    Par exemple pour la requête suivante ou je souhaite utiliser les données en dehors de la boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $article = mysql_query("SELECT id,titre FROM CONTENU WHERE id=$id",dbconnect());
    while ($menu = mysql_fetch_array($article)) {
    	$identifiant = $menu['id'];
    	$titre = $menu['titre'];
    }
    echo $identifiant.'-'.$titre;
    Supposons que je veuille le même résultat mais que la requête soit au seins d'une fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function article($id){
    	$article = mysql_query("SELECT id,titre FROM CONTENU WHERE id=$id",dbconnect());
    	//?????
    	return ??;
    	}
    Comment procède t'on?

    Merci

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Même dans le premier cas, passer par $identifiant et $titre n'est pas utile.
    Tu peux faire
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre extrêmement actif
    Avatar de MarieKisSlaJoue
    Homme Profil pro
    Ingénieur Cloud
    Inscrit en
    Mai 2012
    Messages
    1 145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Roumanie

    Informations professionnelles :
    Activité : Ingénieur Cloud
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 145
    Billets dans le blog
    20
    Par défaut
    Visiblement c'est le quoi retourner qui te pose problème. Selon ce que ta requête fait tu peux renvoyer directement un objet. Ou bien les informations envoyé par la requête dans un tableau associatif comme tu as fait plus haut..
    Ce post à été écrit par un panda
    Apollo 11 - AGC revue de code
    -- qwerty keybord

  4. #4
    Membre confirmé
    Inscrit en
    Septembre 2010
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 128
    Par défaut
    Merci de vos réponses mais je n'ai toujours pas comprit .
    Si je fais (en supposant que ce soit correcte):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function article($id){
    	$article = mysql_query("SELECT id,titre FROM CONTENU WHERE id=$id",dbconnect());
    	$menu = mysql_fetch_array($article);
    	return $menu;
    }
    Comment je procède pour obtenir le résultat de la variable id et titre en dehors de la fonction?

    Au début je pensais à un simple echo $menu['titre']; et idem pour l'id mais ça aurait été trop simple ...

  5. #5
    Membre émérite
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Par défaut
    Salut,

    Etant donné que ta fonction article ne retourne qu'un résultat, utilise plutot mysql_fetch_row() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function article($id){
    	$article = mysql_query("SELECT id,titre FROM CONTENU WHERE id=$id",dbconnect());
    	$menu = mysql_fetch_row($article);
    	return $menu;
    }
    Et pour afficher le résultat il suffit de faire un echo $menu['titre']; comme tu le pensait

  6. #6
    Membre confirmé
    Inscrit en
    Septembre 2010
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 128
    Par défaut
    Undefined variable: menu in ...
    A chaque fois que je tente un truc, j'y ai le droit à celle là ^^.

  7. #7
    Membre émérite
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Par défaut
    Tu l'appel comment ta fonction ?

  8. #8
    Membre confirmé
    Inscrit en
    Septembre 2010
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 128
    Par défaut
    Comment ça comment je l'appel??
    Je sent que je vais me faire taper sur les doigts...

    Voici ce que je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $id_article = article($params1[0]);//identifiant de l'article
     
    function article($id){
    	$article = mysql_query("SELECT id,titre FROM CONTENU WHERE id=$id",dbconnect());
    	$menu = mysql_fetch_row($article);
    	return $menu;
    	}
     
    echo $menu['titre'];
    Il me manque quelque chose?

  9. #9
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Ta variable $menu est déclarée dans ta fonction, elle disparait donc logiquement à la fin de l'exécution de celle-ci (voir le concept de variable locale).
    Ce que je ne comprends pas, c'est que tu affectes à une variable ($id_article) le résultat de l'exécution de ta fonction, pourquoi ne veux-tu pas l'utiliser ?
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  10. #10
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Par défaut
    la méthode article($id) retourne un tableau de rows.pour l'appeler il te suffit de lui passer en paramètre une valeur et parcourir le tableau pour extraire les données:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    //appel article($id);
    //en faisant debug tu dois pouvoir voir les articles retournés
    var_dump(article($params1[0]) );
     
     
    foreach(article($params1[0]) as $value){
    echo $value['titre'];
     
    }

  11. #11
    Membre confirmé
    Inscrit en
    Septembre 2010
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 128
    Par défaut
    Ce que je ne comprends pas, c'est que tu affectes à une variable ($id_article) le résultat de l'exécution de ta fonction, pourquoi ne veux-tu pas l'utiliser ?
    Je vais reprendre les choses dans l'ordre pour bien vous expliquer.
    Je "m'amuse" à créer un petit CMS et suite à une question posé sur un autre forum concernant mon url rewriting, on ma orienté sur le "front controller" et notamment http://julien-pauli.developpez.com/t...vc-controleur/ . J'essaye donc de suivre la méthode de ce lien pour dissocier un maximum les fonctions, le "controller" et le PHP du XHTML.

    Pour ce teste j'utilise juste 2 pages:
    menu.php qui liste des articles en BD.
    page.php qui affiche le contenu de chaque article.

    Le CMS dispose du mode rewrite ou pas donc mon "controller" qui est le suivant récupère l'identifiant de l'article dans l'url:
    Si GET : domaine.com/page.php?url=id/titre
    Si rewrite : domaine.com/id-titre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //----Controller----//
    if(isset($_GET['url'])){
    //sans rewrite
    	$params = explode('/', $_GET['url']);
    	$id_article = article($params[0]);
    }
    else{
    //avec rewrite
    	$params = explode('/', $_SERVER["REQUEST_URI"]);
    	$article = $params[count($params)-1];
    	$params1 = explode('-', $article);
    	$id_article = article($params1[0]);
    }
    A cela vient s'ajouter la fonction qui recherche les données de l'article par apport à l'identifiant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function article($id){
    	$article = mysql_query("SELECT id,titre,contenu,date FROM CONTENU WHERE id=$id",dbconnect());
    	$menu = mysql_fetch_row($article);
    	return $menu;
    	}
    Et c'est la ou je bloque car je suis incapable d'afficher les données.
    Mon objectif est donc d'afficher le plus simplement possible les données correspondant à l'article un peut comme dans le lien cité partie "Introduction" deuxième partie.

    Voilou, j'espère avoir répondu notamment à l’interrogation de Bovino et que vous pourrez me dire ou je merdouille.

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/10/2013, 22h47
  2. Réponses: 1
    Dernier message: 25/06/2007, 16h33
  3. [Débutant][SQL] Requête SQL à l'intérieur d'une requête SQL
    Par Kily10 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 27/10/2006, 11h54
  4. Réponses: 8
    Dernier message: 11/08/2006, 09h30
  5. Réponses: 6
    Dernier message: 20/06/2006, 14h49

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