Après de longues heures de recherches je n'ai toujours pas trouvé de réponse à mon soucis.
J'explique mon problème :
J'ai une base de donnée dont 1 table "evenement" contient 4éléments : id_evenement, nom, description, id_utilisateur.
Je souhaiterai modifier un evenement via une requête SQL voici mon code :
J'ai évidemment testé (afficher) mon $evenement['id_evenement'] et il me retourne bien l'id de mon évènement. Si dans mon UPDATE à la place de $evenement['id_evenement'] je mets directement l'idée de mon evenement en brut (exemple : 5) ma requete s'effectue et ce n'est donc pas un problème de requete SQL. De plus j'ai une variable de session qui récupère mon id_utilisateur (ici $_SESSION['id_utilisateur'] = 10) si a la place de $evenement['id_evenement'] je mets $_SESSION['id_utilisateur'] je modifie bien l'evenement ou l'ID est 10 dans ma base de donnée.
C'est donc de toute evidence un probleme avec mon $evenement['id_evenement'] seulement comme vous le voyez dans mon code HTML j'effectue un echo $evenement['id_evenement'] et j'obtient bien l'id de mon evenement ...
Je vous mets le code ici :
session_start(); $pdo = new PDO('mysql:host=localhost;dbname=PPE', 'root', 'root'); $evenement = $pdo->prepare('SELECT * FROM evenement where id_evenement=?'); $evenement->execute(array($_POST['modifchamp'])); $evenement=$evenement->fetch(); if (isset($_SESSION['id_utilisateur'])) { $reqevenement= $pdo->prepare('SELECT * FROM evenement WHERE id_utilisateur=?'); $reqevenement -> execute(array($_SESSION['id_utilisateur'])); $reqevenement = $reqevenement->fetch(); /* $id=intval($_POST['modifchamp'], 10);*/ if(isset($_POST['modif'])){ if(isset($evenement['id_description'])){ $supprimestatut = $pdo->prepare('DELETE FROM evenement WHERE id_evenement=?'); $supprimestatut->execute(array($_POST['id_evenement'])); header('location:evenement.php'); } } }
CODE HTML :
<form method="POST" action="">
<div class="titre_evenement"> <input id="newtitre" type="text" class="validate" name="newtitre" value="<?php echo $evenement['nom'], $_SESSION['id_utilisateur']?>"> <label for="nom">Titre de ton évènement</label> </div>
<div class="text_evenement"> <input id="newdescription" type="text" class="validate" name="newdescription" value="<?php echo $evenement['description']?>"> <label for="nom">Description de ton évènement</label> </div>
[…]comme vous le voyez dans mon code HTML j'effectue un echo $evenement['id_evenement'] et j'obtient bien l'id de mon evenement ...
Non, je ne le vois pas. Soit tu as trop bien nettoyé ton code HTML pour le mettre ici, soit tu n'affiches pas ce que tu penses (ce n'est même pas présent dans le code HTML fourni), soit tu ne parles pas de la bonne valeur/du bon index/de la bonne chose
Si jamais, ce serait vraiment top que tu modifies ton message pour fournir ton code à l'aide de l'outil de ce forum. A défaut de fonctionner super bien, ça garde l'indentation (c'est prévu pour).
Dans le html mon test se fait au niveau de la value du titre et de la description ou j'affiche bien la description et le titre deja présent dans la base de donnée et de même pour l'id_evenement
- Edité par GuillaumeCanavaté 22 mars 2019 à 14:05:45
Autant pour moi, je pense que c'est un pb sur une erreur que tu n'affiche pas => voir erreur php + exception PDO
- Edité par christouphe il y a 13 minutes
En mettant try {...}... catch(exception...) ???
De plus le code que j'ai link ne marche pas car j'ai un if(isset($evenement['id_description'])) qui bloque le lancement (c'est pour ça que je sais que le problème vient de mon $evenement ['id_description']...) cependant comme expliqué il s'affiche correctement dans le champs la ou je l'appel avec value='...'
Non, ces mots-clés n'activent pas les erreurs, mais permettent de les gérer s'il y en a qui surviennent — et encore, sous certaines formes. Va regarder la FAQ (lien dans ma signature) dans la partie qui explique comment activer l'affichage des messages d'erreur pour voir comment ça se fait.
Non, ces mots-clés n'activent pas les erreurs, mais permettent de les gérer s'il y en a qui surviennent — et encore, sous certaines formes. Va regarder la FAQ (lien dans ma signature) dans la partie qui explique comment activer l'affichage des messages d'erreur pour voir comment ça se fait.
- Edité par Ymox il y a 4 minutes
Bonjour,
Merci de ton aide, je vais regardé ta FAQ, seulement je n'ai aucune erreur php dans mon code. C'est simplement l'exploitation dans une requête de mon $evenement qui ne fonctionne pas.
$pdo = new PDO('mysql:host=localhost;dbname=PPE', 'root', 'root', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
En suivant ta signature j'ai rajouté cela, sauf que je n'ai aucune erreur sql dans mon code.. mais une erreur que je n'arrive pas reellement exploiter qui vient surement de ma variable $evenement....
Si tu avais bien lu, tu aurais su qu'il n'y a pas que ça à ajouter/modifier/vérifier pour que les erreurs de PDO s'affichent. Je te laisse donc aller relire plus attentivement.
Si tu avais bien lu, tu aurais su qu'il n'y a pas que ça à ajouter/modifier/vérifier pour que les erreurs de PDO s'affichent. Je te laisse donc aller relire plus attentivement.
J'ai effectivement rajouté ces requêtes et ai pu m'appercevoir des mes erreurs php (est-ce ça que tu attendais?) mais aucune ne correspond a mon problème ! J'ai juste obtenu en notice qu'une session était deja active.. J'ai aussi pu echo mes variables et j'obtient bien l'ID_evenement. Il ne se transmet juste pas dans à travers ma requete.
En même temps, pourquoi récupérer l'ID en base de données à partir de ce même ID ? Parce que tu fais SELECT * FROM 'SELECT * FROM evenement where id_evenement=?, tu passes $_POST['modifchamp']comme paramètre. Mais si j'en crois la requête, $_POST['modifchamp'] doit déjà être cet ID que tu souhaites récupérer avec la requête… Me trompé-je ?
En même temps, pourquoi récupérer l'ID en base de données à partir de ce même ID ? Parce que tu fais SELECT * FROM 'SELECT * FROM evenement where id_evenement=?, tu passes $_POST['modifchamp']comme paramètre. Mais si j'en crois la requête, $_POST['modifchamp'] doit déjà être cet ID que tu souhaites récupérer avec la requête… Me trompé-je ?
Exact, $_POST['modifchamp'] est l'id_evenement en question qui vient d'une autre page. Quand je echo echo $_POST['modifchamp'];
j'obtient bien mon id_evenement (le chiffre). Cependant dans la requete cela ne marche pas si à la place du $evenement['id_evenement'] je mets le $_POST['modifchamp'] c'est pour cela que j'ai tenté de la re récuperer a travers cette requete
Ton code où il y a les requêtes SQL, tu nous l'as fourni au complet, ou tu as nettoyé (et probablement les trucs qui posent problème, dans ce cas) ? Parce qu'avec ce que tu nous as donné, il n'y a pas de raison pour que $_POST['modifchamp'] soit remis à 0 si tu nous certifies que la requête de récupération de l'événement retourne bien les données.
oui je vous ai transmis le code exacte que j’execute...Oui si j’echo le $_Post[‘modifchamp’] il me retourne bien mon id... mais dans la requête il ne le prend pas en considération
Le titre est un élément important qui ne doit pas être négligé. N'oubliez pas cette règle simple : le titre idéal résume la question que vous allez poser en une petite phrase. Il doit permettre aux visiteurs de se repérer facilement dans le forum visité et d'identifier le sujet à sa seule lecture.
Vous pouvez utiliser divers préfixes comme [Erreur], [MySQL], [Compatibilité], etc... Aussi, pensez à consulter les règles propres à chaque forum (visibles dans les topics épinglés en haut des sections).
De plus, choisir un bon titre permet de rendre plus faciles les recherches des autres membres.
Les titres de type "besoin d'aide" ou "problème" ne sont pas tolérés.
Pour modifier votre titre, éditez le premier message de votre sujet.
(titre originel : Update PHP)
Pas d'aide concernant le code par MP, le forum est là pour ça :)
Malgré les réponses qui arriveront, prends en compte le message de modération ci-dessus.
Il y a deux informations contradictoires dans ce que tu nous dis, à mon sens :
$_POST['modifchamp'] contient bien l'ID que tu souhaites utiliser pour ta requête de mise à jour ;
si tu utilises une autre valeur dans execute(), ça passe, mais $_POST['modifchamp'] non.
Soit $_POST['modifchamp'] ne contient pas ce que tu souhaites, soit il y a quelque chose qui en change la valeur à un moment ou un autre. Histoire d'éliminer la seconde possibilité et de donner une piste pour la première, fais var_dump($_POST['modifchamp'])avant et après l'appel à execute(), et copies-colles-nous ce que ça affiche les deux fois séparément.
Effectivement, excusez moi pour le titre. Je vais modifier ça.
Ymox a écrit:
Malgré les réponses qui arriveront, prends en compte le message de modération ci-dessus.
Il y a deux informations contradictoires dans ce que tu nous dis, à mon sens :
$_POST['modifchamp'] contient bien l'ID que tu souhaites utiliser pour ta requête de mise à jour ;
si tu utilises une autre valeur dans execute(), ça passe, mais $_POST['modifchamp'] non.
Soit $_POST['modifchamp'] ne contient pas ce que tu souhaites, soit il y a quelque chose qui en change la valeur à un moment ou un autre. Histoire d'éliminer la seconde possibilité et de donner une piste pour la première, fais var_dump($_POST['modifchamp'])avant et après l'appel à execute(), et copies-colles-nous ce que ça affiche les deux fois séparément.
Oui $_POST['modifchamp'] contient bien l'ID je l'ai testé avec le echo avant et après toutes mes requêtes sauf que si je le donne en parametre à ma requete sql (update) elle ne s'execute pas.
De même avec n'importe quel variable cela ne s'execute pas ormi avec mon $_SESSION['id_utilisateur'] (qui ne correspond pas a l'id_Evenement mais renvoi un numero quand meme) ou bien une valeur rentré en brut (31 par exemple). J'ai donc tenté de re récuperer mon id_evenement en faisant une requete mais je suis d'accord que de base c'est inutile.
J'ai effectué mon vardump et j'obtient string(2) "47" string(2) "47"
Enfin je saute beaucoup de ligne pour aérer mon code et pouvoir atteindre une partie plus aisément que si j'ai 80 lignes collées
- Edité par GuillaumeCanavaté 23 mars 2019 à 16:04:31
J'ai effectué mon vardump et j'obtient string(2) "47" string(2) "47"
Et c'est bien l'ID que tu souhaites ? Si oui et qu'on s'est bien compris, on a la confirmation que l'ID dans $_POST[modifchamp'] est toujours disponible avant et après l'exécution de la requête. Parmi les possibilités qui restent :
il y a une erreur qui ne s'affiche pas. Déplace ini_set('display_errors', 1); ini_set('error_reporting', E_ALL);en tout début de script PHP, à tout hasard ;
tu ne regardes pas toujours dans la bonne base de données mais les valeurs sont bien mises à jour ;
En même temps, pourquoi récupérer l'ID en base de données à partir de ce même ID ? Parce que tu fais SELECT * FROM 'SELECT * FROM evenement where id_evenement=?, tu passes $_POST['modifchamp']comme paramètre. Mais si j'en crois la requête, $_POST['modifchamp'] doit déjà être cet ID que tu souhaites récupérer avec la requête… Me trompé-je ?
Rebonjour,
Du coup j'ai testé et une fois je valide j'obtiens :
Notice: Undefined index: modifchamp in /Applications/MAMP/htdocs/PPE_/php/evenement/modification.php on line 11
Notice: Undefined index: modifchamp in /Applications/MAMP/htdocs/PPE_/php/evenement/modification.php on line 31
Notice: Undefined index: modifchamp in /Applications/MAMP/htdocs/PPE_/php/evenement/modification.php on line 35
Seulement je pense que la variable se perd une fois que j'ai validé non ? Car dans tous les cas je suis censé avoir recuperé l'ID_evenement dans ma variable $evenement...
Et je suis bien daccord que le probleme est très bizarre....
MamekhaNiang1 a écrit:
Salut, tu t'es trompé à la ligne 29
C'est $evenement['id_evenement'] au lieu de $evenement['id_description']
Salut, Effectivement mais ce n'est pas ça qui fait beuguer mon code j'ai tenté de passé par la description pour UPDATE ma bdd mais ça n'avais pas marché! Merci quand meme
Si je comprend $_POST['modifchamp'] et tes autres variables ($_POST['newtitre'], $_POST['newdescription]') ne viennent pas du même formulaire parce que je ne voie pas de champ nommé modifchamp dans ce formulaire, et d'après tout ce que tu as dit, c'est normale que tu puisse l'afficher et d'executer la première requête avec quand tu viens de l'autre formulaire mais quand tu soumets ton formulaire de modification c'est seulement les champs de ce formulaire que tu recevras.
Donc si he ne me trompe pas tu devras passer modifchamp dans l'attribut method de ton formulaire et le récupérer dans $_GET['modifchamp '] à la place de $_POST['modifchamp ']
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Activer les erreurs PDO / (julp) htmlspecialchars / FAQ PHP / Pas d'aide par MP
L'erreur dans un code se situe très souvent entre le clavier et la chaise. =D
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
Pas d'aide concernant le code par MP, le forum est là pour ça :)
My website : Mon serveur discord, Se demerder tout seul, Faille XSS et SQL
My website : Mon serveur discord, Se demerder tout seul, Faille XSS et SQL