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

Langage PHP Discussion :

[Tableaux] Bonne façon de faire ou non ?


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 24
    Points : 14
    Points
    14
    Par défaut [Tableaux] Bonne façon de faire ou non ?
    Bonjour à tous,
    Je me bricole un petit back-office pour mon site perso et je tombe sur une colle syntaxique.
    Découvrant php petit à petit, je m'attaque aux fonctions ...

    J'ai une page login.php où je souhaite gérer mes logins (recherche, ajout, modif et suppression) pour l'admin et une partie privée du site. Après chaque validation pour la modif, l'ajout etc ... j'affiche un tableau avec la totalité de ma base. Pour éviter de répéter des fonctions d'affichages j'ai créé cette fonction (ex pour l'admin)
    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
    function rech_admin($param1,$cond){
    	GLOBAL $connection;
    	GLOBAL $result;
     
    	if($cond=="rech"){
    		$sql2="SELECT id_admin, nom_admin,log_admin FROM login_admin WHERE nom_admin LIKE '$param1%' ORDER BY (id_admin) DESC";
    	}
    	else if($cond=="id"){
    		$sql2="SELECT id_admin, nom_admin,log_admin FROM login_admin WHERE id_admin='$param1'";
    	}
    	$req3=mysql_query($sql3, $connection);
     
    	GLOBAL $nb3;
    	$nb3=mysql_num_rows($req3);
    	if($nb3!=0){
    		while($res3=mysql_fetch_array($req3)){
    			GLOBAL $id_admin3;
    			$id_admin3[]=$res3['id_admin'];
    			GLOBAL $nom_admin3;
    			$nom_admin3[]=$res3['nom_admin'];
    			GLOBAL $log_admin3;
    			$log_admin3[]=$res3['log_admin'];
    		}
    	}
    }
    J'aurais voulu savoir si ce genre de chose est correcte ou si c'est une totale aberration ...
    Merci pour vos conseils

  2. #2
    Membre expérimenté
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Points : 1 341
    Points
    1 341
    Par défaut
    D'une façon générale, c'est variable globale, c'est mal.
    On sait ou elle est déclarée, mais jamais ou elle est utilisée (ni même si elle est utilisée), bref, a part dans quelques cas très spécifique, GLOBAL est a bannir.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	while($res3=mysql_fetch_array($req3)){
    			GLOBAL $id_admin3;
    			$id_admin3[]=$res3['id_admin'];
    			GLOBAL $nom_admin3;
    			$nom_admin3[]=$res3['nom_admin'];
    			GLOBAL $log_admin3;
    			$log_admin3[]=$res3['log_admin'];
    		}
    Cette portion notamment est une horreur.
    1/ On ne déclare pas des variables DANS une boucle. A plus forte raison si c'est un tableau que tu veux garder.
    2/ Le global ne sert à rien. Déclare un tableau a entrées multiples ($tab['id'][], $tab['nom'][], $tab[l'og'][]), et en sortie de fonction fait un return($tab);

    Pareil pour ton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    GLOBAL $nb3;
    $nb3=mysql_num_rows($req3);
    if($nb3!=0){
    A quoi ca te sert d'avoir ca en global ? C'est clairement une variable locale faite juste pour valider le nombre de réponses de ta requête.

    Accesoirement tu utilises :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $req3=mysql_query($sql3, $connection);
    Sans avoir défini (meme en global) $sql3, ca ne peut pas fonctionner.

    Tu as également un
    qui ne sert à rien.

    Bref, faire des fonctions, c'est indispensable, mais les globals sont absolument à bannir.
    En esperant ne pas avoir été trop sauvage

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 24
    Points : 14
    Points
    14
    Par défaut
    non, non c'est cool pas de problème. Faut bien se faire recadrer quand on apprend tout seul !!!
    Pour sql3 c'est juste que je me suis trompé en copiant le code ...c'est pas $sql2 mais bien sql3 !

    Je pense que c'est l'utilité du return que j'ai pas encore bien saisi ... et le global m'a permis de récupérer ce que j 'arrivais pas à retrouver.

    Merci pour les conseils ...

  4. #4
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Soit une fonction Somme() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    function Somme($val1,$val2){
        $resultat = $val1 + $val2;
        return $resultat;
    }
     
    $somme_nombres = Somme(1,3);
    echo $somme_nombres; // affiche 4
    ?>
    return permet à la fonction de renvoyer une valeur.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 24
    Points : 14
    Points
    14
    Par défaut
    Déclare un tableau a entrées multiples ($tab['id'][], $tab['nom'][], $tab[l'og'][]), et en sortie de fonction fait un return($tab);
    Je sens que ma réponse est là mais je bloque comment je le remplis des données récupérées par ma requête ?
    Halala je sens que je vais en reprendre une couche !!

    un petit coup de pouce ?

  6. #6
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // ...
    $tab = Array();
    while($res3=mysql_fetch_array($req3)){
    			$tab[] = $res3;
    		}
     
    // ...
    return $tab;
    Tu peux ensuite utiliser ta fonction comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $admins = rech_admin();
    foreach($admins as $admin)
        {
        echo $admins['id_admin'];
        }

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 24
    Points : 14
    Points
    14
    Par défaut
    Bonjour,
    Merci pour cette réponse sur un plateau !!!

    Je connaissais pas du tout cette façon de stocker des valeurs récupérées d'une bdd ... Encore beaucoup à apprendre mais là ça m'ouvre sur de nouvelles perspectives !!!

    Merci beaucoup ! et sûrement à bientôt pour de nouvelles horreurs !!!

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 24
    Points : 14
    Points
    14
    Par défaut
    Me revoilà ... déjà ! ... je vais dépasser le cadre des fonctions mais bon ...

    alors ça marche parfaitement mais il y a ce petit truc que je ne comprends pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $tab = Array();
    while($res3=mysql_fetch_array($req3)){
    			$tab[] = $res3;
    		}
    Le peu que j'ai utilisé php etmysql, j 'ai toujours fait comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $id_admin3[]=$res3['id_admin'];
    Alors, est ce que lorsqu'on déclare un tableau, on a plus besoin de déterminer le champ de la base de données qu'on recherche ($res3['id_admin']) ? ... ce qui serait le cas lorsqu'on veut déclarer des variables ??

  9. #9
    Membre expérimenté
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Points : 1 341
    Points
    1 341
    Par défaut
    En fait avec cette notation, dans $tab, tu as le contenu de tous les $res.
    Ce qui fait que pour lire le champ id_admin du premier enregistrement, tu fais :

  10. #10
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Tu ne détermines pas de champs dans ta technique, tu vas juste chercher l'index 'id_admin' du tableau $res3, c'est différent.


    Ma technique consiste à stocker les tableaux $res3 dans $tab. $tab est un tableau de tableaux.

    Donc comme je l'ai écrit ci-dessus, tu peux afficher l'id du premier admin en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $admins = rech_admin();
    echo $admins[0]['id_admin'];

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 24
    Points : 14
    Points
    14
    Par défaut
    Ok, c'est bien ce que je pensais avoir compris mais je préférais être sûr !!
    Un GRAND MERCI à tous les deux pour vos réponses !
    Je viens de finir de recoder ma page, tout fonctionne parfaitement et tout ça sans global !!!!
    Merci pour le coup de main !!
    A bientôt ... très bientôt

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. La "bonne façon" de faire du parallelisme
    Par drunkskater dans le forum Caml
    Réponses: 6
    Dernier message: 30/09/2013, 20h53
  2. Avoir la bonne façon de faire
    Par absot dans le forum Langage SQL
    Réponses: 1
    Dernier message: 13/03/2012, 13h38
  3. Multithread, bonne façon de faire
    Par Ghurdyl dans le forum Windows Forms
    Réponses: 4
    Dernier message: 04/03/2010, 12h08
  4. Question sur la bonne façon de faire un JMenuBar
    Par bit_o dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 26/06/2007, 10h26
  5. [Checkbox] La bonne façon et comment faire
    Par Meewix dans le forum Langage
    Réponses: 9
    Dernier message: 19/10/2006, 09h23

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