Requete update ne s'execute pas
Dix
-
Dix -
Dix -
Salut Les gars j'ai besoin de votre aide, je travaille sur une application, je n'arrive pas a modifier les informaions du profil des eleves dans la liste. ça ne m'envoie aucune erreur pourtant rien ne se passe dans la table. Voila mon code
<?php error_reporting(E_ALL ^ E_NOTICE); // Initialize the session session_start(); // Check if the user is logged in, if not then redirect him to login page if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){ header("location: login.php"); exit; } $servname = "localhost"; $dbname = "biblio"; $user = "root"; $pass = ""; try{ $connexion = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass); $connexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Récupèration de l'id passer en argument dans l'URL $id_eleve = (int) htmlentities(trim($_GET['id_eleve'])); if(!is_int($id_eleve) || $id_eleve == 0 || $id_eleve == $_SESSION['id_eleve']){ header('location: lister-eleves.php'); exit; } //On récupère les informations de l'utilisateur grâce à son ID $lister = $connexion->query("SELECT * FROM eleves WHERE id_eleve = $id_eleve"); $executeIsOk = $lister-> execute(); $eleves = $lister->fetch(); if (isset($_GET['modifier']) & !empty($_GET['modifier'])){ $nom = $_GET["nom"]; $prenom = $_GET["prenom"]; $date_nais = $_GET["date_nais"]; $addresse = $_GET["addresse"]; $classe = $_GET["classe"]; $telephone = $_GET["telephone"]; $groupe = $_GET["groupe"]; $modifier = $connexion -> query("UPDATE eleves SET nom='$nom', prenom='$prenom', date_nais='$date_nais', addresse='$addresse', classe='$classe', telephone='$telephone', groupe='$groupe' WHERE id_eleve=$id_eleve"); $eleves = $modifier -> execute(); if ($eleves) { header("location: lister-eleves.php"); }else{ $erreur = "la mise à jour a échoué."; } } }catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); } ?>
A voir également:
- Requete update ne s'execute pas
- Windows update bloqué - Guide
- Winget update - Guide
- Asus live update - Télécharger - Utilitaires
- Wsus offline update - Télécharger - Systèmes d'exploitation
- Nettoyage windows update - Guide
5 réponses
Bonjour,
Alors, déjà, mets le code de connexion dans un bloc try/catch pour lui tout seul...
Ensuite, place le code de ta requête, lui aussi dans un bloc try/catch rien que pour lui..
Et puis.. soit tu utilises query .. soit execute .. ( avec une très très forte préférence pour le exécute.
Il serait bien aussi d'utiliser les requêtes préparées correctement...
exemple:
Et enfin, pour pouvoir voir les éventuelles erreurs, tu dois désactiver les redirections.
Alors, déjà, mets le code de connexion dans un bloc try/catch pour lui tout seul...
Ensuite, place le code de ta requête, lui aussi dans un bloc try/catch rien que pour lui..
Et puis.. soit tu utilises query .. soit execute .. ( avec une très très forte préférence pour le exécute.
Il serait bien aussi d'utiliser les requêtes préparées correctement...
exemple:
//préparation de la requête et des variables $sql = "INSERT INTO matable (champ1,champ2) VALUES (:valeur1,:autrevaleur)"; $datas = array(':valeur1'=>$valeur1, ':autrevaleur'=>$toto); //Execution de la requete try{ $requete = $bdd -> prepare($sql) ; $requete->execute($datas) ; }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); }
Et enfin, pour pouvoir voir les éventuelles erreurs, tu dois désactiver les redirections.
Merci enormement Jordane45, j'ai fait comme vous venez de me l'indiquer mais malheureusement rien ne se passe:
$servname = "localhost"; $dbname = "biblio"; $user = "root"; $pass = ""; try{ $connexion = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass); $connexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); }catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); } // Récupèration de l'id passer en argument dans l'URL $id_eleve = (int) htmlentities(trim($_GET['id_eleve'])); /*if(!is_int($id_eleve) || $id_eleve == 0 || $id_eleve == $_SESSION['id_eleve']){ header('location: lister-eleves.php'); exit; } */ //On récupère les informations de l'utilisateur grâce à son ID $lister = $connexion->query("SELECT * FROM eleves WHERE id_eleve = $id_eleve"); $executeIsOk = $lister-> execute(); $eleves = $lister->fetch(); if (isset($_GET['modifier']) & !empty($_GET['modifier'])){ $nom = $_GET["nom"]; $prenom = $_GET["prenom"]; $date_nais = $_GET["date_nais"]; $addresse = $_GET["addresse"]; $classe = $_GET["classe"]; $telephone = $_GET["telephone"]; $groupe = $_GET["groupe"]; try{ $modifier = $connexion -> query("UPDATE eleves SET nom='$nom', prenom='$prenom', date_nais='$date_nais', addresse='$addresse', classe='$classe', telephone='$telephone', groupe='$groupe' WHERE id_eleve=$id_eleve"); $eleves = $modifier -> execute(); }catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); } }
J'ai fait exactement comme indiqué. Pour la requete SELECT tout va bien car les informations du profil s'affichent dans le formulaire, le veritable probleme reside dans la requete UPDATE, les informations modifiees sont affichées dans l'url pourtant rien ne se passe dans la table, la requete n'est pas executée.
$servname = "localhost"; $dbname = "biblio"; $user = "root"; $pass = ""; try{ $connexion = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass); $connexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); }catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); } // Récupèration de l'id passer en argument dans l'URL $id_eleve = (int) htmlentities(trim($_GET['id_eleve'])); /*if(!is_int($id_eleve) || $id_eleve == 0 || $id_eleve == $_SESSION['id_eleve']){ header('location: lister-eleves.php'); exit; } */ //On récupère les informations de l'utilisateur grâce à son ID try{ $lister = $connexion->prepare("SELECT * FROM eleves WHERE id_eleve = $id_eleve"); $datas = array($id_eleve); $executeIsOk = $lister-> execute($datas); $eleves = $lister->fetch(); }catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); } if (isset($_GET['modifier']) & !empty($_GET['modifier'])){ $nom = $_GET["nom"]; $prenom = $_GET["prenom"]; $date_nais = $_GET["date_nais"]; $addresse = $_GET["addresse"]; $classe = $_GET["classe"]; $telephone = $_GET["telephone"]; $groupe = $_GET["groupe"]; try{ $modifier = $connexion -> prepare("UPDATE eleves SET nom='$nom', prenom='$prenom', date_nais='$date_nais', addresse='$addresse', classe='$classe', telephone='$telephone', groupe='$groupe' WHERE id_eleve=$id_eleve"); $datas = array($nom, $prenom, $date_nais, $addresse, $classe, $telephone, $groupe); $modifier -> execute($datas); }catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); print_r($datas); } }
Oulalala... ce n'est pas vraiment ce que je t'ai donné comme exemple...
Bon.. gagnons un peu de temps...
Voici à quoi pourrait ressembler un code "propre".
(je l'ai découpé en "petites" fonctions ( que tu pourras réutiliser ailleurs dans tes pages...)
En gros
PS: Pour faire de l'update ou de l'insert, je t'invite plutôt à utiliser un formulaire en $_POST plutôt que d'envoyer les variables dans l'URL. Tu auras moins de soucis.
Bon.. gagnons un peu de temps...
Voici à quoi pourrait ressembler un code "propre".
(je l'ai découpé en "petites" fonctions ( que tu pourras réutiliser ailleurs dans tes pages...)
En gros
<?php //démarrage session session_start(); //affichage des erreurs PHP dans la page pour être sûr de ne rien laisser trainer... error_reporting(E_ALL); ini_set('display_errors', true); ini_set('display_startup_errors', true); function getCnx(){ $servname = "localhost"; $dbname = "biblio"; $user = "root"; $pass = ""; try{ $connexion = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass); $connexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); return $connexion; }catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); } } //connexion à la bdd : $connexion = getCnx(); /** * Code permettant d'éxecuter une requête préparée */ function dbQuery($sql,$datas){ global $connexion; //on se connecte à la bdd try{ $prep = $connexion->prepare($sql); return $prep->execute($datas); }catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); } } //permet de faire une requête SELECT et de retourner le premier jeu de résultat function db_One($sql,$datas=NULL){ $res = dbQuery($sql,$datas); return $res->fetch(); } //permet de faire une requête SELECT et de retourner tous les résultats function db_All($sql,$datas=NULL){ $res = dbQuery($sql,$datas); return $res->fetchAll(); } /** A utiliser pour les UPDATE ou les DELETE */ function db_Exec($sql,$datas=NULL){ $res = dbQuery($sql,$datas); return $res; } function getEleveById($id_eleve){ $sql = "SELECT * FROM eleves WHERE id_eleve = :id_eleve"; $datas = [':id_eleve'=>$id_eleve]; return db_One($sql,$datas); } function updateEleve($id_eleve,$nom,$prenom,$date_nais,$addresse,$classe,$telephone="",$groupe=""){ $sql = "UPDATE eleves SET nom=:nom, prenom=:prenom, date_nais=:date_nais, addresse=:addresse, classe=:classe, telephone=:telephone, groupe=:groupe WHERE id_eleve= :id_eleve"; $datas = [':nom'=>$nom, ':prenom'=>$prenom, ':date_nais'=>$date_nais, ':addresse'=>$addresse, ':classe'=>$classe, ':telephone'=>$telephone, ':groupe'=>$groupe, ':id_eleve'=>$id_eleve]; return db_Exec($sql,$datas); } // Récupèration de l'id passer en argument dans l'URL $id_eleve = !empty($_GET['id_eleve']) ? intval(trim($_GET['id_eleve'])) : NULL; if(!is_int($id_eleve)){ header('location: lister-eleves.php'); exit; } //On récupère les informations de l'utilisateur grâce à son ID $eleves = getEleveById($id_eleve); if (!empty($_GET['modifier'])){ $nom = !empty($_GET["nom"]) ? trim($_GET["nom"]) : ""; $prenom = !empty($_GET["prenom"]) ? trim($_GET["prenom"]) : ""; $date_nais = !empty($_GET["date_nais"]) ? trim($_GET["date_nais"]) : ""; // Attention.. doit être au format YYYY-MM-DD $addresse = !empty($_GET["addresse"]) ? trim($_GET["addresse"]) : ""; $classe = !empty($_GET["classe"]) ? trim($_GET["classe"]) : ""; $telephone = !empty($_GET["telephone"]) ? trim($_GET["telephone"]) : ""; $groupe = !empty($_GET["groupe"]) ? trim($_GET["groupe"]) : ""; $update = updateEleve($id_eleve,$nom,$prenom,$date_nais,$addresse,$classe,$telephone,$groupe); var_dump($update); //juste le temps des tests } else { echo "Le champ modifier n'est pas envoyé dans ton url...."; var_dump($_GET); exit; }
PS: Pour faire de l'update ou de l'insert, je t'invite plutôt à utiliser un formulaire en $_POST plutôt que d'envoyer les variables dans l'URL. Tu auras moins de soucis.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question