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 :

Votre avis sur la qualité d'un script [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 111
    Points : 43
    Points
    43
    Par défaut Votre avis sur la qualité d'un script
    Salut

    Je suis un débutant qui tente de s'améliorer et j'aurais aimer avoir votre avis sur un script tout bête d'insertion de données dans une table Mysql, donc si ça vous dit, tout vos commentaires seront les bienvenues !

    C'est surtout au niveau des contrôles où j'aimerais votre opinion :

    Voici le script sachant qu'il s'agit de variables récupérées via un formulaire :

    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
    <?php
     
    /* Vérification des champs vides du formulaire de création d'une nouvelle intervention */
     
    if(empty($_POST['dateinter_int']))
    {
    echo 'Le champs <b>"Date"</b> est vide.<br /> Cliquez <a href="javascript:history.back()">ici</a> pour revenir à la fiche d\'intervention';
    exit();
    }
    if(empty($_POST['typeinter_int']))
    {
    echo 'Le champs <b>"Type d\'intervention"</b> est vide.<br /> Cliquez <a href="javascript:history.back()">ici</a> pour revenir à la fiche d\'intervention';
    exit();
    }
    if(empty($_POST['tec_int']))
    {
    echo 'Le champs <b>"Technicien"</b> est vide.<br /> Cliquez <a href="javascript:history.back()">ici</a> pour revenir à la fiche d\'intervention';
    exit();
    }
    if(empty($_POST['patientid_int']))
    {
    echo 'Le champs <b>"Patient"</b> est vide.<br /> Cliquez <a href="javascript:history.back()">ici</a> pour revenir à la fiche d\'intervention';
    exit();
    }
     
    else{
     
     
    	/* Création de la fonction de traitement de la date US vers FR  */
    	function convert_date($date)
       {
          $tab_date = explode("-",$date);
          $retour = $tab_date[2]."-".$tab_date[1]."-".$tab_date[0];
     
          return $retour;
       }
     
    	$dateinter = convert_date($_POST['dateinter_int']);
    	$typinter = $_POST['typeinter_int'];
    	$tec = $_POST['tec_int'];
    	$patientid = $_POST['patientid_int'];
     
      $req = "INSERT INTO tinter (dateinter_int, typeinter_int, tec_int, patientid_int) VALUES('$dateinter', '$typeinter', '$tec', '$patientid')";
      mysql_query($req) or die(mysql_error()) ;
     
      echo "L'intervention à été enregistrée avec succès.";
     
      }
     
     
     
      ?>
    Merci pour votre esprit critique !

  2. #2
    Membre régulier Avatar de guigouz
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 84
    Points : 102
    Points
    102
    Par défaut
    Bonsoir...

    Ton script me semble tout à fait correct. Cela dit, je me permet de te suggérer de remplacer tes if successifs par des "if ... else". Si par exemple l'utilisateur n'a pas saisi plusieurs champs, il ne verra apparaitre qu'une seule fois "Cliquez ici pour revenir à la fiche d'intervention"...

    J'ai également re-écrit ton bout de code tel que je l'aurais fait si j'avais du faire la même chose... Si tu trouves qu'il y de bonnes idées tu peux te servir !
    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
    $saisieOK = true;
    if(empty($_POST['dateinter_int']))
    {
        $saisieOK = false;
        array_push($listWrong, "date");
    }
    if(empty($_POST['typeinter_int']))
    {
        $saisieOK = false;
        array_push($listWrong, "type d\'intervention");
    }
    if(empty($_POST['tec_int']))
    {
        $saisieOK = false;
        array_push($listWrong, "technicien");
    }
    if(empty($_POST['patientid_int']))
    {
        $saisieOK = false;
        array_push($listWrong, "patient");
    }
     
    if($saisieOK)
    {
        $dateinter = convert_date($_POST['dateinter_int']);
        $typinter = $_POST['typeinter_int'];
        $tec = $_POST['tec_int'];
        $patientid = $_POST['patientid_int'];
     
        $req = "INSERT INTO tinter (dateinter_int, typeinter_int, tec_int, patientid_int) VALUES('$dateinter', '$typeinter', '$tec', '$patientid')";
        if(mysql_query($req))
        {
            echo "L'intervention à été enregistrée avec succès.";
        }
        else
        {
            echo "Erreur lors de l'insertion de l'intervention.";
        }
    }
    else
    {
        echo 'Le(s) champ(s) suivants sont vides :<br /> <ul>';
        for($i=0; $i < count($listWrong); $i++)
        {
             echo '<li>'.$listWrong[$i].'</li>';
        }
        echo '</ul>Cliquez <a href="javascript:history.back()">ici</a> pour revenir à la fiche d\'intervention';
     
    }
    En espérant t'avoir été utile... bonne continuation !
    Bonsoir...

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 27
    Points : 32
    Points
    32
    Par défaut
    Bonjour,

    je rajouterai un contrôle au niveau des variables pour éviter l'injection SQL et les failles XSS potentielles.
    Le principe est le suivant : toujours contrôler les variables extérieurs au script/programme, n'accepter que ce qui est valide, rejeter le reste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $typinter = htmlentities($_POST['typeinter_int'], ENT_QUOTES);
    $tec = htmlentities($_POST['tec_int'], ENT_QUOTES);
    $patientid = htmlentities($_POST['patientid_int'], ENT_QUOTES);
    Il est possible de faire d'autres contrôles, comme le type de données attendu voir les méthodes is_*() ou ctype_*() pour cela.
    Mais aussi la valeur attendue, un entier strictement positif par exemple, etc.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (is_numeric($typinter) && $typinter > 0 ) {  // traitement }

  4. #4
    Membre actif Avatar de chtipitou
    Profil pro
    Étudiant
    Inscrit en
    Mars 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2006
    Messages : 175
    Points : 214
    Points
    214
    Par défaut
    Citation Envoyé par rewsna Voir le message
    Bonjour,

    je rajouterai un contrôle au niveau des variables pour éviter l'injection SQL et les failles XSS potentielles.
    Le principe est le suivant : toujours contrôler les variables extérieurs au script/programme, n'accepter que ce qui est valide, rejeter le reste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $typinter = htmlentities($_POST['typeinter_int'], ENT_QUOTES);
    $tec = htmlentities($_POST['tec_int'], ENT_QUOTES);
    $patientid = htmlentities($_POST['patientid_int'], ENT_QUOTES);
    Il est possible de faire d'autres contrôles, comme le type de données attendu voir les méthodes is_*() ou ctype_*() pour cela.
    Mais aussi la valeur attendue, un entier strictement positif par exemple, etc.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (is_numeric($typinter) && $typinter > 0 ) {  // traitement }

    autant utiliser les fonction prevu pour eviter les injection SQL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $typinter = mysql_real_escape_string($_POST['typeinter_int']);
    $tec = mysql_real_escape_string($_POST['tec_int']);
    $patientid = mysql_real_escape_string($_POST['patientid_int']);

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 111
    Points : 43
    Points
    43
    Par défaut
    Merci !!! Tous vos conseils m'aident à avancer ... Que du bon ...

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

Discussions similaires

  1. Votre avis sur mon 1er script
    Par jfrsm dans le forum VBScript
    Réponses: 3
    Dernier message: 17/09/2007, 10h45
  2. Donnez votre avis sur les articles de Developpez.com
    Par Geronimo dans le forum C++Builder
    Réponses: 13
    Dernier message: 14/01/2007, 23h00
  3. [Blog] Votre avis sur ce script de Blog en PHP (GPL)
    Par peck dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 04/01/2007, 10h44
  4. Votre avis sur les outils de gestion qualité du codage
    Par leminipouce dans le forum Qualimétrie
    Réponses: 1
    Dernier message: 19/10/2006, 22h00

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