Besoin daide
queenb
-
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, je suis débutant en php et j'essaie d'afficher la photo de l'utilisateur qui se connecte a mon site et j'arrive pas... ci dessous le le message d'erreur qu'on met
Parse error: syntax error, unexpected ''"'' (T_CONSTANT_ENCAPSED_STRING) in C:\xampp\htdocs\MES ARTICLES\BLOGSUITE\INDEX.php on line 63
voici ma ligne 63
<?php echo((isset($_SESSION['PROFILE']))?('<img src="images/'.$_SESSION['avatar']'"'):""); ?>,<br />
Bienvenue sur notre site.<br />
Parse error: syntax error, unexpected ''"'' (T_CONSTANT_ENCAPSED_STRING) in C:\xampp\htdocs\MES ARTICLES\BLOGSUITE\INDEX.php on line 63
voici ma ligne 63
<?php echo((isset($_SESSION['PROFILE']))?('<img src="images/'.$_SESSION['avatar']'"'):""); ?>,<br />
Bienvenue sur notre site.<br />
11 réponses
<?php echo isset($_SESSION['PROFILE']) ? '<img src="images/'.$_SESSION['avatar'].'"' : "" ; ?> Bienvenue sur notre site.<br />
PS: A l'avenir, merci d'utiliser les BALISES DE CODE pour poster du code sur le forum
Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
MERCI JORDAN DE MAVOIR REPONDU MAIS il ne recupere tjr pas la photo de lutilisateur qui sy connecte ... ci dessous mon code php et html
mon formulaire
<?php $bdd = new PDO('mysql:host=127.0.0.1;dbname=projet', 'root', ''); if(isset($_POST['submit'])){ $pseudoconnect = htmlspecialchars($_POST['psdoconnect']); $mdpconnect = sha1($_POST['passconnect']); if(!empty($pseudoconnect) AND !empty($mdpconnect)) { // On va chercher si ces données existes dans la bd $requser = $bdd->prepare("SELECT * FROM espace_membres WHERE pseudo = '".$pseudoconnect."' AND mot_de_passe = '".$mdpconnect."'"); $requser->execute(array($pseudoconnect, $mdpconnect)); $userexist = $requser->rowCount(); if($userexist == 1){ $userinfo = $requser->fetch(); session_start(); $_SESSION['PROFILE'] = $requser; $_SESSION['pseudo'] = $userinfo['pseudo']; $_SESSION['avatar'] = $userinfo['avatar']; ?> bienvenue "<?php echo htmlentities($userinfo['pseudo']); ?>" : <table style="width:500px;"> <tr> <td><?php if($userinfo['avatar']!=''){ echo '<img src="'.htmlentities($userinfo['avatar'], ENT_QUOTES, 'UTF-8').'" alt="Image Perso" style="max-width:100px;max-height:100px;" />'; } else { echo 'Cet utilisateur n\'a pas d\'image perso.'; } ?></td> <td class="right"><h1><?php echo htmlentities($userinfo['pseudo'], ENT_QUOTES, 'UTF-8'); ?></h1> </tr> </table> <?php } else { echo 'Cet utilisateur n\'existe pas.'; } } header("Location: INDEX.php"); } else { $erreur = "Mauvais pseudo ou mot de passe !"; } ?>
mon formulaire
<form action="connexion.php" method="post"> <h2 style="color:#fff;">Se connecter</h2> <input type="text" name="psdoconnect" placeholder="pseudo" required><br><br> <input type="password" name="passconnect" placeholder="Password" required /><br /><br /> <a href=""><input type="submit" value="se connecter" name="submit" /></a><br /><br />
Quel est le rapport entre ton problème du départ et le code que tu nous montres maintenant ?
Le code ne correspond pas...
de plus il y a quelques soucis dans ton code... J'y reviendrai plus tard.
Pour commencer prends bonne note des conseils donnés dans les liens suivant :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
.
Le code ne correspond pas...
de plus il y a quelques soucis dans ton code... J'y reviendrai plus tard.
Pour commencer prends bonne note des conseils donnés dans les liens suivant :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
.
Ok je texplik mon pb .. j'ai conçu un petit site de e-commerce ou, pour faire des achats il faut être membre sur le site.. j'ai créer le formulaire d'inscription ainsi que la base de donnée et l'inscription marche. le soucis de situe au niveau de la connexion. Lorsque l'utilisateur se connecte après s'être inscrit j'aimerai lui afficher sa photo et un message de bienvenue.. je n'arrive pas a le faire depuis
Donc, comme je le disais.. il y a pleins de soucis dans ton code.
- rowCount(); ne s'utilise JAMAIS sur une requête de type 'select' ( à la place on fera plutôt un fetchAll sur le résultat de la requête puis un count )
-Tu n'as pas activé l'affichage des erreurs PHP
- Tu n'as pas activé les erreurs PDO
- Tu ne gères pas les éventuelles erreurs PDO ( en utilisant des blocs TRY/CATCH)
- ton
- Tu utilises le sha1 pour "crypter" tes mots de passe.... alors que ce n'est plus du tout sécurisé ( à la place, il faut utiliser les fonctions php : password_hash et password_verify )
- On n'utilise jamais htmlspecialchars pour le traitement des données en BDD .. ça ne s'utilise QUE pour l'affichage.
- Tu ne devrais pas avoir à utiliser de htmlentities ENT_QUOTES, 'UTF-8' .. je t'invite à appliquer le contenu de ce lien : https://forums.commentcamarche.net/forum/affich-37584944-php-html-caracteres-accentues-et-l-utf8
Bref, commence par appliquer l'ensemble des conseils donnés dans les liens
(je te les redonne au cas où )
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Puis reviens nous voir avec ton code modifié si tu rencontres toujours des soucis.
- rowCount(); ne s'utilise JAMAIS sur une requête de type 'select' ( à la place on fera plutôt un fetchAll sur le résultat de la requête puis un count )
-Tu n'as pas activé l'affichage des erreurs PHP
- Tu n'as pas activé les erreurs PDO
- Tu ne gères pas les éventuelles erreurs PDO ( en utilisant des blocs TRY/CATCH)
- ton
header("Locationne peut pas fonctionner puisque tu as déjà affiché du texte sur ta page. Cela devrait te provoquer une erreur...
- Tu utilises le sha1 pour "crypter" tes mots de passe.... alors que ce n'est plus du tout sécurisé ( à la place, il faut utiliser les fonctions php : password_hash et password_verify )
- On n'utilise jamais htmlspecialchars pour le traitement des données en BDD .. ça ne s'utilise QUE pour l'affichage.
- Tu ne devrais pas avoir à utiliser de htmlentities ENT_QUOTES, 'UTF-8' .. je t'invite à appliquer le contenu de ce lien : https://forums.commentcamarche.net/forum/affich-37584944-php-html-caracteres-accentues-et-l-utf8
Bref, commence par appliquer l'ensemble des conseils donnés dans les liens
(je te les redonne au cas où )
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Puis reviens nous voir avec ton code modifié si tu rencontres toujours des soucis.
jordan.. jai essayer suivre les étapes que vous mavez donnée en reprenant tout depuis le début. mais là mes données ne vont plus la base de donnée on me dit m MySQL a retourné un résultat vide (c'est à dire aucune ligne). ci dessous mes codes
formulaire
code insertion php
ma page de connexion a la bd
formulaire
<form action="inscription.php" method="post" enctype="multipart/form-data"> <center><h2 style="color: green;">S'inscrire</h2></center> <input type="text" name="pseudo" placeholder="pseudo" required><br> <input type="email" name="email" placeholder="email" required><br> <input type="password" name="mdp" placeholder="Password" required><br> <input type="password" name="cmdp" placeholder="repeatPassword" required><br> <input type="contact" name="numero" placeholder="contact"><br> <input type="submit" value="s'inscrire" name="register" class="btn btn-block btn-primary"><br><br>
code insertion php
<?php require_once 'connect_bd.php'; if (isset($_POST['register'])){ if(!empty($_POST['pseudo']) AND !empty($_POST['mail']) AND !empty($_POST['mdp']) AND !empty($_POST['cmdp']) AND !empty($_POST['numero'])) { $errors=array(); //test sur le pseudo if(empty($_POST['pseudo']) || !preg_match('/^[a-zA-Z0-9]+$/',$_POST['pseudo'])) { $errors['pseudo']="votre pseudo n'est pas valide(alphanumerique)"; } else { $req = $pdo->prepare('SELECT id FROM espace_membres WHERE pseudo = ?'); $req->execute([$_POST['pseudo']]); $user = $req->fetch(); if ($user) { $errors['pseudo'] = 'ce pseudo est deja pris'; } } // test sur email if(empty($_POST['email']) || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { $errors['email'] = "email invalide"; } else { $req = $pdo->prepare('SELECT id FROM espace_membres WHERE email = ?'); $req->execute([$_POST['email']]); $user = $req->fetch(); if ($user) { $errors['email'] = 'cet email existe deja pour un autre compte'; } } //test sur le mot de passe: if(empty($_POST['mdp']) || $_POST['mdp'] != $_POST['cmdp']) { $errors['mdp']="entrer un mot de passe valide"; } if (empty($errors)) { $requete = $pdo->prepare("INSERT INTO espace_membres SET pseudo = ?, email = ?, mot_de_passe = ?, contact = ?"); //cryptage du mot de passe $mdp = password_hash($_POST['mdp'], PASSWORD_BCRYPT); //execution de la requete $requete->execute([$_POST['pseudo'], $_POST['email'], $mdp, $_POST['numero']]); die('felicitation votre compte a bien été créer'); } } } ?>
ma page de connexion a la bd
<?php error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); // If form submitted, insert values into the database. try{ $bdd = new PDO('mysql:host=127.0.0.1;dbname=projet', 'root', ''); // Activation des erreurs PDO $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); } catch(PDOException $e) { echo 'connection failed: ' or die('Erreur : ' . $e->getMessage()); } ?>
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Il manque encore la récupération des variables.. et ton code mérite une petite refonte.
Je te propose :
Créé un fichier user.class.php contenant :
Et ton code devient
Je te propose :
Créé un fichier user.class.php contenant :
class user { private $bdd = null; function __construct($bdd) { $this->bdd = $bdd; } public function dbExec($sql, $datas = NULL) { //Execution de la requete try { $requete = $this->bdd->prepare($sql); $requete->execute($datas); } catch (Exception $e) { // en cas d'erreur : echo " Erreur ! " . $e->getMessage(); echo " Les datas : "; print_r($datas); } return $requete; } public function getUserByPseudo($pseudo) { $sql = 'SELECT id FROM espace_membres WHERE pseudo = ?'; $datas = array($pseudo); $res = $this->dbExec($sql,$datas); return $res->fetchAll(); } public function getUserByMail($Mail) { $sql = 'SELECT id FROM espace_membres WHERE email = ?'; $datas = array($Mail); $res = $this->dbExec($sql,$datas); return $res->fetchAll(); } public function addUser($pseudo,$email,$mdp,$contact) { //cryptage du mot de passe $mdp = password_hash($mdp, PASSWORD_BCRYPT); //insertion en BDD $sql = "INSERT INTO espace_membres (pseudo, email, mot_de_passe , contact) values (?,?,?,?) "; $datas = array($pseudo,$email,$mdp,$contact); $res = $this->dbExec($sql,$datas); return $res; } /** * Fonction permettant de vérifier si l'utilisateur existe en fonction de son login et password */ public function authentification($pseudo,$mdp){ $user = $this->getUserByPseudo($pseudo); //verifie qu'il n'y a bien qu'un seul user avec ce pseudo.. if(!empty($user) && count($user)==1){ $mdpBdd = $user[0]['mot_de_passe']; if (password_verify($mdp, $mdpBdd)){ return $user; }else{ return false; } } } }
Et ton code devient
<?php //connexion à la bdd // penser à activer l'affichage des erreurs PDO : https://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs require_once 'connect_bd.php'; // on inclu la class user require_once "user.class.php"; // on inclu la class user //initialisation des variables $errors = array(); // recuperation PROPRE des variables AVANT de les utiliser $pseudo = !empty($_POST['pseudo']) ? $_POST['pseudo'] : NULL; $mdp = !empty($_POST['mdp']) ? $_POST['mdp'] : NULL; $cmdp = !empty($_POST['cmdp']) ? $_POST['cmdp'] : NULL; $numero = !empty($_POST['numero']) ? $_POST['numero'] : NULL; $email = !empty($_POST['email']) ? $_POST['email'] : NULL; //on instancie la class user $oUser = new user($bdd); if (isset($_POST['register'])) { //test sur le pseudo if (!$pseudo || !preg_match('/^[a-zA-Z0-9]+$/', $pseudo)) { $errors['pseudo'] = "votre pseudo n'est pas valide(alphanumerique)"; } else { $user = $oUser->getUserByPseudo($pseudo); if (!empty($user)) { $errors['pseudo'] = 'ce pseudo est déjà pris'; } } // test sur email if (!$email || !filter_var($email, FILTER_VALIDATE_EMAIL)) { $errors['email'] = "email invalide"; } else { $user = $oUser->getUserByMail($mail); if ($user) { $errors['email'] = 'cet email existe deja pour un autre compte'; } } //test sur le mot de passe: if (!$mdp || $mdp != $cmdp) { $errors['mdp'] = "entrer un mot de passe valide"; } if (empty($errors)) { if($oUser->addUser($pseudo,$email,$mdp,$contact)){ die('felicitation votre compte a bien été créer'); } }else{ print_r($errors); } } ?>
merci jordan jai essayer dappliquer le code mais on met cette erreur
"Notice: Undefined variable: pdo in C:\xampp\htdocs\MES ARTICLES\BLOGSUITE\inscription.php on line 23"
"Notice: Undefined variable: pdo in C:\xampp\htdocs\MES ARTICLES\BLOGSUITE\inscription.php on line 23"
jai une question dans cette ligne qui suit est ce que je dois mettre dans la parenthese a la place de $bdd mes parametre de connection a la bd?
" function __construct($bdd)"
" function __construct($bdd)"
voici la ligne 23 dont il sagit
j'ai essayer de mettre $bdd a la place de $pdo. quand je le fait le message d'erreur disparaît mais les données ne vont toujours pas dans ma base de donnée
$oUser = new user($pdo);
j'ai essayer de mettre $bdd a la place de $pdo. quand je le fait le message d'erreur disparaît mais les données ne vont toujours pas dans ma base de donnée
Rien ne s'affiche... Lorsque je rempli le formulaire et que je valide ça m'affiche une page blanche vide et les données ne vont pas dans la base de données