desinscription dans espace membres

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : desinscription dans espace membres

Re: desinscription dans espace membres

par Saian » 24 févr. 2020, 19:35

Oui pour la façon d'écrire de toute façon c'est quelque chose d'assez personnel tant que t'es le seul à te lire. ;)

Re: desinscription dans espace membres

par Stevenhonor » 24 févr. 2020, 18:33

Super merci ! Tout fonctionne impeccablement maintenant !
D'ailleurs je me doutais bien que la plus grosse erreur dans mon code venais de cette ligne.
J'ai juste aussi du changer mon header location pour l'envoyer sur ma page de logout pour avoir la destruction de session.
Sinon l'utilisateur restait connecter sur une session fantôme avec un profil fantôme sans pseudo, mot de passe, avatar, ... mais il pouvais toujours avoir accès a des pages qui elles nécessite un profil.

EDIT: en me basant sur le code que tu m'as fais, j'ai réussis à l'adapter sur mon code de base posté plus haut.
Parce que la forme de ton code est quelque chose de totalement différent de ce que j'ai appris de mon coté et je ne veux pas m'embrouiller les pinceaux en apprenant une forme plus avancée de code PHP.
Je préfère rester sur la base que j'ai appris pour l'instant et de continuer dans cette voie.
(Par contre j'ai bien modifier mes sessions_start, et mon footer comme tu me l'as indiqué).
Merci beaucoup pour ton aide! :)

Re: desinscription dans espace membres

par Saian » 24 févr. 2020, 18:26

La syntaxe du delete c'est DELETE FROM pas DELETE * FROM. Si tu testais le retour du execute tu pourrais voir qu'il doit être en erreur.

EDIT : attention on voit ton login et password sql.
Et je te renvoie à ce commentaire d'un de mes édite plus haut : "Le footer est normalement dans le body. La balise form n'était pas fermée au bon endroit. Et il manquait la balise head."

Re: desinscription dans espace membres

par Stevenhonor » 24 févr. 2020, 18:24

Code : Tout sélectionner

<?php session_start(); if (!isset($_SESSION['id'])) { header('Location: connexion.php'); exit(); } else { $bdd = new PDO('CONFIDENTIEL (oups!)'); $requser = $bdd->prepare("SELECT * FROM membres WHERE id = ?"); $requser->execute(array($_SESSION['id'])); $user = $requser->fetch(); } if (isset($_POST['desinscription'])) { $error = false; if (empty($_POST['motdepasse'])) $error = 'Veuillez renseigner le mot de passe !'; if (!$error && md5($_POST['motdepasse']) != $user['motdepasse']) $error = 'Votre mot de passe est erroné !'; if (!$error) { $delete = $bdd->prepare("DELETE * FROM membres WHERE id = ?"); $delete->execute(array($_SESSION['id'])); header('Location: connexion.php'); exit(); } } ?> <html> <title>Desinscription</title> <link rel="stylesheet" href="Style/inscriptionstyle.css"> <body> <h1>Se désinscrire</h1> <div class="desinscription"> <form method="POST" action=""> <p>Vous pouvez vous désinscrire à tout moment sur cette page en inserant votre mot de passe et en validant sa confirmation.</p> <div class="Attention"> <p>Attention, cette action est irréversible et entrainera la suppression de votre compte ainsi que de toutes les données qui lui sont liés (avatar, e-mail, pseudo, mot de passe) !</p> </div> <p>Inserer votre mot de passe:</p> <p><input type="password" name="motdepasse" placeholder="Mot de passe"></p> <p><input type="submit" name="desinscription" value="Me désinscrire!"></p> </div> </form> <div class="error"> <?php if(isset($error)) { echo $error; } ?> </div> </body> <footer> <div class="container"> <a href="CONFIDENTIEL">Mentions légales</a> </div> </footer> </html>
Ce code fonctionne à 90%. Tout s'execute sauf la suppression de la ligne de l'utilisateur dans ma bdd.
L'utilisateur est bien renvoyé sur la page de login par contre

Re: desinscription dans espace membres

par Saian » 24 févr. 2020, 18:08

Tu dois avoir une erreur de syntaxe ou autre. En tout cas c'est genre une erreur 500 Internal Server Error. Ça arrive quand ton script plante.

PS : travailler directement sur l'hébergement est une mauvaise pratique. Le teste d'un développement devrait toujours se faire sur un serveur de développement avec toutes les erreurs affichées.

PPS : tu peux ajouter ces deux lignes au début du script pour obtenir les erreurs, si ce n'est pas bloqué par la configuration de l'hébergement :
ini_set('display_errors', 'On');
error_reporting(E_ALL);

