Page 1 sur 2

POO avec architecture MVC

Posté : 19 oct. 2021, 12:22
par filou80
Bonjour à tous,

Sur mon projet je souhaite comparer le mail et le token pour valider l'inscription d'un membre.
J’envoie un mail (avec token dans url) avec un lien au nouveau inscrit quand il clic dessus cela le renvoi sur une page ou il doit rentrer son mail.
Suite au token je veux comparer le token en base via le mail et le token recu par url mais je ne parviens pas a récupérer les infos de l'utilisateur......
Pourriez-vous m'aider ?
Voici mon code (mon début) :
Mon controller :
//Démarrer une nouvelle session
session_start();

require_once(dirname(__FILE__).'/../publics/utils/database.php');
require_once(dirname(__FILE__).'/../publics/utils/regex.php');
require_once(dirname(__FILE__).'/../models/Utilisateur.php');

$code = trim(filter_input(INPUT_GET, 'code', FILTER_SANITIZE_NUMBER_INT));
$token = filter_input(INPUT_GET, 'token', FILTER_SANITIZE_STRING);
$inscription = filter_input(INPUT_GET, 'inscription', FILTER_SANITIZE_STRING);
$mailInfoGet = filter_input(INPUT_POST, 'mail', FILTER_SANITIZE_STRING);

if((!empty($token)) && $inscription === 'inscription'){
$code = 8;
}

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if((!empty($token)) && $inscription === 'inscription'){

var_dump($token);
die;

$utilisateur = new Utilisateurs();
$infoUtilisateur = $utilisateur->findOne($mailInfoGet);

var_dump($infoUtilisateur);
die;



// $utilisateur = new Utilisateurs();
// $thisUtilisateur = $utilisateur->validerMail($token);
// $code = 7;
} else {
$code =4;
}
}

include(dirname(__FILE__).'/../views/neutreConnexion.php');
ma vue :

Code : Tout sélectionner

<?php ob_start(); ?> <!-- Debut code message erreur --> <div class="container"> <div class="row justify-content-center my-5"> <?php if($code) :?> <div class="col-10 text-center h5 alert mt-3 <?= $messageCode[$code]['type'] ?>"> <?= $messageCode[$code]['msg'] ?> </div> <?php endif ?> </div> </div> <!-- Fin code message erreur --> <div class="container"> <div class="row justify-content-center"> <div class="col-10 col-lg-8"> <form action="<?=htmlspecialchars($_SERVER['PHP_SELF']).'?token='.$token.'&inscription='.$inscription?>" method="post"> <div class="col-8 input-group"> <div class="input-group-text iconesConnexionInscription"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-envelope" viewBox="0 0 16 16"> <path d="M0 4a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V4zm2-1a1 1 0 0 0-1 1v.217l7 4.2 7-4.2V4a1 1 0 0 0-1-1H2zm13 2.383-4.758 2.855L15 11.114v-5.73zm-.034 6.878L9.271 8.82 8 9.583 6.728 8.82l-5.694 3.44A1 1 0 0 0 2 13h12a1 1 0 0 0 .966-.739zM1 11.114l4.758-2.876L1 5.383v5.73z"/> </svg> </div> <input type="email" class="persoConnexionInscription form-control" placeholder="Mail*" name="mail" id="mail" value="<?= htmlentities($_POST['mail'] ?? '', ENT_QUOTES, 'UTF-8')?>" required> </div> <div class="error mb-3"><?= htmlentities($error['mail'] ?? '', ENT_QUOTES, 'UTF-8')?></div> </form> <div class="d-flex justify-content-start"> <p>* Champs obligatoire</p> </div> <div class="d-flex justify-content-end"> <div class="text-center mb-3"><button type="submit" name="validation" value="2" class="btn btn-success">Valider</button></div> </div> </div> </div> </div> <?php $content = ob_get_clean(); $titlePage = 'Message'; $metaDescription =""; $metaKeywords =""; $title = 'Message'; $page = 'Connexion'; include(dirname(__FILE__).'/templates/template.php'); ?>
et ma methode :

Code : Tout sélectionner

