MEssage Alerte s'ouvre à l'ouverture de la page
malo91
-
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour, bonjour ! voici mon petit souci !
j'ai trouvé le moyen de faire une alerte ( je mets mon code hph dans mes controllers exemple $errors) et j'ai dans mes vues :
ca marche ! sauf que ca marche tellement bien que le message :
par exemple celui du mot de passe et pseudo : mon alerte se met à l'ouverture de la page car les champs ne sont pas encore remplis
la croix fonctionne, si j'ai une alerte ok je la ferme mais lorsque je reviens sur ma page pour me connecter j'ai deja mon alerte: vous n'avez pas rempli votre pseudo ou votre MP n'est pas correct !
alors je n'arrive pas , desolée, à faire un code qui dirait : il faut remplir les champs avant d'executer l'alerte! ???? j'y arrive pas :(
merci pour votre aide !! j'avance !!! mieux vaut doucement mais surement! merci par avance pour votre aide , à tres vite j'espere :)
j'ai trouvé le moyen de faire une alerte ( je mets mon code hph dans mes controllers exemple $errors) et j'ai dans mes vues :
<?php if (!empty($errors)): ?>
<div class="alert alert-dark alert-dismissible" style="width: 700px;" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span></button>
<p> les champs ne sont pas conforment</p>
<ul>
<?php foreach ($errors as $error): ?>
<li><?= $error; ?> </li>
<?php endforeach; ?>
</ul>
</div>
<?php endif;?>
ca marche ! sauf que ca marche tellement bien que le message :
par exemple celui du mot de passe et pseudo : mon alerte se met à l'ouverture de la page car les champs ne sont pas encore remplis
la croix fonctionne, si j'ai une alerte ok je la ferme mais lorsque je reviens sur ma page pour me connecter j'ai deja mon alerte: vous n'avez pas rempli votre pseudo ou votre MP n'est pas correct !
alors je n'arrive pas , desolée, à faire un code qui dirait : il faut remplir les champs avant d'executer l'alerte! ???? j'y arrive pas :(
merci pour votre aide !! j'avance !!! mieux vaut doucement mais surement! merci par avance pour votre aide , à tres vite j'espere :)
A voir également:
- MEssage Alerte s'ouvre à l'ouverture de la page
- Impossible de supprimer une page word - Guide
- Page d'ouverture google - Guide
- Recuperer message whatsapp supprimé - Guide
- Message supprimé whatsapp - Guide
- Fausse alerte mcafee - Accueil - Piratage
9 réponses
Bonjour,
Déjà, quand tu postes du code, indique le LANGAGE dans les balises.
Explications ( à lire ENTIEREMENT !! ) disponibles ici.
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Ensuite
Le souci est au niveau de ton controller ....
Tu ne dois alimenter la variable $error que si tu as "submit" ton formulaire....
Déjà, quand tu postes du code, indique le LANGAGE dans les balises.
Explications ( à lire ENTIEREMENT !! ) disponibles ici.
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Ensuite
Le souci est au niveau de ton controller ....
Tu ne dois alimenter la variable $error que si tu as "submit" ton formulaire....
Ok je croyais avoir fait ce qu il fallait dans le code...
J ai submit dans mon formulaire
Donc je fois procéder comment?
Merci
J ai submit dans mon formulaire
Donc je fois procéder comment?
Merci
oui je comprends evidemment !
oui j'ai bien pensé malgré mon peu de connaissance à un if mais j'ai pas reussi
esperant que cela te suffise sinon tant pis pour moi !
if (!empty($_POST)) { $errors = array(); if (empty($_POST['username']) || !preg_match('/^[a-zA-Z0-9_]+$/', $_POST['username'])) { $errors['username']= "Votre pseudo ne correspond pas aux caractères valides"; } else { $query = $pdo->prepare("SELECT id FROM user WHERE username = ?"); $query->execute([$_POST['username']]); $u = $query->fetch(); if ($u) { $errors['username'] = 'Pseudo déjà pris'; } } if (empty($_POST['password']) || $_POST['password'] != $_POST['password_confirm']) { $errors['password']= "Votre mot de passe ne correspond pas ou n'est pas rempli correctement!"; } if (empty($errors)) { $query =$pdo->prepare("INSERT INTO user SET username = ?, password = ?"); $password = password_hash($_POST['password'], PASSWORD_BCRYPT); $query->execute([$_POST['username'], $password]); die('Compte enregistré'); $_SESSION['auth'] = $u; header('Location: ' . $router->url('blog')); exit(); } }
oui j'ai bien pensé malgré mon peu de connaissance à un if mais j'ai pas reussi
esperant que cela te suffise sinon tant pis pour moi !
Avant tout, un petit peu de lecture : ( à lire et à appliquer )
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Ce qui donne, en gros..
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Ce qui donne, en gros..
<?php //---------------------------------------------------------------------------------------// //démarrage des sessions //---------------------------------------------------------------------------------------// session_start(); //---------------------------------------------------------------------------------------// //affichage des erreurs PHP //---------------------------------------------------------------------------------------// error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //---------------------------------------------------------------------------------------// //Fichier de connexion à la bdd //---------------------------------------------------------------------------------------// require_once 'connexionBdd.php'; // a remplacer par le chemin vers ton fichier de connexion à la bdd //---------------------------------------------------------------------------------------// //----- Découpage du code en FONCTIONS -------------// // tu pourrais d'ailleurs les déplacer dans un fichier à part et y ajouter une fonction // pour récupérer les infos de l'utilisateur à partir de son id, // une fonction pour faire l'authentification .. bref.. tout ce qui concerne le user... //---------------------------------------------------------------------------------------// function getUserIdByUserName($username){ global $pdo; try{ $query = $pdo->prepare("SELECT id FROM user WHERE username = ?"); $query->execute([$username]); return $query->fetch(PDO::FETCH_COLUMN); // https://phpdelusions.net/pdo/fetch_modes#FETCH_COLUMN }catch(Exception $e){ echo "Erreur " : .$e->getMessage(); exit; } } function addUser($username,$password){ global $pdo; try{ $query = $pdo->prepare("INSERT INTO user SET username = ?, password = ?"); $password = password_hash($password, PASSWORD_BCRYPT); $result = $query->execute([$username, $password]); }catch(Exception $e){ echo "Erreur " : .$e->getMessage(); exit; } return $result; } //---------------------------------------------------------------------------------------// //récupoération PROPRE des variables AVANT de les utiliser //---------------------------------------------------------------------------------------// $username = !empty($_POST['username']) ? trim($_POST['username']) : NULL; $password = !empty($_POST['password']) ? trim($_POST['password']) : NULL; $password_confirm = !empty($_POST['password_confirm']) ? trim($_POST['password_confirm']) : NULL; //---------------------------------------------------------------------------------------// //on vérifie que le formulaire a été envoyé ( tu peux remplacer le "username" par le name de ton bouton submit si tu veux //---------------------------------------------------------------------------------------// if(isset($_POST['username'])){ $_SESSION['auth'] = NULL; $errors = array(); if (!preg_match('/^[a-zA-Z0-9_]+$/', $username)) { $errors['username']= "Votre pseudo ne correspond pas aux caractères valides"; }else{ $u = getUserIdByUserName($username); if ($u) { $errors['username'] = 'Pseudo déjà pris'; }else{ if (empty($password) || $password != $password_confirm) { $errors['password']= "Votre mot de passe ne correspond pas ou n'est pas rempli correctement!"; } else { $result = addUser($username,$password); if($result){ $_SESSION['auth'] = $u; echo " Compte enregistré "; // header('Location: ' . $router->url('blog')); exit(); } } } } }
ah, une petite erreur dans mon code...
Si l'insertion en bdd se fait... $u n'existe pas ...
Si tu as bien mis un ID auto incrémenté en clé primaire de ta table... il faut modifier le code par :
Et dans la variable de session
Si l'insertion en bdd se fait... $u n'existe pas ...
Si tu as bien mis un ID auto incrémenté en clé primaire de ta table... il faut modifier le code par :
function addUser($username,$password){ global $pdo; try{ $query = $pdo->prepare("INSERT INTO user SET username = ?, password = ?"); $password = password_hash($password, PASSWORD_BCRYPT); $query->execute([$username, $password]); $result = $pdo->lastInsertId(); // retourne l'id auto-incrémenté généré lors de l'insertion en bdd }catch(Exception $e){ echo "Erreur " : .$e->getMessage(); exit; } return $result; }
Et dans la variable de session
} else { $result = addUser($username,$password); if($result){ $_SESSION['auth'] = $result; echo " Compte enregistré "; // header('Location: ' . $router->url('blog')); exit(); }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
genial Merci bcp c'est bien ce genre d'info qui me manque !!
merci bcp je vais lire, essayer de tout comprendre et appliquer !! merci jordane45
merci bcp je vais lire, essayer de tout comprendre et appliquer !! merci jordane45
Vraiment merci !! car si on trouve qqun qui explique bien et bien c'est un grand bout de chemin de fait ! merci moi j'ai fait une vue user.php avec mes getters et setters et j'ai fait aussi une table
alors je pense qu'avec ce que tu m'as donné comme conseil et ce que j'avais fait dans un 1er temps j'ai du doublon et je vais inserer ce que tu m'as dit à la place de mon code!
en plus j'ai fait 3 fichiers : 1 pour s'inscrire un pour ceux qui sont inscrits et un pour les admin !! probablement que je me suis compliquee la vie mais je me dis qu'apres en relisant peut etre je supprimerai ! tu vois là :
dans mon phpmyadmin je mets 1 et donc 1 c'est mon admin et les autres seront mes membres !
en tout cas là je vais refaire selon tes conseils qui me semblent tres precieux !
merci
enfin de compte si je resume : je devrais mettre mes functions ( getUserIdByuser : equivalent à la mienne je crois sauf erreur : findByUsername)(moi j'ai une class Table mere + function addUsers ou createUser) dans ma table et dans mes controllers : mes if
et bien sur mes vues dans mes views (html)
c'est vrai que ce que je t'ai envoyé n'a rien de mvc poo car je me suis basee ( et j'ai compris) sur la lecon grafikart gestion membre et rectifiant selon mon besoin !
j'ai un fichier de connection à part pour pdo
j'espere que je t'ai pas trop embrouillé dans mes explications c'est pas le but !! je vais essayer de remettre au propre tout ca !
belle journee
final class UserTable extends Table { protected $table = "user"; protected $class = User::class; public function findByUsername(string $username) { $query = $this->pdo->prepare('SELECT * FROM ' . $this->table . ' WHERE username = :username'); $query->execute(['username' => $username]); $query->setFetchMode(\PDO::FETCH_CLASS, $this->class); $result = $query->fetch(); if ($result === false) { throw new NotFoundException($this->table, $username); } return $result; } public function createUser(User $user) { $id = $this->create([ 'username' => $user->getUsername(), 'password' => $user->getPassword(), 'is_admin' => 1, ]); $user->setId($id); return $user; } }
alors je pense qu'avec ce que tu m'as donné comme conseil et ce que j'avais fait dans un 1er temps j'ai du doublon et je vais inserer ce que tu m'as dit à la place de mon code!
en plus j'ai fait 3 fichiers : 1 pour s'inscrire un pour ceux qui sont inscrits et un pour les admin !! probablement que je me suis compliquee la vie mais je me dis qu'apres en relisant peut etre je supprimerai ! tu vois là :
dans mon phpmyadmin je mets 1 et donc 1 c'est mon admin et les autres seront mes membres !
en tout cas là je vais refaire selon tes conseils qui me semblent tres precieux !
merci
enfin de compte si je resume : je devrais mettre mes functions ( getUserIdByuser : equivalent à la mienne je crois sauf erreur : findByUsername)(moi j'ai une class Table mere + function addUsers ou createUser) dans ma table et dans mes controllers : mes if
et bien sur mes vues dans mes views (html)
c'est vrai que ce que je t'ai envoyé n'a rien de mvc poo car je me suis basee ( et j'ai compris) sur la lecon grafikart gestion membre et rectifiant selon mon besoin !
j'ai un fichier de connection à part pour pdo
j'espere que je t'ai pas trop embrouillé dans mes explications c'est pas le but !! je vais essayer de remettre au propre tout ca !
belle journee
Je corrige juste une chose
Ce n'est pas une vue .. mais un model ( le M du MVC )
Pour le model, ce n'est pas utile.
Un seul model "user" suffit pour gérer tout ça
Oui
oi j'ai fait une vue user.php avec mes getters et setters
Ce n'est pas une vue .. mais un model ( le M du MVC )
en plus j'ai fait 3 fichiers : 1 pour s'inscrire un pour ceux qui sont inscrits et un pour les admin
Pour le model, ce n'est pas utile.
Un seul model "user" suffit pour gérer tout ça
enfin de compte si je resume :
- je devrais mettre mes functions ( getUserIdByuser : equivalent à la mienne je crois sauf erreur : findByUsername)(moi j'ai une class Table mere + function addUsers ou createUser)
dans ma table
- et dans mes controllers : mes if
- et bien sur mes vues dans mes views (html)
Oui
Oui je me suis trompée c est bien dans mon M désolée. Je fais tout ca ok merci bien ..je me permettrai après d envoyer le final...J ai tellement envie d y arriver..je suis motivée. A ++
Hello !! quand je parlais de 3 fichiers c'etait 3 fichiers controllers (:( rien ke ca) !
1/login_admin. php 2/login_member.php et 3/login_register.php! qui se ressemblent bcp au demeurant !
et un modele et 1 table ou j'ai mis ( enfin tenté de mettre mes query)!
en essayant de resumer : dans controller 1admin: j'appelle ma table, ma connection.
login_admin.php :
donc pour moi je dis : va chercher mon user et si il est administrateur ok tu te connectes sinon
tu es redirigé sur ma page blog et pas dans l'admin !!
ensuite j'ai mon 2eme login_member :
meme chose sauf que je pense lui dire : utilise la table user et recupere les donnees du user! (getUsername) + mes ifs......
login_member.php
et mon 3eme login register : meme punition si ce n'est que j'ajoute l'appel de ma function getCreateUser
login_register.php:
Ne vous fachez pas , j'avais une petite nenette avant qui m'avait dit : malory traduits mot à mot et tu y arriveras et ca m'a bcp aidé meme si je suis sure j ai ecrits des betises !! pardonnez moi :(
quant à ma table UserTable : j'ai fait plusieurs fonctions et celle createUser est sur la meme pratique que mes post et comment! et mes requetes pour creer, ajouter ou chercher
quant à mon model : j'ai mes getters et setters pour avec les objets qui correspondent
à chaque colonne de ma bdd.
si vous voyez une plein de betises, go go go :)
sinon bon WE
1/login_admin. php 2/login_member.php et 3/login_register.php! qui se ressemblent bcp au demeurant !
et un modele et 1 table ou j'ai mis ( enfin tenté de mettre mes query)!
en essayant de resumer : dans controller 1admin: j'appelle ma table, ma connection.
login_admin.php :
$user = new User(); $table = new UserTable(Connection::getPDO()); $pdo = Connection::getPDO(); if (empty($_POST['password'])) { $errors['password']= "Votre mot de passe ne correspond pas ou n'est pas rempli correctement!"; } else { try { $user = $table->findByUsername($_POST['username']); if (password_verify($_POST['password'], $user->getPassword()) === true) { session_start(); $_SESSION['auth'] = $user; } if ($user->getIsAdmin()) { header('Location: ' . $router->url('admin_posts')); exit(); } else { header('Location: ' . $router->url('blog')); exit(); } } catch (NotFoundException $e) { } } require_once('../views/auth/login_admin.php');
donc pour moi je dis : va chercher mon user et si il est administrateur ok tu te connectes sinon
tu es redirigé sur ma page blog et pas dans l'admin !!
ensuite j'ai mon 2eme login_member :
meme chose sauf que je pense lui dire : utilise la table user et recupere les donnees du user! (getUsername) + mes ifs......
login_member.php
$user = new User(); $table = new UserTable(Connection::getPDO()); $pdo = Connection::getPDO(); $user ->getUsername('username', 'password'); if (empty($_POST['password'])) { $errors['password']= "Votre mot de passe ne correspond pas ou n'est pas rempli correctement!"; } else { if (!empty($_POST) && !empty($_POST['username']) && !empty($_POST['password'])) { echo ' Vous allez être conntecté'; }else { echo ' merci de recommencer'; } if (password_verify($_POST['password'], $user->password)) { $_SESSION['auth'] = $user; header('Location: ' . $router->url('blog')); exit(); } } } require_once('../views/auth/login_member.php');
et mon 3eme login register : meme punition si ce n'est que j'ajoute l'appel de ma function getCreateUser
login_register.php:
$user = new User; $pdo = Connection::getPDO(); $user->getUsername($user); $errors = []; if (!empty($_POST)) { $errors = array(); if (empty($_POST['username']) || !preg_match('/^[a-zA-Z0-9_]+$/', $_POST['username'])) { $errors['username']= "Votre pseudo ne correspond pas aux caractères valides"; } else { if ($u) { $errors['username'] = 'Pseudo déjà pris'; } } if (empty($_POST['password']) || $_POST['password'] != $_POST['password_confirm']) { $errors['password']= "Votre mot de passe ne correspond pas ou n'est pas rempli correctement!"; } if (empty($errors)) { die('Compte enregistré'); $_SESSION['auth'] = $u; header('Location: ' . $router->url('blog')); exit(); } } require_once('../views/auth/login_register.php');
Ne vous fachez pas , j'avais une petite nenette avant qui m'avait dit : malory traduits mot à mot et tu y arriveras et ca m'a bcp aidé meme si je suis sure j ai ecrits des betises !! pardonnez moi :(
quant à ma table UserTable : j'ai fait plusieurs fonctions et celle createUser est sur la meme pratique que mes post et comment! et mes requetes pour creer, ajouter ou chercher
final class UserTable extends Table { protected $table = "user"; protected $class = User::class; public function findByUsername(string $username) { $query = $this->pdo->prepare("SELECT * FROM ' . $this->table . ' WHERE username = ?"'); $query->execute([ $_POST['username']]); $query->setFetchMode(\PDO::FETCH_CLASS, $this->class); $result = $query->fetch(); if ($result === false) { throw new NotFoundException($this->table, $username); } return $result; } public function addUser($username,$password) { $query = $this->pdo->prepare("INSERT INTO user SET username = ?, password = ?"); $password = password_hash($password, PASSWORD_BCRYPT); $query->execute([$username,$password]); $query->setFetchMode(PDO::FETCH_CLASS, $this->class); $result = $query->fetch(); if ($result === true) { echo 'l \utilisateur est enregistré'; } else { echo 'merci de recommencer votre enregistrement '; } return $result; } public function createUser(User $user) { $id = $this->create([ 'username' => $user->getUsername(), 'password' => $user->getPassword(), 'is_admin' => 1, ]); $user->setId($id); return $user; } }
quant à mon model : j'ai mes getters et setters pour avec les objets qui correspondent
à chaque colonne de ma bdd.
si vous voyez une plein de betises, go go go :)
sinon bon WE
login_admin.php
,
login_register.php et login_member.php
Il manque le session_start
class UserTable :
Il manque les try/catch autour de chaque requête
Ta concaténation n'est pas bonne... tu as utilisé des simples quotes à la place des doubles.
- Prends l'habitude de placer ton session_start au tout début de ton code php
,
login_register.php et login_member.php
Il manque le session_start
class UserTable :
Il manque les try/catch autour de chaque requête
$query = $this->pdo->prepare("SELECT * FROM ' . $this->table . ' WHERE username = ?"');
Ta concaténation n'est pas bonne... tu as utilisé des simples quotes à la place des doubles.
ok merci je vais rectifier toutes mes betises !!! je savais pas qu'il fallait un try catch à chaque fois !! merci
et pour cession en haut , meme si j'ai mon fichier auth.php avec ma fonction?
merci pour tout !!! arff je galere :( merci jordane45 :)
et pour cession en haut , meme si j'ai mon fichier auth.php avec ma fonction?
<?php namespace App; use App\Security\ForbiddenException; class Auth { public static function check() { if (session_status() === PHP_SESSION_NONE) { session_start(); } if (!isset($_SESSION['auth'])) { throw new ForbiddenException(); } } }
merci pour tout !!! arff je galere :( merci jordane45 :)