Partage
  • Partager sur Facebook
  • Partager sur Twitter

Modifier base de données

7 juin 2021 à 20:10:56

Bonsoir, j'ai créé un bouton qui affiche un formulaire qui permet par exemple de modifier le Prénom d'un utilisateur, voici le code :

    public function modifierMembre(int $idMembre, object $membre): void {
        //à faire
        try {
            $requete_prepare = PdoCine::$monPdo->prepare("UPDATE membres "
                    . "SET Prenom = :unLibGenre "
                    . "WHERE genre.idGenre = :unIdGenre");
                    . "SET libGenre = :unLibGenre "
                    . "WHERE genre.idGenre = :unIdGenre");
                    . "SET libGenre = :unLibGenre "
                    . "WHERE genre.idGenre = :unIdGenre");
                    . "SET libGenre = :unLibGenre "
                    . "WHERE genre.idGenre = :unIdGenre");
            $requete_prepare->bindParam(':unIdGenre', $idMembre, PDO::PARAM_INT);
            $requete_prepare->bindParam(':unLibGenre', $libGenre, PDO::PARAM_STR);
            $requete_prepare->execute();
        } catch (Exception $e) {
            die('<div class = "erreur">Erreur dans la requête !<p>'
                    . $e->getmessage() . '</p></div>');
        }
    }

Cette fonction existait déjà et je dois l'adapter pour qu'elle fonctionne. Mais comment faire pour que le prénom soit modifié par ce qu'à écrit l'administrateur ? 

Voici un aperçu: 

Je suis débutant, tout conseil est bon à prendre.. merci

-
Edité par MastrAtuss 7 juin 2021 à 20:16:35

  • Partager sur Facebook
  • Partager sur Twitter
7 juin 2021 à 20:28:24

Salut,

Je ne pense pas que la requête telle quelle passera de base. 

La syntaxe d'une requête update est la suivante: 

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;


Cela dit, il faut que tu récupères ce qui a été écrit par l'utilisateur. Si le formulaire est de type POST, tu clic sur le bouton modifier, tu pourras récupérer les données en écrivant $_POST['nomchamp'].

Après, est ce que l'utilisateur doit tout remplir ou peut-il juste modifier le champ qu'il veut? 

S'il peut juste modifier un champ, il faudra adapter ta requête en conséquence! 

  • Partager sur Facebook
  • Partager sur Twitter
7 juin 2021 à 20:56:59

Bonsoir, merci pour votre aide !

L'utilisateur peut aussi bien modifié un seul champ que tous. J'ai fait des modifications selon vos conseils et j'en arrive ici: 

    public function modifierMembre(int $idMembre, object $membre): void {
        //à faire
        try {
            $requete_prepare = PdoCine::$monPdo->prepare("UPDATE membres "
                    . "SET Prenom = $_POST['prenom']., Nom = $_POST['nom']., Email = $_POST['email']., Tel = $_POST['tel']. "
                    . "WHERE membre.idMembre = :unIdGenre");

            $requete_prepare->bindParam(':unIdGenre', $idMembre, PDO::PARAM_INT);
            $requete_prepare->bindParam(':unLibGenre', $libGenre, PDO::PARAM_STR);
            $requete_prepare->execute();
        } catch (Exception $e) {
            die('<div class = "erreur">Erreur dans la requête !<p>'
                    . $e->getmessage() . '</p></div>');
        }

Pour la condition du where, j'ai du mal à visualiser car c'est selon le choix de l'utilisateur

-
Edité par MastrAtuss 7 juin 2021 à 20:59:19

  • Partager sur Facebook
  • Partager sur Twitter
7 juin 2021 à 21:40:16

Suis la doc et/ou un cours, ce n'est pas comme ça que l'on prépare une requête !

Ce n'est même pas syntaxiquement du SQL valide avec ton mélange (incorrect) interpolation/concaténation.

Au passage, l'usage des variables superglobales dans une fonction/méthode = mauvaise pratique. Idem pour l'affichage "forcé" des erreurs SQL, tu ne fais que rendre service à tes attaquants ...

-
Edité par julp 7 juin 2021 à 21:44:01

  • Partager sur Facebook
  • Partager sur Twitter