Bonjour,

Je voudrais faire un "fetch" sur ma BDD pour savoir si l'E-mail n'est pas dèjà pris.
J'ai essayé de nombreuse chose mais ça me retourne une erreur ou plante le script.

Merci.
Stacy.

Ce que je fais

un espace membres et je souhaite que les membres puissent modifiés leurs info...

<?php
    if(isset($_POST['submit_e'])){
    if(empty($_POST['email']) || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)){
        $_SESSION['flash']['error'] = "Votre email n'est pas valide";
    }else{
        $user_id = $_SESSION['auth']->id;
        $email= ($_POST['email']);
        require_once 'inc/db.php';
        $req = $pdo->prepare('UPDATE users SET email = ? WHERE id = ?');
        $req->execute([$email, $user_id]);

          $_SESSION['flash']['success'] = "Votre adresse mail a bien &#233;t&#233; mis &#224; jour";
    }
}
?>

Ce que je veux

Pas de doublon sur la BDD

Ce que j'obtiens

La modif... ce fait mais je peux mettre n'importe quelle adresse c'est accepté.

3 réponses


court-jus
Auteur
Réponse acceptée

Merci a vous, je vais faire ça ce week-end.

Edit: Super ca fonctionne, merci a vous ^^ !

Tu dois compter le nombre de fois que l'adresse mail apparait dans la bdd (sans que ce soit celle de l'utilisateur courant) avec un select ;)

Au lieu de faire un fetch(), un simple rowCount(à suffit, car tu n'as pas besoin de savoir quelles sont les informations liées ou même l'adresse email vu que tu l'as fourni.

Un bon exemple sur la doc PHP:

PDOStatement::rowCount

$sql = "SELECT COUNT(*) FROM fruit WHERE calories > 100";
if ($res = $conn->query($sql)) {

   /* Récupère le nombre de lignes qui correspond à la requête SELECT */
   if ($res->fetchColumn() > 0) {

      /* Effectue la vraie requête SELECT et travaille sur le résultat */
      $sql = "SELECT nom FROM fruit WHERE calories > 100";
      foreach ($conn->query($sql) as $row) {
      print "Nom : " .  $row['NOM'] . "\n";
      }
   }
   /* Aucune ligne ne correspond -- faire quelque chose d'autre */
   else {
      print "Aucune ligne ne correspond à la requête.";
   }
}

$res = null;
$conn = null;

Ensuite je te conseille de vérifier avant si l'utilisateur n'envois pas la même adresse, en gros si il a remis l'adresse qu'il a actuellement, comme ça il sera pourquoi il a une erreur et non juste un "Cette eamil est déjà prise".