Problème code php !
Fermé
FlorianJ29
Messages postés
68
Date d'inscription
dimanche 22 janvier 2017
Statut
Membre
Dernière intervention
28 février 2019
-
30 janv. 2017 à 13:24
jordane45 Messages postés 38459 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 3 avril 2025 - 31 janv. 2017 à 20:07
jordane45 Messages postés 38459 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 3 avril 2025 - 31 janv. 2017 à 20:07
A voir également:
- Problème code php !
- Code puk bloqué - Guide
- Code asci - Guide
- Code telephone oublié - Guide
- Code activation windows 10 - Guide
- Code gta 4 ps4 - Guide
2 réponses
jordane45
Messages postés
38459
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
3 avril 2025
4 740
Modifié par jordane45 le 30/01/2017 à 19:21
Modifié par jordane45 le 30/01/2017 à 19:21
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
jordane45
Messages postés
38459
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
3 avril 2025
4 740
31 janv. 2017 à 00:39
31 janv. 2017 à 00:39
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 ..."; } ?>
FlorianJ29
Messages postés
68
Date d'inscription
dimanche 22 janvier 2017
Statut
Membre
Dernière intervention
28 février 2019
15
31 janv. 2017 à 13:51
31 janv. 2017 à 13:51
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
jordane45
Messages postés
38459
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
3 avril 2025
4 740
>
FlorianJ29
Messages postés
68
Date d'inscription
dimanche 22 janvier 2017
Statut
Membre
Dernière intervention
28 février 2019
31 janv. 2017 à 20:07
31 janv. 2017 à 20:07
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 ..."; } ?>
30 janv. 2017 à 18:38
....
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
30 janv. 2017 à 19:22
Ini_set ('display-errors','on');
30 janv. 2017 à 19:45
Cordialement,
FlorianJ29
30 janv. 2017 à 20:04
Avec ce code :
...
Cordialement,
FlorianJ29
30 janv. 2017 à 20:45
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. ..