MEssage Alerte s'ouvre à l'ouverture de la page
Fermé
malo91
-
4 févr. 2021 à 15:22
jordane45 Messages postés 38452 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 10 mars 2025 - 5 févr. 2021 à 20:25
jordane45 Messages postés 38452 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 10 mars 2025 - 5 févr. 2021 à 20:25
A voir également:
- MEssage Alerte s'ouvre à l'ouverture de la page
- Message - Guide
- Supprimer une page word - Guide
- Recuperer message whatsapp supprimé - Guide
- Page d'ouverture google - Guide
- Message d'absence thunderbird - Guide
9 réponses
jordane45
Messages postés
38452
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 mars 2025
4 740
4 févr. 2021 à 16:07
4 févr. 2021 à 16:07
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
jordane45
Messages postés
38452
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 mars 2025
4 740
4 févr. 2021 à 20:14
4 févr. 2021 à 20:14
Bah.... En utilisant à If..
Mais bon.. sans voir ton code comment espère tu que je puisse être plus précis ?
Mais bon.. sans voir ton code comment espère tu que je puisse être plus précis ?
malo91
Messages postés
45
Date d'inscription
mardi 2 février 2021
Statut
Membre
Dernière intervention
3 août 2022
1
4 févr. 2021 à 20:35
4 févr. 2021 à 20:35
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 !
jordane45
Messages postés
38452
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 mars 2025
4 740
4 févr. 2021 à 21:21
4 févr. 2021 à 21:21
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(); } } } } }
jordane45
Messages postés
38452
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 mars 2025
4 740
4 févr. 2021 à 21:30
4 févr. 2021 à 21:30
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(); }
malo91
Messages postés
45
Date d'inscription
mardi 2 février 2021
Statut
Membre
Dernière intervention
3 août 2022
1
>
jordane45
Messages postés
38452
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 mars 2025
4 févr. 2021 à 21:36
4 févr. 2021 à 21:36
oui j'ai bien mis mon ID autoIncrementé !
merci et comme j'ai aussi du mal à bien analyser avec mon MVC!!!
je vais reflechir à tout ca merci bcp de ton aide
merci et comme j'ai aussi du mal à bien analyser avec mon MVC!!!
je vais reflechir à tout ca merci bcp de ton aide
jordane45
Messages postés
38452
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 mars 2025
4 740
>
malo91
Messages postés
45
Date d'inscription
mardi 2 février 2021
Statut
Membre
Dernière intervention
3 août 2022
4 févr. 2021 à 21:47
4 févr. 2021 à 21:47
Vu que tu es en MVC,
Les fonctions concernant le user que j'ai mis dans le script devraient se trouver dans le M ...
Le M serait, ici, une class pour gerer tes users.
Les fonctions concernant le user que j'ai mis dans le script devraient se trouver dans le M ...
Le M serait, ici, une class pour gerer tes users.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
malo91
Messages postés
45
Date d'inscription
mardi 2 février 2021
Statut
Membre
Dernière intervention
3 août 2022
1
Modifié le 4 févr. 2021 à 21:37
Modifié le 4 févr. 2021 à 21:37
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
malo91
Messages postés
45
Date d'inscription
mardi 2 février 2021
Statut
Membre
Dernière intervention
3 août 2022
1
Modifié le 5 févr. 2021 à 08:30
Modifié le 5 févr. 2021 à 08:30
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
jordane45
Messages postés
38452
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 mars 2025
4 740
5 févr. 2021 à 09:24
5 févr. 2021 à 09:24
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 ++
malo91
Messages postés
45
Date d'inscription
mardi 2 février 2021
Statut
Membre
Dernière intervention
3 août 2022
1
Modifié le 5 févr. 2021 à 19:00
Modifié le 5 févr. 2021 à 19:00
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
malo91
Messages postés
45
Date d'inscription
mardi 2 février 2021
Statut
Membre
Dernière intervention
3 août 2022
1
Modifié le 5 févr. 2021 à 19:17
Modifié le 5 févr. 2021 à 19:17
zut j'ai oublié le
code en php
au dernier !!
jordane45
Messages postés
38452
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 mars 2025
4 740
5 févr. 2021 à 19:36
5 févr. 2021 à 19:36
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.
malo91
Messages postés
45
Date d'inscription
mardi 2 février 2021
Statut
Membre
Dernière intervention
3 août 2022
1
5 févr. 2021 à 20:22
5 févr. 2021 à 20:22
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 :)
jordane45
Messages postés
38452
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 mars 2025
4 740
5 févr. 2021 à 20:25
5 févr. 2021 à 20:25
Si tu appelles ton fichier haute dans tes différents contrôleurs dans ce cas ça n'est plus nécessaire mais alors celui que tu as mis dans ton premier fichier n'est pas nécessaire non plus