Bonjour, voilà en faite j'ai fais un système de modification d'information de l'utilisateur, je voudrais savoir si j'utilise la bonne méthode, car celle que j'ai faites fonctionnes, mais je sais pas si c'est la bonne justement.
Je m'explique, j'ai un champs "sexe" que l'utilisateur peut modifier, pour cela il va remplir un formulaire, et donc j'ai le code suivant :

 <select name="sexe">
        <?php
        $req2 = $bdd->prepare("SELECT sexenum FROM 
        membre, login WHERE membre.id_login = :idsession AND membre.id_login = login.id");
        $req2->execute(array('idsession' => $_SESSION['id']));

        while($data2 = $req2->fetch())
        {
        ?>
            <?php
            $req3 = $bdd->prepare("SELECT sexenum, sexelib FROM information_sexe 
            ");
            $req3->execute();
            while($data3 = $req3->fetch())
            {
            ?>
                <?php
                if($data2['sexenum'] ==$data3['sexenum'])
                {
                    ?>
                    <option value="<?php echo $data3["sexenum"];?>" selected><?php echo $data3["sexelib"];?></option>                                   
                    <?php
                }
                else
                {
                    ?>
                    <option value="<?php echo $data3["sexenum"];?>"><?php echo $data3["sexelib"];?></option>
                    <?php
                }
                ?>
            <?php
            }
            ?>
        <?php
        }
        ?>
       </select>

J'ai deux tables, une tables ou j'ajoute les sexes et une autre table pour les autres informations genre (prenom, nom).

Ensuite j'ai une petite fonction pour l'affichage des informations du membre :

function affichage_informations_profil() 
{
    global $bdd;
    $query = $bdd->prepare('SELECT membre.prenom, membre.ville, membre.age, login.pseudo, membre.nom, membre.sexenum,
    membre.affiche, membre.id_login, membre.connecte, membre.description 
    FROM membre, login WHERE id_login=:id AND membre.id_login = login.id');
    $query->execute(array('id' => $_GET['id']));
    return $query->fetchAll();
}

Donc la je récupére le champs qui est dans la table membre correspond à l'utilisateur, et ensuite pour l'afficher je fais comme ça :

            <?php 
            if($profil_information['sexenum'] == 1)
            {
            ?>
            Masculin
            <?php
            }
            else if($profil_information['sexenum'] == 2)
            {
            ?>
            Féminin
            <?php           
            }
            else
            {
            ?>
            Non renseigné
            <?php
            }
            ?>

Voilà, bon après j'ai la partie traitement, ou je fais une vérification sur le sexe pour bien vérifié que si l'utilisateur fait un inspecté l'ellement sur une value, il m'injecte pas d'autres données.

<?php
if(isset($_SESSION['id']))
{
    if(isset($_POST['btninfo']))
    {
        $prenom = ucfirst(htmlspecialchars($_POST['prenom']));
        $nom = ucfirst(htmlspecialchars($_POST['nom']));
        $sexe = htmlspecialchars($_POST['sexe']);
        $age = htmlspecialchars($_POST['age']);
        $ville = htmlspecialchars($_POST['ville']);

        if($prenom == true && $nom == true && $age == true )
        {
            if(!is_numeric($ville))
            {
                if($age >= 13 AND $age <=100 AND $sexe >=0 AND $sexe <= 2)
                {
                    if(is_numeric($age))
                    {
                        if(strlen($prenom) < 10 && strlen($prenom) > 2 && strlen($nom) < 10 && strlen($nom) > 2  && strlen($ville) < 25)
                        {
                            if(preg_match('~[A-Z][a-z]*(-[A-Z][a-z]?)?~', $prenom))
                            {
                                if(preg_match('~[A-Z][a-z]*(-[A-Z][a-z]?)?~', $nom))
                                { 
                                    $stmt = $bdd->prepare('UPDATE membre SET prenom = :prenom, nom = :nom, sexenum=:sexe, age = :age, ville =:ville WHERE id_login=:idsession ');
                                    $stmt->execute(array(
                                    ':idsession' => $_SESSION['id'],
                                    ':prenom' => $prenom,
                                    ':nom' => $nom,
                                    ':sexe' => $sexe,
                                    ':age' => $age,
                                    ':ville' => $ville,
                                    )); 

                                    echo "ok";
                                }
                                    else echo "erreur";
                            }
                                    else echo "erreur";
                        }
                                else echo "erreur";     
                    }
                            else echo "erreur";
                }
                else echo "erreur";
            }
        else echo "erreur";

        }
        else echo "erreur";

    }
    else
    {
    header('Location: ../index.php');
    }
}
else
{
    echo "erreur";
}
?>

Donc, voilà j'aimerai savoir si la méthode que j'utilise est correcte, si il y a pas de risque de faille etc. Merci

2 réponses


Serg77
Auteur

En faites, je veux juste savoir si ce que je fais c'est bien ou pas ? Car ça fonctionne mais voilà.

bonjour,

si ton code fonctionne c'est déjà ça mais c'est tellement lourd comme facon de faire. tu utilise même pas les infos de ta table info _sexe.
De plus sexenum par convention cela s'appele un id c'est tellement moins lourd. C'est pareil les 10 if imbriqué c'est incompréhensible tu fais un return false si c'est pas bon sinon tu continue. sinon c'est pas mal mais optimisable à fond

bon courage