Uploald un avatar
Résolu/Fermé
ir_1997
Messages postés
97
Date d'inscription
vendredi 12 juin 2020
Statut
Membre
Dernière intervention
13 juin 2021
-
Modifié le 13 juil. 2020 à 19:15
jordane45 Messages postés 38369 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 3 janvier 2025 - 15 juil. 2020 à 15:43
jordane45 Messages postés 38369 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 3 janvier 2025 - 15 juil. 2020 à 15:43
A voir également:
- Uploald un avatar
- Avatar facebook - Guide
- Avatar whatsapp gratuit - Accueil - WhatsApp
- Waptrick avatar - Télécharger - TV & Vidéo
- Changer avatar google - Guide
- Avatar messenger animé - Forum MSN / WLM
6 réponses
jordane45
Messages postés
38369
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
3 janvier 2025
4 721
13 juil. 2020 à 19:16
13 juil. 2020 à 19:16
Bonjour
Commence par appliquer le contenu de
Ce lien https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
puis montre-nous ton code modifié et indique nous l'éventuel message d'erreur
Commence par appliquer le contenu de
Ce lien https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
puis montre-nous ton code modifié et indique nous l'éventuel message d'erreur
jordane45
Messages postés
38369
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
3 janvier 2025
4 721
14 juil. 2020 à 11:10
14 juil. 2020 à 11:10
Voici ton code légèrement amélioré et corrigé
Comme tu peux le voir, j'ai découpé ton code en "fonctions".
Cela rend le code plus lisible et plus facile à maintenir.
Je te conseille de placer la connexion à ta bdd dans un fichier à part et les fonctions dans un autre, et de les inclure lorsque tu en as besoin. (pour éviter de les écrire plusieurs fois dans tes différentes pages de ton site).
Au passage, lorsque tu postes du code sur le forum, merci d'indiquer dans les balises de code, le langage afin d'avoir la coloration syntaxique et l'indentation.
Explications à lire entièrement, disponibles ici :
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Je t'invite également à lire les conseils donnés ici pour l'écriture de ton code php :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Tu verras également que j'ai mis un commentaire sur le "cryptage" des mots de passe.
Désormais, il faut passer par la fonction password_hash
mais je te laisse le changer toi même.
<?php session_start(); //---------------------------- //affichage des erreurs php //---------------------------- error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //---------------------------- //connexion à la bdd //---------------------------- try{ $bdd =new PDO('mysql:host=localhost;dbname=espace_membre; charset=utf8', 'root', ''); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); } //---------------------------- //fonctions //---------------------------- /** * Requête PDO */ function db_Exec($sql,$datas=NULL){ try{ $prep = $bdd->prepare($sql); return $prep->execute($datas); }catch(Exception $e){ echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); exit; } } //------------------------------- // Fonctions pour les membres: //------------------------------ function getMembmreById($id){ $sql = "SELECT * FROM membres WHERE id = ?"; $datas = array($id); $dbRes = db_Exec($sql,$datas); return $dbRes->fetch(); } function updatePseudo($id,$pseudo){ $sql = "UPDATE membres SET pseudo = ? WHERE id = ?"; $datas = array($pseudo,$id); $dbRes = db_Exec($sql,$datas); } function updateMail($id,$mail){ $sql = "UPDATE membres SET mail = ? WHERE id = ?"; $datas = array($mail,$id); $dbRes = db_Exec($sql,$datas); } function updateMotdepasse($id,$motdepasse){ $sql = "UPDATE membres SET motdepasse = ? WHERE id = ?"; $datas = array($motdepasse,$id); $dbRes = db_Exec($sql,$datas); } function updateAvatar($id,$avatar){ $sql = "UPDATE membres SET avatar = :avatar WHERE id = :id"; $datas = array(':avatar'=>$avatar,':id'=>$id); $dbRes = db_Exec($sql,$datas); } //---------------------------- //récupération propre des variables AVANT de les utiliser //---------------------------- $id = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL; $newpseudo = !empty($_POST['newpseudo']) ? $_POST['newpseudo'] : NULL; $newmail = !empty($_POST['newmail']) ? $_POST['newmail'] : NULL; $newmdp1 = !empty($_POST['newmdp1']) ? $_POST['newmdp1'] : NULL; $newmdp2 = !empty($_POST['newmdp2']) ? $_POST['newmdp2'] : NULL; $avatar = !empty($_FILES['avatar']) ? $_FILES['avatar'] : NULL; //---------------------------- //début du traitement //---------------------------- //si l'utilisateur n'est pas connecté : if(!$id){ header("Location: connexion.php"); exit; } //on récupère les infos de l'utilisateur : $user = $getMembmreById($id); if(empty($user)){ //utilisateur inconnu... header("Location: connexion.php"); exit; } if($newpseudo != $user['pseudo']) { updatePseudo($id,$newpseudo) header('Location: profil.php?id='.$id); exit; //toujours mettre un exit apres une redirection } if($newmail != $user['mail']) { updateMail($newmail,$id); header('Location: profil.php?id='.$id); exit; } if($newmdp1 && $newmdp2)) { $mdp1 = sha1($newmdp1); // la methode SHA n'est plus sécurisée, renseigne toi sur la fonction password_hash $mdp2 = sha1($newmdp2); if($mdp1 == $mdp2) { updateMotdepasse($id,$mdp1); header('Location: profil.php?id='.$id); exit; } else { $msg = "Vos deux mdp ne correspondent pas !"; } } if($avatar){ $tailleMax = 2097152; $extensionsValides = array('jpg', 'jpeg', 'gif', 'png'); if($avatar['size'] <= $tailleMax) { $extensionUpload = strtolower(substr(strrchr($avatar['name'], '.'), 1)); if(in_array($extensionUpload, $extensionsValides)) { $dirUpload = "membres/avatars/"; if (is_writable($dirUpload)) { $avatarName = $id.".".$extensionUpload; $chemin = $dirUpload.$avatarName; if( move_uploaded_file($avatar['tmp_name'], $chemin)) { updateAvatar($id,$avatarName); header('Location: profil.php?id='.$id); exit; } else { $msg = "Erreur durant l'importation de votre photo de profil"; } } else { $msg = 'Le dossier '.$dirUpload.' n\'est pas accessible en écriture !'; } } else { $msg = "Votre photo de profil doit être au format jpg, jpeg, gif ou png"; } } else { $msg = "Votre photo de profil ne doit pas dépasser 2Mo"; } } ?> <html> <head> <title>TUTO PHP</title> <meta charset="utf-8"> </head> <body> <div align="center"> <h2>Edition de mon profil</h2> <div align="left"> <form method="POST" action="" enctype="multipart/form-data"> <label>Pseudo :</label> <input type="text" name="newpseudo" placeholder="Pseudo" value="<?php echo $user['pseudo']; ?>" /><br /><br /> <label>Mail :</label> <input type="text" name="newmail" placeholder="Mail" value="<?php echo $user['mail']; ?>" /><br /><br /> <label>Mot de passe :</label> <input type="password" name="newmdp1" placeholder="Mot de passe"/><br /><br /> <label>Confirmation - mot de passe :</label> <input type="password" name="newmdp2" placeholder="Confirmation du mot de passe" /><br /><br /> <label>Avatar :</label> <input type="file" name="Avatar"/><br /><br /> <input type="submit" value="Mettre à jour mon profil !" /> </form> <?php if(isset($msg)) { echo $msg; } ?> </div> </div> </body> </html>
Comme tu peux le voir, j'ai découpé ton code en "fonctions".
Cela rend le code plus lisible et plus facile à maintenir.
Je te conseille de placer la connexion à ta bdd dans un fichier à part et les fonctions dans un autre, et de les inclure lorsque tu en as besoin. (pour éviter de les écrire plusieurs fois dans tes différentes pages de ton site).
Au passage, lorsque tu postes du code sur le forum, merci d'indiquer dans les balises de code, le langage afin d'avoir la coloration syntaxique et l'indentation.
Explications à lire entièrement, disponibles ici :
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Je t'invite également à lire les conseils donnés ici pour l'écriture de ton code php :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Tu verras également que j'ai mis un commentaire sur le "cryptage" des mots de passe.
Désormais, il faut passer par la fonction password_hash
mais je te laisse le changer toi même.
ir_1997
Messages postés
97
Date d'inscription
vendredi 12 juin 2020
Statut
Membre
Dernière intervention
13 juin 2021
14 juil. 2020 à 18:48
14 juil. 2020 à 18:48
merci beaucoup
j'ai petit souci enfaîte j'ai suivi les instruction mais sa me donne ce message d'erreur:
Parse error: syntax error, unexpected 'header' (T_STRING) in C:\xampp\htdocs\editionprofil.php on line 108
j'ai petit souci enfaîte j'ai suivi les instruction mais sa me donne ce message d'erreur:
Parse error: syntax error, unexpected 'header' (T_STRING) in C:\xampp\htdocs\editionprofil.php on line 108
jordane45
Messages postés
38369
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
3 janvier 2025
4 721
14 juil. 2020 à 20:29
14 juil. 2020 à 20:29
Ligne 107, j'ai oublié un point-virgule
ir_1997
Messages postés
97
Date d'inscription
vendredi 12 juin 2020
Statut
Membre
Dernière intervention
13 juin 2021
>
jordane45
Messages postés
38369
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
3 janvier 2025
15 juil. 2020 à 00:18
15 juil. 2020 à 00:18
suis vraiment du dérangement
il parait que ya toujours un souci
Notice: Undefined variable: getMembreById in C:\xampp\htdocs\editionprofil.php on line 98
Fatal error: Uncaught Error: Function name must be a string in C:\xampp\htdocs\editionprofil.php:98 Stack trace: #0 {main} thrown in C:\xampp\htdocs\editionprofil.php on line 98
il parait que ya toujours un souci
Notice: Undefined variable: getMembreById in C:\xampp\htdocs\editionprofil.php on line 98
Fatal error: Uncaught Error: Function name must be a string in C:\xampp\htdocs\editionprofil.php:98 Stack trace: #0 {main} thrown in C:\xampp\htdocs\editionprofil.php on line 98
jordane45
Messages postés
38369
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
3 janvier 2025
4 721
>
ir_1997
Messages postés
97
Date d'inscription
vendredi 12 juin 2020
Statut
Membre
Dernière intervention
13 juin 2021
15 juil. 2020 à 07:37
15 juil. 2020 à 07:37
Arf....
A corriger en
$user = $getMembmreById($id);
A corriger en
$user = getMembmreById($id);
ir_1997
Messages postés
97
Date d'inscription
vendredi 12 juin 2020
Statut
Membre
Dernière intervention
13 juin 2021
>
jordane45
Messages postés
38369
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
3 janvier 2025
Modifié le 15 juil. 2020 à 12:50
Modifié le 15 juil. 2020 à 12:50
c'est le même problème
Notice: Undefined variable: getMembmreById in C:\xampp\htdocs\editionprofil.php on line 98
Fatal error: Uncaught Error: Function name must be a string in C:\xampp\htdocs\editionprofil.php:98 Stack trace: #0 {main} thrown in C:\xampp\htdocs\editionprofil.php on line 98
Notice: Undefined variable: getMembmreById in C:\xampp\htdocs\editionprofil.php on line 98
Fatal error: Uncaught Error: Function name must be a string in C:\xampp\htdocs\editionprofil.php:98 Stack trace: #0 {main} thrown in C:\xampp\htdocs\editionprofil.php on line 98
jordane45
Messages postés
38369
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
3 janvier 2025
4 721
Modifié le 15 juil. 2020 à 14:56
Modifié le 15 juil. 2020 à 14:56
<?php session_start(); //---------------------------- //affichage des erreurs php //---------------------------- error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //---------------------------- //connexion à la bdd //---------------------------- try{ $bdd =new PDO('mysql:host=localhost;dbname=espace_membre; charset=utf8', 'root', ''); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); } //---------------------------- //fonctions //---------------------------- /** * Requête PDO */ function db_Exec($sql,$datas=NULL){ try{ $prep = $bdd->prepare($sql); return $prep->execute($datas); }catch(Exception $e){ echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); exit; } } //------------------------------- // Fonctions pour les membres: //------------------------------ function getMembreById($id){ $sql = "SELECT * FROM membres WHERE id = ?"; $datas = array($id); $dbRes = db_Exec($sql,$datas); return $dbRes->fetch(); } function updatePseudo($id,$pseudo){ $sql = "UPDATE membres SET pseudo = ? WHERE id = ?"; $datas = array($pseudo,$id); $dbRes = db_Exec($sql,$datas); } function updateMail($id,$mail){ $sql = "UPDATE membres SET mail = ? WHERE id = ?"; $datas = array($mail,$id); $dbRes = db_Exec($sql,$datas); } function updateMotdepasse($id,$motdepasse){ $sql = "UPDATE membres SET motdepasse = ? WHERE id = ?"; $datas = array($motdepasse,$id); $dbRes = db_Exec($sql,$datas); } function updateAvatar($id,$avatar){ $sql = "UPDATE membres SET avatar = :avatar WHERE id = :id"; $datas = array(':avatar'=>$avatar,':id'=>$id); $dbRes = db_Exec($sql,$datas); } //---------------------------- //récupération propre des variables AVANT de les utiliser //---------------------------- $id = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL; $newpseudo = !empty($_POST['newpseudo']) ? $_POST['newpseudo'] : NULL; $newmail = !empty($_POST['newmail']) ? $_POST['newmail'] : NULL; $newmdp1 = !empty($_POST['newmdp1']) ? $_POST['newmdp1'] : NULL; $newmdp2 = !empty($_POST['newmdp2']) ? $_POST['newmdp2'] : NULL; $avatar = !empty($_FILES['avatar']) ? $_FILES['avatar'] : NULL; //---------------------------- //début du traitement //---------------------------- //si l'utilisateur n'est pas connecté : if(!$id){ header("Location: connexion.php"); exit; } //on récupère les infos de l'utilisateur : $user = getMembreById($id); if(empty($user)){ //utilisateur inconnu... header("Location: connexion.php"); exit; } if($newpseudo != $user['pseudo']) { updatePseudo($id,$newpseudo); header('Location: profil.php?id='.$id); exit; //toujours mettre un exit apres une redirection } if($newmail != $user['mail']) { updateMail($newmail,$id); header('Location: profil.php?id='.$id); exit; } if($newmdp1 && $newmdp2) { $mdp1 = sha1($newmdp1); // la methode SHA n'est plus sécurisée, renseigne toi sur la fonction password_hash $mdp2 = sha1($newmdp2); if($mdp1 == $mdp2) { updateMotdepasse($id,$mdp1); header('Location: profil.php?id='.$id); exit; } else { $msg = "Vos deux mdp ne correspondent pas !"; } } if($avatar){ $tailleMax = 2097152; $extensionsValides = array('jpg', 'jpeg', 'gif', 'png'); if($avatar['size'] <= $tailleMax) { $extensionUpload = strtolower(substr(strrchr($avatar['name'], '.'), 1)); if(in_array($extensionUpload, $extensionsValides)) { $dirUpload = "membres/avatars/"; if (is_writable($dirUpload)) { $avatarName = $id.".".$extensionUpload; $chemin = $dirUpload.$avatarName; if( move_uploaded_file($avatar['tmp_name'], $chemin)) { updateAvatar($id,$avatarName); header('Location: profil.php?id='.$id); exit; } else { $msg = "Erreur durant l'importation de votre photo de profil"; } } else { $msg = 'Le dossier '.$dirUpload.' n\'est pas accessible en écriture !'; } } else { $msg = "Votre photo de profil doit être au format jpg, jpeg, gif ou png"; } } else { $msg = "Votre photo de profil ne doit pas dépasser 2Mo"; } } ?> <html> <head> <title>TUTO PHP</title> <meta charset="utf-8"> </head> <body> <div align="center"> <h2>Edition de mon profil</h2> <div align="left"> <form method="POST" action="" enctype="multipart/form-data"> <label>Pseudo :</label> <input type="text" name="newpseudo" placeholder="Pseudo" value="<?php echo $user['pseudo']; ?>" /><br /><br /> <label>Mail :</label> <input type="text" name="newmail" placeholder="Mail" value="<?php echo $user['mail']; ?>" /><br /><br /> <label>Mot de passe :</label> <input type="password" name="newmdp1" placeholder="Mot de passe"/><br /><br /> <label>Confirmation - mot de passe :</label> <input type="password" name="newmdp2" placeholder="Confirmation du mot de passe" /><br /><br /> <label>Avatar :</label> <input type="file" name="Avatar"/><br /><br /> <input type="submit" value="Mettre à jour mon profil !" /> </form> <?php if(isset($msg)) { echo $msg; } ?> </div> </div> </body> </html>
ir_1997
Messages postés
97
Date d'inscription
vendredi 12 juin 2020
Statut
Membre
Dernière intervention
13 juin 2021
Modifié le 15 juil. 2020 à 14:57
Modifié le 15 juil. 2020 à 14:57
Parse error: syntax error, unexpected ')' in C:\xampp\htdocs\editionprofil.php on line 118
jordane45
Messages postés
38369
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
3 janvier 2025
4 721
>
ir_1997
Messages postés
97
Date d'inscription
vendredi 12 juin 2020
Statut
Membre
Dernière intervention
13 juin 2021
15 juil. 2020 à 14:57
15 juil. 2020 à 14:57
tu sais que tu pourrais corriger par toi même..... le message est clair.
Et en effet, à a ligne 118, il y a une parenthèse en trop ( j'ai édité mon code précédent pour le corriger )
Et en effet, à a ligne 118, il y a une parenthèse en trop ( j'ai édité mon code précédent pour le corriger )
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
ir_1997
Messages postés
97
Date d'inscription
vendredi 12 juin 2020
Statut
Membre
Dernière intervention
13 juin 2021
15 juil. 2020 à 15:07
15 juil. 2020 à 15:07
suis désoler j'ai regarder mais j'avais pas remarquer
Notice: Undefined variable: bdd in C:\xampp\htdocs\editionprofil.php on line 30
Fatal error: Uncaught Error: Call to a member function prepare() on null in C:\xampp\htdocs\editionprofil.php:30 Stack trace: #0 C:\xampp\htdocs\editionprofil.php(45): db_Exec('SELECT * FROM m...', Array) #1 C:\xampp\htdocs\editionprofil.php(98): getMembreById('2') #2 {main} thrown in C:\xampp\htdocs\editionprofil.php on line 30
je pense que vais essayer de crée un fichier php a part pour l'avatar puis l'inclure sur profil.php
es c'est une bonne idée???
Notice: Undefined variable: bdd in C:\xampp\htdocs\editionprofil.php on line 30
Fatal error: Uncaught Error: Call to a member function prepare() on null in C:\xampp\htdocs\editionprofil.php:30 Stack trace: #0 C:\xampp\htdocs\editionprofil.php(45): db_Exec('SELECT * FROM m...', Array) #1 C:\xampp\htdocs\editionprofil.php(98): getMembreById('2') #2 {main} thrown in C:\xampp\htdocs\editionprofil.php on line 30
je pense que vais essayer de crée un fichier php a part pour l'avatar puis l'inclure sur profil.php
es c'est une bonne idée???
jordane45
Messages postés
38369
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
3 janvier 2025
4 721
15 juil. 2020 à 15:09
15 juil. 2020 à 15:09
Oh purée.. je n'étais pas bien réveillé quand j'ai écrit le code...
Faut ajouter la variable $bdd en global dans la fonction db_Exec
Faut ajouter la variable $bdd en global dans la fonction db_Exec
function db_Exec($sql,$datas=NULL){ global $bdd; try{ $prep = $bdd->prepare($sql); return $prep->execute($datas); }catch(Exception $e){ echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); exit; } }
ir_1997
Messages postés
97
Date d'inscription
vendredi 12 juin 2020
Statut
Membre
Dernière intervention
13 juin 2021
15 juil. 2020 à 15:18
15 juil. 2020 à 15:18
lol je comprend
Fatal error: Uncaught Error: Call to a member function fetch() on boolean in C:\xampp\htdocs\editionprofil.php:46 Stack trace: #0 C:\xampp\htdocs\editionprofil.php(98): getMembreById('2') #1 {main} thrown in C:\xampp\htdocs\editionprofil.php on line 46
Fatal error: Uncaught Error: Call to a member function fetch() on boolean in C:\xampp\htdocs\editionprofil.php:46 Stack trace: #0 C:\xampp\htdocs\editionprofil.php(98): getMembreById('2') #1 {main} thrown in C:\xampp\htdocs\editionprofil.php on line 46
jordane45
Messages postés
38369
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
3 janvier 2025
4 721
15 juil. 2020 à 15:43
15 juil. 2020 à 15:43
Désolé...
function db_Exec($sql,$datas=NULL){ global $bdd; try{ $prep = $bdd->prepare($sql); $prep->execute($datas); return $prep; }catch(Exception $e){ echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); exit; } }
Modifié le 13 juil. 2020 à 22:27
Edit: correction des balises de code
13 juil. 2020 à 22:28
--