Re: desinscription dans espace membres

par Stevenhonor » 24 févr. 2020, 18:06

Ok alors du coup j'ai ce code en plus "propre" :

Code : Tout sélectionner

<?php session_start(); $bdd = new PDO('CONFIDENTIEL'); if(isset($_SESSION['id'])) { $requser = $bdd->prepare("SELECT * FROM membres WHERE id = ?"); $requser->execute(array($_SESSION['id'])); $user = $requser->fetch(); if(isset($_POST['desinscription'])) { if(!empty($_POST['motdepasse'])) { $motdepasse = md5($_POST['motdepasse']); if($motdepasse == ($user['motdepasse'])) { $delete = $bdd->prepare("DELETE * FROM membres WHERE id = ?"); $delete->execute(array($_SESSION['id'])); header('Location : connexion.php'); exit(); } else { $error = "Mauvais mot de passe !"; } } else { $error = "Veuillez insérer et confirmer votre mot de passe !"; } } else { } ?>
Le problème c'est que lorsque l'utilisateur rentre le bon mot de passe, il est carrément renvoyé sur une page d'erreur généré par mon hebergeur ( Application error ) et sa ligne bdd n'est pas supprimé :shock: :shock:

Re: desinscription dans espace membres

par Saian » 24 févr. 2020, 17:59

Bah en fait ici je dirais que tu n'as pas besoin de mettre 2 champs mot de passe. 1 seul champ suffit et tu compares md5($_POST['motdepasse']) avec $user['motdepasse'].

EDIT : et pour la lisibilité c'est bien d'éviter d'avoir des imbrications de if else à n'en plus finir :
<?php

// security - à mettre dans un include et inclure sur toutes les pages sécurisées en début de script
session_start();

if (!isset($_SESSION['id'])) {
  header('Location: connexion.php');
  exit();
}
else {
  $bdd = new PDO('CONFIDENTIEL');
  $requser = $bdd->prepare("SELECT * FROM membres WHERE id = ?");
  $requser->execute(array($_SESSION['id']));
  $user = $requser->fetch();
}
// end security

// traitement de la soummission du formulaire
if (isset($_POST['desinscription'])) {
  $error = false;

  if (empty($_POST['motdepasse']))
    $error = 'Veuillez renseigner le mot de passe !';

  if (!$error && md5($_POST['motdepasse']) != $user['motdepasse'])
    $error = 'Votre mot de passe est erroné !';

  if (!$error) {
    $delete = $bdd->prepare("DELETE * FROM membres WHERE id = ?");
    $delete->execute(array($user['id']));
    header('Location: connexion.php');
    exit();
  }
}
?>
<html>
<head>
  <title>Desinscription</title>
  <link rel="stylesheet" href="Style/inscriptionstyle.css">
</head>
<body>
  <h1>Se désinscrire</h1>
  <div class="desinscription">
    <form method="POST" action="">
      <p>Vous pouvez vous désinscrire à tout moment sur cette page en inserant votre mot de passe et en validant sa confirmation.</p>
      <div class="Attention">
        <p>Attention, cette action est irréversible et entrainera la suppression de votre compte ainsi que de toutes les données qui lui sont liés (avatar, e-mail, pseudo, mot de passe) !</p>
      </div>
      <p>Inserer votre mot de passe:</p>
      <p><input type="password" name="motdepasse" placeholder="Mot de passe"></p>
      <p><input type="submit" name="desinscription" value="Me désinscrire!"></p>
    </form>
  </div>
  <div class="error">
    <?php if (isset($error) && $error) { echo $error; } ?>
  </div>
  <footer>
    <div class="container">
      <a href="CONFIDENTIEL">Mentions légales</a>
    </div>
  </footer>
</body>
</html>
Le footer est normalement dans le body. La balise form n'était pas fermée au bon endroit. Et il manquait la balise head.

Re: desinscription dans espace membres

par Stevenhonor » 24 févr. 2020, 17:51

pas cryptés, mais haché. Avec la fonction md5() Donc je dois bien remettre la fonction md5 devant ($_POST['motdepasse1']); et ($_POST['motdepasse2']); n'est ce pas ? Comme je l'ai fais dans le code de mon précédent message ?
Mais en fait je suis surtout bloqué sur la vérification du mot de passe entré par l'utilisateur dans le formulaire et sa vérification dans la base de données.

Re: desinscription dans espace membres

par Saian » 24 févr. 2020, 17:46

Tu les as encryptés comment les mots de passe ?

Re: desinscription dans espace membres

par Stevenhonor » 24 févr. 2020, 17:41

Code : Tout sélectionner

<?php session_start(); $bdd = new PDO('CONFIDENTIEL'); if(isset($_SESSION['id'])) { $requser = $bdd->prepare("SELECT * FROM membres WHERE id = ?"); $requser->execute(array($_SESSION['id'])); $user = $requser->fetch(); if(isset($_POST['desinscription'])) { if(!empty($_POST['motdepasse1']) AND !empty($_POST['motdepasse2'])) { $motdepasse1 = md5($_POST['motdepasse1']); $motdepasse2 = md5($_POST['motdepasse2']); if($motdepasse1 == $motdepasse2) { if($user == 1) { $delete = $bdd->prepare("DELETE * FROM membres WHERE id = ?"); $delete->execute(array($_SESSION['id'])); header('Location : connexion.php'); exit(); } } else { $error = "Vos mots de passes ne correspondent pas !"; } } else { $error = "Veuillez insérer et confirmer votre mot de passe !"; } } else { } ?>
Mais du coup je comprend pas comment faire pour aller chercher le mot de passe de l'utilisateur dans ma bdd, le comparer à celui qui a été entrer et ainsi enclencher la suppression de sa ligne dans ma bdd...
et pour la déclaration des variable $motdepasse1 et $motdepasse2 je suis bien censé remettre la clé de cryptage utilisé lors de l'inscription, login, etc n'est-ce pas ?

Re: desinscription dans espace membres

par Saian » 24 févr. 2020, 17:33

Pour tester le mot de passe tu prends 2 fois le mot de passe du user donc forcément ils sont toujours identiques
            $motdepasse1 = md5($user['motdepasse']);
            $motdepasse2 = md5($user['motdepasse']);
Ca devrait être $_POST['motdepasse1'] et $_POST['motdepasse2'].

Et "Mauvais mot de passe" est sur un else if($user == 1) { donc si $user est différent de 1. Or $user est un tableau.

desinscription dans espace membres

par Stevenhonor » 24 févr. 2020, 17:26

Bonjour,
j'ai un problème sur un formulaire de désinscription dans mon espace membres et je ne comprend pas trop ce qui ne vas pas.

Code : Tout sélectionner

<?php session_start(); $bdd = new PDO('CONFIDENTIEL'); if(isset($_SESSION['id'])) { $requser = $bdd->prepare("SELECT * FROM membres WHERE id = ?"); $requser->execute(array($_SESSION['id'])); $user = $requser->fetch(); if(isset($_POST['desinscription'])) { if(!empty($_POST['motdepasse1']) AND !empty($_POST['motdepasse2'])) { $motdepasse1 = md5($user['motdepasse']); $motdepasse2 = md5($user['motdepasse']); if($motdepasse1 == $motdepasse2) { if($user == 1) { $delete = $bdd->prepare("DELETE * FROM membres WHERE id = ?"); $delete->execute(array($_SESSION['id'])); header('Location : connexion.php'); exit(); } else { $error = "Mauvais mot de passe !"; } } else { $error = "Vos mots de passes ne correspondent pas !"; } } else { $error = "Veuillez insérer et confirmer votre mot de passe !"; } } else { } ?> <html> <title>Desinscription</title> <link rel="stylesheet" href="Style/inscriptionstyle.css"> <body> <h1>Se désinscrire</h1> <div class="desinscription"> <form method="POST" action=""> <p>Vous pouvez vous désinscrire à tout moment sur cette page en inserant votre mot de passe et en validant sa confirmation.</p> <div class="Attention"> <p>Attention, cette action est irréversible et entrainera la suppression de votre compte ainsi que de toutes les données qui lui sont liés (avatar, e-mail, pseudo, mot de passe) !</p> </div> <p>Inserer votre mot de passe:</p> <p><input type="password" name="motdepasse1" placeholder="Mot de passe"></p> <p>Confirmez votre mot de passe:</p> <p><input type="password" name="motdepasse2" placeholder="Confirmez votre MDP"></p> <p><input type="submit" name="desinscription" value="Me désinscrire!"></p> </div> </form> <div class="error"> <?php if(isset($error)) { echo $error; } ?> </div> </body> <footer> <div class="container"> <a href="CONFIDENTIEL">Mentions légales</a> </div> </footer> <?php } else { header('Location: connexion.php'); exit(); } ?> </html>
Premièrement entrer un mot de passe et une confirmation différente fais apparaitre le message: ""mauvais mot de passe" alors qu'il est censé faire apparaitre le message: "Vos mots de passes ne correspondent pas !";
Si l'utilisateur rentre son mot de passe et le confirme, le message d'erreur " mauvais mot de passe " continue d'apparaitre.