Problème code php !
FlorianJ29
Messages postés
68
Date d'inscription
Statut
Membre
Dernière intervention
-
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, j'ai un problème sur une de mes pages php, alors qu'il ne me semble pas l'avoir modifier ! Peu de temps avant, j'avais fait une copie de mes scripts, donc j'ai recopier le code php dans ma page où se trouve le problème et ça fait exactement pareil !
Je ne comprends pas pourquoi il y a ce problème...
Je vous explique qu'est ce que ça doit faire en temps normal :
J'ai fait un système d'inscription, de connexion et de modification de profil, et la page dont je vous parle depuis tout à l'heure, est la page de modification de profil. Quand je clique sur le bouton "Mettre à jour mon profil" ce code doit s’exécuter :
Donc normalement il vérifie l’extension et la taille du fichier !!! Mais là, il vérifie rien du tout et en plus de ça, ça ne marche pas ! (modifier le pseudo, l'email ou le mot de passe fonctionne mais modifier la photo de profil ne fonctionne pas).
Merci d'avance, cordialement
FlorianJ29
Je ne comprends pas pourquoi il y a ce problème...
Je vous explique qu'est ce que ça doit faire en temps normal :
J'ai fait un système d'inscription, de connexion et de modification de profil, et la page dont je vous parle depuis tout à l'heure, est la page de modification de profil. Quand je clique sur le bouton "Mettre à jour mon profil" ce code doit s’exécuter :
if(isset($_FILES['avatar']) AND !empty($_FILES['avatar']['name'])) {
$tailleMax = 2097152;
$extensionsValides = array('jpg', 'jpeg', 'gif', 'png');
if($_FILES['avatar']['size'] <= $tailleMax) {
$extensionUpload = strtolower(substr(strrchr($_FILES['avatar']['name'], '.'), 1));
if(in_array($extensionUpload, $extensionsValides)) {
$chemin = "membres/avatars/";
if(!is_dir($chemin) || !is_writable($chemin)){
echo "<br>Erreur: <br>Le chemin << $chemin >> n'existe pas ou ne dispose pas des droits necessaires";
}else{
$fileToMove = !empty($_FILES['avatar']['tmp_name']) ? $_FILES['avatar']['tmp_name'] : NULL;
if($fileToMove){
$resultat = move_uploaded_file($fileToMove, $chemin.$_SESSION['id'].".".$extensionUpload);
}else{
echo "<br> Erreur, aucun fichier à déplacer !";
}
}
if($resultat) {
$updateavatar = $bdd->prepare('UPDATE liste_clients SET avatar = :avatar WHERE id = :id');
$updateavatar->execute(array(
'avatar' => $_SESSION['id'].".".$extensionUpload,
'id' => $_SESSION['id']
));
header('Location: profil2.php?id='.$_SESSION['id']);
} else {
$msg = "Erreur durant l'importation de votre photo de profil";
}
} 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";
}
}
Donc normalement il vérifie l’extension et la taille du fichier !!! Mais là, il vérifie rien du tout et en plus de ça, ça ne marche pas ! (modifier le pseudo, l'email ou le mot de passe fonctionne mais modifier la photo de profil ne fonctionne pas).
Merci d'avance, cordialement
FlorianJ29
A voir également:
- Problème code php !
- Code ascii - Guide
- Code puk bloqué - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code activation windows 10 - Guide
- Code blocks - Télécharger - Langages
2 réponses
Bonjour,
Commence par mettre en commentaire les redirections histoire de pouvoir lire les éventuels messages d'erreur...
Active la gestion des erreurs PDO
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Active l'affichage des erreurs PHP :
Place des ECHO dans tes différents IF .. pour savoir si ton code rentre dedans.
et une fois tout ça terminé... reviens nous voir si tu n'a toujours pas trouvé ton souci/
Cordialement,
Jordane
Commence par mettre en commentaire les redirections histoire de pouvoir lire les éventuels messages d'erreur...
Active la gestion des erreurs PDO
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Active l'affichage des erreurs PHP :
error_reporting(E_ALL); ini_set('display-errors','on');
Place des ECHO dans tes différents IF .. pour savoir si ton code rentre dedans.
et une fois tout ça terminé... reviens nous voir si tu n'a toujours pas trouvé ton souci/
Cordialement,
Jordane
Bon...;
J'ai remanié ton code ...
corrigé quelques erreurs ...
Découpé en fonctions ....
Bref.. voici :
Déjà .. on sépare la connexion du reste du code
Il suffirat ensuite de l'inclure dans les pages dans lesquelles tu en as besoin....
Ensuite, le reste de ton code :
J'ai remanié ton code ...
corrigé quelques erreurs ...
Découpé en fonctions ....
Bref.. voici :
Déjà .. on sépare la connexion du reste du code
<?php // fichier de connexion à la bdd : cnxBdd.php function get_cnx(){ $bdd = NULL; try{ $bdd = new PDO('mysql:host=localhost;dbname=u699215262_flo', 'u699215262_flo29', 'Bjiwpw4OkANM'); $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()); } return $bdd; } // + Fonction de requete ... function queryExec($sql,$a_datas=NULL){ $bdd = get_cnx(); //Execution de la requete try{ $requete = $bdd -> prepare($sql) ; $requete->execute($a_datas) ; }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($a_datas); } return !empty($requete) ? $requete : NULL; } ?>
Il suffirat ensuite de l'inclure dans les pages dans lesquelles tu en as besoin....
Ensuite, le reste de ton code :
<?php // Affichage des erreurs PHP error_reporting(E_ALL); ini_set('display-errors','on'); //démarrage des sessions session_start(); //Fichier de fonction pour la connexion à la bdd + l'execution de requetes: require_once "cnxBdd.php"; include_once('cookieconnect2.php'); //Récupération PROPRE des variables AVANT de les utiliser $id = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL; $newpseudo = !empty($_POST['newpseudo']) ? $_POST['newpseudo'] : NULL; $newemail = !empty($_POST['newemail']) ? $_POST['newemail'] : NULL; $newmdp1 = !empty($_POST['newmdp1']) ? sha1($_POST['newmdp1']) : NULL; $newmdp2 = !empty($_POST['newmdp2']) ? sha1($_POST['newmdp2']) : NULL; $avatar = !empty($_FILES['avatar']) ? $_FILES['avatar'] : NULL; function get_clients_by_id($id){ $sql = "SELECT * FROM liste_clients WHERE id = :id"; $a_datas = array(":id"=>$id); $result = queryExec($sql,$a_datas); return !empty($result) ? $result->fetch() : NULL; } function update_pseudo($pseudo,$id){ $sql = "UPDATE liste_clients SET email = :pseudo WHERE id = :id" ; $a_datas = array(":id"=>$id,":pseudo"=>$pseudo); $result = queryExec($sql,$a_datas); return !empty($result) ? $result : NULL; } function update_email($newemail,$id){ $sql = "UPDATE liste_clients SET email = :email WHERE id = :id" ; $a_datas = array(":id"=>$id,":email"=>$newemail); $result = queryExec($sql,$a_datas); return !empty($result) ? $result : NULL; } function update_pass($newmdp1,$id){ $sql = "UPDATE liste_clients SET passe = :newmdp1 WHERE id = :id" ; $a_datas = array(":id"=>$id,":newmdp1"=>$newmdp1); $result = queryExec($sql,$a_datas); return !empty($result) ? $result : NULL; } function update_avatar($fle_avatar,$id){ $sql = "UPDATE liste_clients SET avatar = :avatar WHERE id = :id" ; $a_datas = array(":id"=>$id,":avatar"=>$fle_avatar); $result = queryExec($sql,$a_datas); return !empty($result) ? $result : NULL; } $error = array(); // array contenant les éventuelles erreurs ... if($id) { $user = get_clients_by_id($id); if($newpseudo && $newpseudo != $user['pseudo']) { $insertpseudo = update_pseudo($newpseudo,$id); } if($newemail != $user['email']) { $insertemail = update_email($newemail,$id); } if($newmdp1 && $newmdp2) { if($newmdp1 == $newmdp2) { $insertmdp =update_pass($newmdp1,$id); } else { $error[] = "Vos deux mdp ne correspondent pas !"; } } if($avatar){ $chemin = "membres/avatars/"; $file_name = !empty($avatar['name']) ? $avatar['name'] : NULL; $file_size = !empty($avatar['size']) ? $avatar['size'] : NULL; if($file_name && $file_size <= $tailleMax){ $tailleMax = 2097152; $extensionsValides = array('jpg', 'jpeg', 'gif', 'png'); $extensionUpload = strtolower(substr(strrchr($file_name, '.'), 1)); if(in_array($extensionUpload, $extensionsValides)) { if(!is_dir($chemin) || !is_writable($chemin)){ $error[] = "<br>Erreur: <br>Le chemin << $chemin >> n'existe pas ou ne dispose pas des droits necessaires"; }else{ $fileToMove = !empty($avatar['tmp_name']) ? $avatar['tmp_name'] : NULL; if($fileToMove){ $resultat = move_uploaded_file($fileToMove, $chemin.$id.".".$extensionUpload); }else{ $error[] = "<br> Erreur, aucun fichier à déplacer !"; } } if($resultat) { $updateavatar = update_avatar($chemin.$id.".".$extensionUpload , $id); } else { $error[] = "Erreur durant l'importation de votre photo de profil"; } } else { $error[] = "Votre photo de profil doit être au format jpg, jpeg, gif ou png"; } } else { $error[] = "Votre photo de profil ne doit pas dépasser 2Mo"; } } if(!empty($error)){ foreach($error as $err){ echo "<br>".$err; } }else{ // si pas d'erreur.. header("Location: profil2.php?id=$id"); } } else { echo " No id in SESSION ..."; } ?>
J'ai mis ton code en place, ça à l'air beaucoup mieux !
Mais quand j'ai voulu essayé, je n'ai même pas pu voir la page de connexion de j'ai déjà eu une erreur dans la page "cookieconnect.php".
Code (cookieconect.php) :
Et l'erreur est :
Pourquoi sans touché a cette page, il peux y avoir une erreur ????
Merci
Cordialement,
FlorianJ29
Mais quand j'ai voulu essayé, je n'ai même pas pu voir la page de connexion de j'ai déjà eu une erreur dans la page "cookieconnect.php".
Code (cookieconect.php) :
<?php
if(!isset($_SESSION['id']) AND isset($_COOKIE['email'], $_COOKIE['passe']) AND !empty($_COOKIE['email'] AND !empty($_COOKIE['passe'])))
{
$requser = $bdd->prepare("SELECT * FROM liste_clients WHERE email = ? AND passe = ?");
$requser->execute(array($_COOKIE['email'], $_COOKIE['passe']));
$userexist = $requser->rowCount();
if($userexist == 1)
{
$userinfo = $requser->fetch();
$_SESSION['id'] = $userinfo['id'];
$_SESSION['pseudo'] = $userinfo['pseudo'];
$_SESSION['email'] = $userinfo['email'];
}
}
?>
Et l'erreur est :
Notice: Undefined variable: bdd in /home/u699215262/public_html/cookieconnect.php on line 4
Fatal error: Call to a member function prepare() on a non-object in /home/u699215262/public_html/cookieconnect.php on line 4
Pourquoi sans touché a cette page, il peux y avoir une erreur ????
Merci
Cordialement,
FlorianJ29
Aucune erreur ...
Comme je te l'ai indiqué .. j'ai modifié le code de ton fichier de connexion.
Désormais .. pour faire une requête tu dois utiliser directement la fonction queryExec()
Par contre... à quoi sert ce code vu que pour entrer dans le IF il faut déjà que la variable $_SESSION['id'] existe et soit renseignée ....
Aucun interret !!!
Je ne comprend vraiment pas ce que vient faire là le fichier cookieconnect2.php ....
Au passage tu verras que j'ai supprimé le ROWCOUNT car (comme déjà dit il me semble .... ) il ne FAUT PAS utiliser cette fonction mais plutôt faire un COUNT comme je l'ai fait !
Quoi qu'il en soit, pour respecter la même forme que le code que je t'ai donné précédement .. tu peux créer une fonction qui retourne les infos du user
et ensuite l'utiliser dans ton code.
Par contre, .. pourquoi passer par les "cookies" ? Ne serait-ce pas plutôt lorsque l'utilisateur se connecte via un formulaire et donc des variables $_POST ???
Pour finir, en reprenant l'intégralité de ton code, tu pourrais le structurer ainsi :
- Le fichier de connexion à la BDD + la fonction de requête
- Un fichier contenant les différentes fonctions necessaires pour ton user (client)
- Ton fichier de traitement faisant appel aux deux fichiers précédents.
Ce qui donnerait un truc du genre :
Fichier de connexion à la bdd
Fichier contenant les fonctions
Ton fichier de traitement ...
Comme je te l'ai indiqué .. j'ai modifié le code de ton fichier de connexion.
Désormais .. pour faire une requête tu dois utiliser directement la fonction queryExec()
<?php $session_id = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL; $cookie_email = !empty($_COOKIE['email']) ? $_COOKIE['email'] : NULL; $cookie_passe = !empty($_COOKIE['passe']) ? $_COOKIE['passe'] : NULL; if($session_id && $cookie_email && $cookie_passe){ $sql = "SELECT * FROM liste_clients WHERE email = :email AND passe = :passe"; $a_datas = array(":email"=>$cookie_email, ":passe"=>$cookie_passe); $req = queryExec($sql,$a_datas); $result = $req->fetchAll(); $userexist = !empty($result ) ? count($result) : 0; if( $userexist == 1) { $_SESSION['id'] = $result['id']; // Pourquoi faire vu que tu testes déjà que la variable $_SESSION['id'] existe avant d'arriver ici.... $_SESSION['pseudo'] = $result['pseudo']; $_SESSION['email'] = $result['email']; } } ?>
Par contre... à quoi sert ce code vu que pour entrer dans le IF il faut déjà que la variable $_SESSION['id'] existe et soit renseignée ....
Aucun interret !!!
Je ne comprend vraiment pas ce que vient faire là le fichier cookieconnect2.php ....
Au passage tu verras que j'ai supprimé le ROWCOUNT car (comme déjà dit il me semble .... ) il ne FAUT PAS utiliser cette fonction mais plutôt faire un COUNT comme je l'ai fait !
Quoi qu'il en soit, pour respecter la même forme que le code que je t'ai donné précédement .. tu peux créer une fonction qui retourne les infos du user
et ensuite l'utiliser dans ton code.
$email = !empty($_COOKIE['email']) ? $_COOKIE['email'] : NULL; $passe = !empty($_COOKIE['passe']) ? $_COOKIE['passe'] : NULL; function get_infos_user_by_passe_and_email($email,$passe){ $sql = "SELECT * FROM liste_clients WHERE email = :email AND passe = :passe"; $a_datas = array(":email"=>$email, ":passe"=>$passe); $req = queryExec($sql,$a_datas); $result = $req->fetchAll(); return !empty($result) ? $result : NULL; } if($email && $passe){ $result = get_infos_user_by_passe_and_email($email,$passe ); $userexist = !empty($result ) ? count($result) : 0; if( $userexist == 1) { $_SESSION['id'] = $result['id']; $_SESSION['pseudo'] = $result['pseudo']; $_SESSION['email'] = $result['email']; } }
Par contre, .. pourquoi passer par les "cookies" ? Ne serait-ce pas plutôt lorsque l'utilisateur se connecte via un formulaire et donc des variables $_POST ???
Pour finir, en reprenant l'intégralité de ton code, tu pourrais le structurer ainsi :
- Le fichier de connexion à la BDD + la fonction de requête
- Un fichier contenant les différentes fonctions necessaires pour ton user (client)
- Ton fichier de traitement faisant appel aux deux fichiers précédents.
Ce qui donnerait un truc du genre :
Fichier de connexion à la bdd
<?php // fichier de connexion à la bdd : cnxBdd.php function get_cnx(){ $bdd = NULL; try{ $bdd = new PDO('mysql:host=localhost;dbname=u699215262_flo', 'u699215262_flo29', 'Bjiwpw4OkANM'); $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()); } return $bdd; } // + Fonction de requete ... function queryExec($sql,$a_datas=NULL){ $bdd = get_cnx(); //Execution de la requete try{ $requete = $bdd -> prepare($sql) ; $requete->execute($a_datas) ; }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($a_datas); } return !empty($requete) ? $requete : NULL; } ?> ?>
Fichier contenant les fonctions
<?php // Fichier contenant les fonctions pour le user // clients.func.php // on aurait même pu en faire une class.. mais bon... function get_clients_by_id($id){ $sql = "SELECT * FROM liste_clients WHERE id = :id"; $a_datas = array(":id"=>$id); $result = queryExec($sql,$a_datas); return !empty($result) ? $result->fetch() : NULL; } function update_pseudo($pseudo,$id){ $sql = "UPDATE liste_clients SET email = :pseudo WHERE id = :id" ; $a_datas = array(":id"=>$id,":pseudo"=>$pseudo); $result = queryExec($sql,$a_datas); return !empty($result) ? $result : NULL; } function update_email($newemail,$id){ $sql = "UPDATE liste_clients SET email = :email WHERE id = :id" ; $a_datas = array(":id"=>$id,":email"=>$newemail); $result = queryExec($sql,$a_datas); return !empty($result) ? $result : NULL; } function update_pass($newmdp1,$id){ $sql = "UPDATE liste_clients SET passe = :newmdp1 WHERE id = :id" ; $a_datas = array(":id"=>$id,":newmdp1"=>$newmdp1); $result = queryExec($sql,$a_datas); return !empty($result) ? $result : NULL; } function update_avatar($fle_avatar,$id){ $sql = "UPDATE liste_clients SET avatar = :avatar WHERE id = :id" ; $a_datas = array(":id"=>$id,":avatar"=>$fle_avatar); $result = queryExec($sql,$a_datas); return !empty($result) ? $result : NULL; } function get_infos_user_by_passe_and_email($email,$passe){ $sql = "SELECT * FROM liste_clients WHERE email = :email AND passe = :passe"; $a_datas = array(":email"=>$email, ":passe"=>$passe); $req = queryExec($sql,$a_datas); $result = $req->fetchAll(); return !empty($result) ? $result : NULL; } ?>
Ton fichier de traitement ...
<?php // Affichage des erreurs PHP error_reporting(E_ALL); ini_set('display-errors','on'); //xn--dmarrage-b1a des sessions session_start(); //Fichier de fonction pour la connexion à la bdd + l'execution de requetes: require_once "cnxBdd.php"; // Fichier de fonctions du client (user) require_once "clients.func.php"; //-----------------------------------//_// Ancien fichier cookie... $email = !empty($_COOKIE['email']) ? $_COOKIE['email'] : NULL; $passe = !empty($_COOKIE['passe']) ? $_COOKIE['passe'] : NULL; if($email && $passe){ $result = get_infos_user_by_passe_and_email($email,$passe ); $userexist = !empty($result ) ? count($result) : 0; if( $userexist == 1) { $_SESSION['id'] = $result['id']; $_SESSION['pseudo'] = $result['pseudo']; $_SESSION['email'] = $result['email']; } } //-----------------------------------//__//Récupération PROPRE des variables AVANT de les utiliser $id = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL; $newpseudo = !empty($_POST['newpseudo']) ? $_POST['newpseudo'] : NULL; $newemail = !empty($_POST['newemail']) ? $_POST['newemail'] : NULL; $newmdp1 = !empty($_POST['newmdp1']) ? sha1($_POST['newmdp1']) : NULL; $newmdp2 = !empty($_POST['newmdp2']) ? sha1($_POST['newmdp2']) : NULL; $avatar = !empty($_FILES['avatar']) ? $_FILES['avatar'] : NULL; $error = array(); // array contenant les éventuelles erreurs ... if($id) { $user = get_clients_by_id($id); if($newpseudo && $newpseudo != $user['pseudo']) { $insertpseudo = update_pseudo($newpseudo,$id); } if($newemail != $user['email']) { $insertemail = update_email($newemail,$id); } if($newmdp1 && $newmdp2) { if($newmdp1 == $newmdp2) { $insertmdp =update_pass($newmdp1,$id); } else { $error[] = "Vos deux mdp ne correspondent pas !"; } } if($avatar){ $chemin = "membres/avatars/"; $file_name = !empty($avatar['name']) ? $avatar['name'] : NULL; $file_size = !empty($avatar['size']) ? $avatar['size'] : NULL; if($file_name && $file_size <= $tailleMax){ $tailleMax = 2097152; $extensionsValides = array('jpg', 'jpeg', 'gif', 'png'); $extensionUpload = strtolower(substr(strrchr($file_name, '.'), 1)); if(in_array($extensionUpload, $extensionsValides)) { if(!is_dir($chemin) || !is_writable($chemin)){ $error[] = "<br>Erreur: <br>Le chemin << $chemin >> n'existe pas ou ne dispose pas des droits necessaires"; }else{ $fileToMove = !empty($avatar['tmp_name']) ? $avatar['tmp_name'] : NULL; if($fileToMove){ $resultat = move_uploaded_file($fileToMove, $chemin.$id.".".$extensionUpload); }else{ $error[] = "<br> Erreur, aucun fichier à déplacer !"; } } if($resultat) { $updateavatar = update_avatar($chemin.$id.".".$extensionUpload , $id); } else { $error[] = "Erreur durant l'importation de votre photo de profil"; } } else { $error[] = "Votre photo de profil doit être au format jpg, jpeg, gif ou png"; } } else { $error[] = "Votre photo de profil ne doit pas dépasser 2Mo"; } } if(!empty($error)){ foreach($error as $err){ echo "<br>".$err; } }else{ // si pas d'erreur.. header("Location: profil2.php?id=$id"); } } else { echo " No id in SESSION ..."; } ?>
....
Quand je mets le :
Il y a une erreur de syntaxe !
Du coup le problème est encore là ! ça ne marche pas et ca n'affiche aucun numéro...
Merci, cordialement
FlorianJ29
Ini_set ('display-errors','on');
Cordialement,
FlorianJ29
Avec ce code :
...
Cordialement,
FlorianJ29
Tu n'as pas mis les try/catch au niveau de la requete...
Tu ne nous dis pas le comportement ou les messages d'erreur rencontrés. ..