<?php require_once(dirname(__FILE__).'/../publics/utils/database.php'); class Utilisateurs { private $id; private $mail; private $pseudo; private $mdpc; private $status; private $role; private $token; private $effacer; private $reinit; private $actif; private $pdo; //Methode magique pour hydraté l'objet public function __construct($id = NULL, $mail = NULL, $pseudo = NULL, $mdpc = NULL, $status = NULL, $role = NULL, $token = NULL, $effacer = NULL, $reinit= NULL, $actif= NULL) { $this->id = $id; $this->mail = $mail; $this->pseudo = $pseudo; $this->mdpc = $mdpc; $this->status = $status; $this->role = $role; $this->token = $token; $this->effacer = $effacer; $this->reinit = $reinit; $this->actif = $actif; $this->pdo = Database::getInstance(); } function __set($property, $value) { $this->$property = $value; } public function findOne($mail) { $sql = 'SELECT `id`, `mail`, `pseudo`, `mdpc`,`status`, `role`, `token`, `effacer`, `reinit`, `actif` FROM `utilisateurs` WHERE `mail`= :mail;'; $req = $this->pdo->prepare($sql); $req->bindValue(':mail',$this->mail,PDO::PARAM_STR); try { if($req->execute()) { return $req->fetch(PDO::FETCH_OBJ); } } catch (PDOException $ex) { return false; } }
Merci par avance pour votre aide.

@+ Filou

Re: POO avec architecture MVC

Posté : 19 oct. 2021, 12:31
par or 1
mais je ne parviens pas a récupérer les infos de l'utilisateur......
c'est à dire ?
quels echo ajoutés pour debuguer n'affichent pas ce qui est attendu ?

Re: POO avec architecture MVC

Posté : 19 oct. 2021, 13:24
par filou80
je recherche via ma méthode de récupérer le token via le mail en base, à fin de comparer avec celui passer dans l'URL, voir s'ils correspondent à fin de valider son inscription.
je ne sait pas si je suis clair dans mon explication.

@+ Filou

Re: POO avec architecture MVC

Posté : 19 oct. 2021, 13:28
par or 1
et il y a du code sensé faire cela. il faut le debuger, nous dire où exactement, cela ne fait pas ce qui est attendu.

Re: POO avec architecture MVC

Posté : 19 oct. 2021, 15:58
par filou80
de base avec la method findOne et mon vard_dump je devrai récupérer les infos or la je n'ai rien.

@+ Filou

Re: POO avec architecture MVC

Posté : 19 oct. 2021, 17:34
par or 1
il faut mettre des echo partout pour debuguer, avant un if, dans le if, ...

après
$code = trim(filter_input(INPUT_GET, 'code', FILTER_SANITIZE_NUMBER_INT));
$token = filter_input(INPUT_GET, 'token', FILTER_SANITIZE_STRING);
$inscription = filter_input(INPUT_GET, 'inscription', FILTER_SANITIZE_STRING);
$mailInfoGet = filter_input(INPUT_POST, 'mail', FILTER_SANITIZE_STRING);
pour vérifier si ces lignes font bien ce qui est attendu
...

Re: POO avec architecture MVC

Posté : 19 oct. 2021, 18:13
par filou80
dans ma method :

Code : Tout sélectionner

public function findOne($mail) { $sql = 'SELECT `id`, `mail`, `pseudo`, `mdpc`,`status`, `role`, `token`, `effacer`, `reinit`, `actif` FROM `utilisateurs` WHERE `mail`= :mail;'; $req = $this->pdo->prepare($sql); $req->bindValue(':mail',$this->mail,PDO::PARAM_STR); try { if($req->execute()) { var_dump($req); die; return $req->fetch(PDO::FETCH_OBJ); } } catch (PDOException $ex) { var_dump($ex); die; return false; } }
et quand je valide cela me retourne cela :

object(PDOStatement)#3 (1) { ["queryString"]=> string(134) "SELECT `id`, `mail`, `pseudo`, `mdpc`,`status`, `role`, `token`, `effacer`, `reinit`, `actif` FROM `utilisateurs` WHERE `mail`= :mail;" }

au lieu de me retourner les infos utilisateurs ????
Quand je lance ma requete dans phpMyAdmin cela me retourne les bons renseignements sur l'utilisateur.
Je comprend plus rien.......
si je ne fait pas le var_dump de $req cela passe dans le catch est me retourne false.

Re: POO avec architecture MVC

Posté : 19 oct. 2021, 18:38
par or 1
que vaut $this->mail ?

Re: POO avec architecture MVC

Posté : 19 oct. 2021, 18:44
par filou80
Là j'ai modifier ma method mais cela change rien :

Code : Tout sélectionner

public function findOne($mail) { $sql = 'SELECT `id`, `mail`, `pseudo`, `mdpc`,`status`, `role`, `token`, `effacer`, `reinit`, `actif` FROM `utilisateurs` WHERE `mail`= :mail;'; $pdo = Database::getInstance(); $req = $pdo->prepare($sql); $req->bindValue(':mail',$mail,PDO::PARAM_STR); try { if($req->execute()) { var_dump($req); die; return $req->fetch(PDO::FETCH_OBJ); } } catch (PDOException $ex) { var_dump($ex); die; return false; } }
$this->mail vaut le mail utilisateur

@+ Filou

Re: POO avec architecture MVC

Posté : 19 oct. 2021, 19:49
par or 1
var_dump($ex);
cela dit quoi ?

Re: POO avec architecture MVC

Posté : 19 oct. 2021, 21:15
par filou80
$ex me renvois Maintenant les valeurs utilisateurs .... alors qu'il devrait passer dans le try et non dans le catch.
Comment cela se fait ?
fonctionnement pas normal ?

@+ Filou

Re: POO avec architecture MVC

Posté : 19 oct. 2021, 21:19
par or 1
quelle est la sortie exacte du var_dump ?

Re: POO avec architecture MVC

Posté : 19 oct. 2021, 22:28
par filou80
Cela me renvoi ceci :

object(stdClass)#4 (10) { ["id"]=> string(1) "1" ["mail"]=> string(24) "[email protected]" ["pseudo"]=> string(8) "toto" ["mdpc"]=> string(60) "$9y$10$vwQVuZnX06oGsFtMHkIo1uxCjyRvXYWIaUIxm1FMscarPOh2HnDni" ["status"]=> string(1) "0" ["role"]=> string(1) "2" ["token"]=> string(61) "7qXFmBG8Xp0lBfORU1RUi0Jau9cFRJSm2kVsXDAJO3RF1jhEhtb91O9F5HZid" ["effacer"]=> string(1) "0" ["reinit"]=> NULL ["actif"]=> string(1) "0" }

@+ Filou

Re: POO avec architecture MVC

Posté : 19 oct. 2021, 22:41
par or 1
quelle est la ligne qui affiche cela ? autrement dit, vu que cela semble fonctionner, il faut mettre en commentaire les var_dump et die.

Re: POO avec architecture MVC

Posté : 19 oct. 2021, 23:53
par filou80
C’est quand je fait le var_dump de $ex

@+filou