[RESOLU] POO avec architecture MVC

Eléphant du PHP | 194 Messages

19 oct. 2021, 12:22

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

Mammouth du PHP | 2703 Messages

19 oct. 2021, 12:31

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 ?

Eléphant du PHP | 194 Messages

19 oct. 2021, 13:24

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

Mammouth du PHP | 2703 Messages

19 oct. 2021, 13:28

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.

Eléphant du PHP | 194 Messages

19 oct. 2021, 15:58

de base avec la method findOne et mon vard_dump je devrai récupérer les infos or la je n'ai rien.

@+ Filou

Mammouth du PHP | 2703 Messages

19 oct. 2021, 17:34

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
...

Eléphant du PHP | 194 Messages

19 oct. 2021, 18:13

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.

Mammouth du PHP | 2703 Messages

19 oct. 2021, 18:38

que vaut $this->mail ?

Eléphant du PHP | 194 Messages

19 oct. 2021, 18:44

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

Mammouth du PHP | 2703 Messages

19 oct. 2021, 19:49

var_dump($ex);
cela dit quoi ?

Eléphant du PHP | 194 Messages

19 oct. 2021, 21:15

$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

Mammouth du PHP | 2703 Messages

19 oct. 2021, 21:19

quelle est la sortie exacte du var_dump ?

Eléphant du PHP | 194 Messages

19 oct. 2021, 22:28

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

Mammouth du PHP | 2703 Messages

19 oct. 2021, 22:41

quelle est la ligne qui affiche cela ? autrement dit, vu que cela semble fonctionner, il faut mettre en commentaire les var_dump et die.

Eléphant du PHP | 194 Messages

19 oct. 2021, 23:53

C’est quand je fait le var_dump de $ex

@+filou