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] Améliorer ma façon de programmer


Sujet :

Langage PHP

  1. #1
    Invité
    Invité(e)
    Par défaut [Tableaux] Améliorer ma façon de programmer
    Bonjour,

    voici un extrait d'un fichier,

    Comment je peux améliorer ma façon de programmer.
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    <?php include("avant.php"); ?>
     
    <p align='left'>:: Admin ::</p><hr />
     
    <?PHP
    include("../config.php");
    @$action = $_REQUEST['action'];
    $id = $_REQUEST['id'];
    switch($action) {
    /*-----------------------------------------------------------------*/
    /*	AJOUT DANS MySQL			*/
    /*-----------------------------------------------------------------*/
     
    case "add";
     
    // CONNEXION A LA BASE DE DONNEE
     
    if(!$db) {echo "Connexion impossible à la base de données sur le serveur <br>Vérifiez les paramètres du fichier config.php"; exit;}
    $pseudo_membre = $_POST['pseudo_membre2'];
    $passe_membre = $_POST['passe_membre2'];
    $email = $_POST['email2'];
    $prenom = $_POST['prenom2'];
    $nom = $_POST['nom2'];
    $adresse = $_POST['adresse2'];
    $codepostal = $_POST['codepostal2'];
    $ville = $_POST['ville2'];
    $pays = $_POST['pays2'];
    $telephone = $_POST['telephone2'];
    // TEST SUR LES VALEURS SAISIES
    if($pseudo_membre==""){echo "Vous devez choisir un pseudo<br><br><a href=\"javascript:window.history.back()\">Retour</a>";exit;}
    if($passe_membre==""){echo "Vous devez choisir un mot de passe<br><br><a href=\"javascript:window.history.back()\">Retour</a>";exit;}
    // CHAMPS SUPLEMENTAIRES, inspirez-vous des lignes suivantes. Pour qu'un champs soit facultatif, omettez la ligne.
    if($email==""){echo "Vous n'avez pas saisi votre email<br><br><a href=\"javascript:window.history.back()\">Retour</a>";exit;}
    if($prenom==""){echo "Vous n'avez pas saisi votre prenom<br><br><a href=\"javascript:window.history.back()\">Retour</a>";exit;}
    if($nom==""){echo "Vous n'avez pas saisi votre nom<br><br><a href=\"javascript:window.history.back()\">Retour</a>";exit;}
    if($adresse==""){echo "Vous n'avez pas saisi votre adresse complète<br><br><a href=\"javascript:window.history.back()\">Retour</a>";exit;}
    if($codepostal==""){echo "Vous n'avez pas saisi votre code postal<br><br><a href=\"javascript:window.history.back()\">Retour</a>";exit;}
    if($ville==""){echo "Vous n'avez pas saisi la ville<br><br><a href=\"javascript:window.history.back()\">Retour</a>";exit;}
    if($pays==""){echo "Vous n'avez pas saisi votre pays<br><br><a href=\"javascript:window.history.back()\">Retour</a>";exit;}
    if($telephone==""){echo "Vous n'avez pas saisi votre numéro de téléphone<br><br><a href=\"javascript:window.history.back()\">Retour</a>";exit;}
     
     
    $requete=mysql_query("SELECT * from membre WHERE id_membre=\"$id\"",$db) or die(mysql_error());
    $num=mysql_num_rows($requete);
    if($num!=0)
    	{
    	$requete=mysql_query("UPDATE membre SET pseudo=\"$pseudo_membre\", passe=\"$passe_membre\", email=\"$email\", prenom=\"$prenom\", nom=\"$nom\", adresse=\"$adresse\", codepostal=\"$codepostal\", ville=\"$ville\", pays=\"$pays\", telephone=\"$telephone\" WHERE id_membre=\"$id\"",$db) or die(mysql_error());
    	// REDIRECTION VERS LA PAGE D'ENTREE DE L'ESPACE MEMBRE
    	echo "Merci, les informations ont bien été mise à jour. Cliquez <a href=\"uedit.php?id=$id\"><b>ici</b></a> pour voir le membre modifier.";
    	}
     
    // DECONNEXION MYSQL
    mysql_close($db);
     
    break;
     
    default;
    $req = mysql_query("SELECT * from membre WHERE id_membre=\"$id\"",$db);
    while($champ = mysql_fetch_array($req))
    {
    $pseudo_membre = $champ['pseudo'];
    $passe_membre = $champ['passe'];
    $email = $champ['email'];
    $prenom = $champ['prenom'];
    $nom = $champ['nom'];
    $adresse = $champ['adresse'];
    $codepostal = $champ['codepostal'];
    $ville = $champ['ville'];
    $pays = $champ['pays'];
    $telephone = $champ['telephone'];
    }
    echo "<center><form action=\"uedit.php\" method=\"post\">
    	<input type=\"hidden\" name=\"action\" value=\"add\">
    	<input type=\"hidden\" name=\"id\" value=\"$id\">
    	Pseudo<br><input type=\"text\" name=\"pseudo_membre2\" value=\"$pseudo_membre\"><br>
    	Mot de passe<br><input type=\"password\" name=\"passe_membre2\" value=\"$passe_membre\"><br>
        Email<br><input type=\"text\" name=\"email2\" value=\"$email\"><br>
        Prenom<br><input type=\"text\" name=\"prenom2\" value=\"$prenom\"><br>
    	Nom<br><input type=\"text\" name=\"nom2\" value=\"$nom\"><br>
    	Adresse<br><input type=\"text\" name=\"adresse2\" value=\"$adresse\"><br>
    	Code Postal<br><input type=\"text\" name=\"codepostal2\" value=\"$codepostal\"><br>
    	Ville<br><input type=\"text\" name=\"ville2\" value=\"$ville\"><br>
    	Pays<br><input type=\"text\" name=\"pays2\" value=\"$pays\"><br>
    	Numéro de Téléphone<br><input type=\"text\" name=\"telephone2\" value=\"$telephone\"><br>
    	<!--Votre Parrain<br><input type=\"text\" name=\"parrain\">--><br>
    	<input type=\"submit\" value=\"Modifier\">
    	</form></center>";
    break;
    }	
     
    include("apres.php"); ?>
    Merci pour vos conseil

  2. #2
    Membre actif
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2006
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2006
    Messages : 215
    Points : 256
    Points
    256
    Par défaut
    Salut,

    tu peux travailler avec PDO afin de rendre ton application exportable sur d'autre base de données.
    pour geré tes configurations, une class Configuration avec un patterns singleton histoire de rigoler un tit peu, peut etre aussi il faudrait que tu nettoies les données en entrée avant de travailler avec. separer peut etre la vue, de l'application metier.

    enfin, je te dit juste des idée qui me passe par la tête.

  3. #3
    Membre régulier
    Avatar de elitemedia
    Profil pro
    Inscrit en
    Août 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 115
    Points : 120
    Points
    120
    Par défaut
    Outre l'aspect technique de ton script que je n'aborderai pas car il y a pas mal de trucs à revoir (comme le @ devant le $action qui m'intrigues ou l'utilisation de $_POST quand tu utilises en tête de script un tableau $_REQUEST...) tu peux d'abord améliorer la présentation de ton code par une "convention de codage".

    Ce qui me frappe dans ton code est que tout est collé à gauche et c'est illisible.
    Ensuite, pourquoi mettre des commentaires innutiles ?

    Je te prends l'exemple tout bête de ton commentaire "// DECONNEXION MYSQL" quand tu vois une fonction juste en dessous mysql_close, crois moi, on le sait que tu fermes la connexion !

    Fais également attention à la pertinence de ces commentaires. Mettre que tu effectue une connexion à la base de données alors que celle-ci est déjà faite peut t'induire toi même et celui qui te lis en erreur.

    Ensuite, fais attention aux majuscules et minuscules. Par exemple tu ouvres 1 coup php avec <?php et ensuite avec <?PHP, pourquoi ?

    Toutes ces questions t'aideront à améliorer ta facon de coder et tu y verras bien plus clair.

    Je reprends juste le départ de ton code avec ce que j'aurais fait moi:
    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
    <?php
     
    include("../config.php");
     
    @$action = $_REQUEST['action'];
    $id      = $_REQUEST['id'];
     
    switch($action) // Sélectionne l'action à effectuer selon $action
    {
        case "add": // Ajout de données dans la base
     
            if (!$db) // Si la connexion à la base n'est pas à true
            {
            echo "Connexion impossible à la base de données sur le serveur<br>";
                ."Vérifiez les paramètres du fichier config.php";
            exit; // alors on arrete l'execution du script
            }
     
            // On insère dans des variables tous les champs $_POST du formulaire        
            $pseudo_membre = $_POST['pseudo_membre2'];
            $passe_membre  = $_POST['passe_membre2'];
            $email         = $_POST['email2'];
            $prenom        = $_POST['prenom2'];
            $nom           = $_POST['nom2'];
            $adresse       = $_POST['adresse2'];
            $codepostal    = $_POST['codepostal2'];
            [...etc...]

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par sahid
    Salut,

    tu peux travailler avec PDO afin de rendre ton application exportable sur d'autre base de données.
    pour geré tes configurations, une class Configuration avec un patterns singleton histoire de rigoler un tit peu, peut etre aussi il faudrait que tu nettoies les données en entrée avant de travailler avec. separer peut etre la vue, de l'application metier.

    enfin, je te dit juste des idée qui me passe par la tête.
    PDO ?
    Je n'est pas compris, comment ça geré les configurations avec un patterns singleton?
    et néttoyer les données ou ça ?

    Vous pouvez developper SVP

  5. #5
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 147
    Points : 109
    Points
    109
    Par défaut
    Citation Envoyé par kiruban
    néttoyer les données
    par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_escape_string($_POST['pseudo_membre2']);

  6. #6
    Membre régulier
    Avatar de elitemedia
    Profil pro
    Inscrit en
    Août 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 115
    Points : 120
    Points
    120
    Par défaut
    ou encore si tu attends un ID numérique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $id      = intval($_REQUEST['id']);
    En d'autres termes, pense à la sécurité de ton application !

  7. #7
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    en plus des autres remarques ci dessus, j'ajouterais que j'évite quand je peux d'écrire des suite de code répétitif comme tu le fait.

    Toutes les variables que tu geres sont récupérées/controlées/affichées de la meme maniere... pourquoi ne pas tout mettre dans un tableau et faire une boucle sur le tableau ? Si un jour tu veux supprimer ou ajouter un champ, tu n'aura a le faire qu'a un seul endroit au lieu de 5.

    Pour faire cela, je verrais bien un tableau associatif du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $listeChamps=array(
    'pseudo'=>'Pseudo',
    'passe'=>'Mot de passe',
    'email'=>'EMail',
    ...);
    et ensuite boucler dessus... par exemple :

    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
    // controle des champs
    foreach($listeChamps as $var=>$nom) {
       if($_POST[$var.'2']=='') {
          echo "Vous devez choisir un $nom<br><br><a href=\"javascript:window.history.back()\">Retour</a>";
          exit;
       }
    }
    ...
    // construction de la requete
    $sql="UPDATE membre SET";
    foreach($listeChamps as $var=>$nom) {
       $sql.=" $var='".mysql_real_escape_string($_POST[$var.'2']."', ";
    }
    $sql=substr($requete, 0, -2)." WHERE id_membre...";
     
    $requete=mysql_query($sql,$db) or die(mysql_error());
    ...

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 154
    Points : 164
    Points
    164
    Par défaut
    Euh, je crois que Flagnad écrivais en même temps que moi :p...

    Salut à tous,

    pour le check de tes champs (post), j'aurai plutôt placé toutes les variables qui sont requises dans un tableau. Je lirai ensuite le tableau pour savoir si tout est correcte.

    Voici un exemple de ce que j'utilise le plus souvent :

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    <?
    $required = array("nom"=>"string","prenom"=>"string","age"=>"int","telephone"=>"phone","email"=>"mail");
     
    if (Check_Post($required)) {
     
            Send_Mail();
     
    }
     
    function Check_Post($array) {
     
            $check = true;
     
            foreach ($array as $key => $val) {
     
                    if (empty($_POST[$key])) {
     
                            $check = false;
     
                    } else {
     
                            switch ($val) {
     
                                    case "string" :
     
                                            if (!ereg(...,$_POST[$key]))
                                                    $check = false;
     
                                    break;
     
                                    case "int" :
     
                                            if (!ctype_digit($_POST[$key]))
                                                    $check = false;
     
                                    break;
     
                                    case "phone" :
     
                                            if (!ereg(...,$_POST[$key]))
                                                    $check = false;
     
                                    break;
     
                                    case "mail" :
     
                                            if (!ereg(...,$_POST[$key]))
                                                    $check = false;
     
                                    break;
     
                                    default :
     
                                            $check = false;
     
                                    break;
                            }
     
                    }
     
            }
     
            return $check;
     
    }
    ?>
    Après, bien entendu, tu dois stocker le message d'erreur pour les variables post mal encodées ou vides.

    Même si une fonction de ce genre prend plus de place qu'une petite vérification à la base, tu verras vite que c'est pratique puisque tu peux la réutiliser sans problème pour chaque check de formulaire.

    J'éspère que ça t'aidera.

  9. #9
    Membre actif
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2006
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2006
    Messages : 215
    Points : 256
    Points
    256
    Par défaut
    Citation Envoyé par kiruban
    PDO ?
    Je n'est pas compris, comment ça geré les configurations avec un patterns singleton?
    et néttoyer les données ou ça ?

    Vous pouvez developper SVP

    Bonjour

    PDO, est une classe ecrite en C pour php introduite à partir de PHP5 ( je crois ...) .
    Ce qui rend son utilisation interesente c'est deja qu'elle soit ecrite en C, et donc bien plus performante que toute autre classe ecrite en php permetant de faire la meme chose... ( pear database et compagnie ...), ensuite elle est completement OO, (bon en meme temps je parle de classe...lol), elle gere les exceptions, et surtout au lieu d'utiliser des fonctions php propre a telle ou telle base de donnée, tu utilises des methodes de la class PDO qui sont propres a toutes les bases de données, en gros tu as seulement besoin du driver de ta db.

    le patterns singleton est je pense un des patterns du GOF le plus connu et le plus simple a mettre en oeuvre, lui te permetra d'optimiser ton appli, en faite en l'utilisant, tu as un objet Configuration utilisable dans toutes les couches de ton application, et a chaque appel de ton objet de configuration, au lieu de cree un nouveau objet a chaque fois, tu rappelles le meme objet Configuration, etant donné que les parametres de configuration ne changent pas pendant l'utilisation de celle ci, et que tu as besoin de tes configurations partout dans ton application, tu as donc un gain de performance.

    je te parlais de nétoyer tes données, parce que j'ai vus que tu récuperes des données d'entete POST, pour les introduires directement dans une requetes SQL, ce qui rend ton application sensible a des attaques SQL injection

    m'enfin, je te repond un peu tard, on ta deja répondu (:

    sahid

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par sahid
    Bonjour

    PDO, est une classe ecrite en C pour php introduite à partir de PHP5 ( je crois ...) .
    Ce qui rend son utilisation interesente c'est deja qu'elle soit ecrite en C, et donc bien plus performante que toute autre classe ecrite en php permetant de faire la meme chose... ( pear database et compagnie ...), ensuite elle est completement OO, (bon en meme temps je parle de classe...lol), elle gere les exceptions, et surtout au lieu d'utiliser des fonctions php propre a telle ou telle base de donnée, tu utilises des methodes de la class PDO qui sont propres a toutes les bases de données, en gros tu as seulement besoin du driver de ta db.

    le patterns singleton est je pense un des patterns du GOF le plus connu et le plus simple a mettre en oeuvre, lui te permetra d'optimiser ton appli, en faite en l'utilisant, tu as un objet Configuration utilisable dans toutes les couches de ton application, et a chaque appel de ton objet de configuration, au lieu de cree un nouveau objet a chaque fois, tu rappelles le meme objet Configuration, etant donné que les parametres de configuration ne changent pas pendant l'utilisation de celle ci, et que tu as besoin de tes configurations partout dans ton application, tu as donc un gain de performance.

    je te parlais de nétoyer tes données, parce que j'ai vus que tu récuperes des données d'entete POST, pour les introduires directement dans une requetes SQL, ce qui rend ton application sensible a des attaques SQL injection

    m'enfin, je te repond un peu tard, on ta deja répondu (:

    sahid
    Merci pour ton message rapide, comment je peux sécurisé mon script contre les attaques SQL injection ?

  11. #11
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 147
    Points : 109
    Points
    109

  12. #12
    Membre actif
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2006
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2006
    Messages : 215
    Points : 256
    Points
    256
    Par défaut
    si tu utilises la classe PDO,
    tu peux utiliser la methode "prepare", ou "bindparams"

    petit exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    ...
    $db // c'est un objet de la classe PDO
    $stmt = $db->prepare("select * from user where id = ?");
    $res = $stmt->execute(array($_POST['id']))->fetchAll();
    ?>
    http://fr2.php.net/manual/fr/ref.pdo.php

    les fonctions php propres aux bases de données elles memes, sont vouées à disparaitre

Discussions similaires

  1. [amélioration] Critique de mon programme
    Par ChipsterJulien dans le forum Débuter avec Java
    Réponses: 23
    Dernier message: 03/02/2010, 19h31
  2. Avis sur la façon de programmer une équation
    Par feynman dans le forum Fortran
    Réponses: 1
    Dernier message: 24/04/2008, 13h59
  3. [Tableaux] Amélioration de code (if)
    Par Sir Tengu dans le forum Langage
    Réponses: 3
    Dernier message: 24/12/2006, 00h26
  4. [Tableaux] La meilleure façon de "convertir"
    Par visithierry dans le forum Langage
    Réponses: 2
    Dernier message: 30/11/2006, 12h49
  5. Réponses: 2
    Dernier message: 06/05/2006, 15h09

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