Que donne un var_dump($donnees); ? Comme je l'ai la requête échoue d'une manière ou d'une autre, peut être l'utilisateur avec l'id $id n'existe pas.
Que donne un var_dump($donnees); ? Comme je l'ai la requête échoue d'une manière ou d'une autre, peut être l'utilisateur avec l'id $id n'existe pas.
Le bienfait n'est jamais perdu
En fait les id correspondent aux formulaire qui me renvoie tout ce qu'il y a dans la bdd, donc ceux-ci existent. J'ai une colonne avec à chaque fois un lien pour modifier l'exo. Quand je clique sur ce dernier il m'affiche un formulaire avec les champs remplis avec les données de l'id de l'exo. Et les erreurs retournées viennent de ces dernières, exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7<tr> <td>Auteur de l'exercice</td> <td> <input type="text" name="auteur" placeholder="" value="<?php echo $donnees->auteur; ?>"/> </td> </tr>
J'avoue que là je suis dubitatif.
Par contre je ne vois pas ou mettre le var_dump($donnees); ( et ne comprend pas vraiment ce dernier )
Le var_dump($donnees); va nous donner le contenu de la variable, il est à mettre juste après $donnees = $res->fetch(PDO::FETCH_OBJ);
Le bienfait n'est jamais perdu
Ok, il me donne ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 object(stdClass)[5] public 'id' => string '4' (length=1) public 'titre' => string 'oioiopl' (length=7) public 'auteur' => string 'azaz' (length=4) public 'date' => string '2017-09-03' (length=10)
Donc la requête n'échoue pas comme je le suspectais.
Je suppose que l'erreur survient quand vous validez le formulaire ?
Le bienfait n'est jamais perdu
La partie PHP peut être réécrite comme ça
Maintenant, modifiez le formulaire <form action="modifexo.php?id=<?php echo $id ?>" method="post">.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 include_once 'Bmanager.php'; $rep = new Connection('localhost', 'exo', 'utf8', 'root', ''); $answer = $rep->dbconnect(); $user = new Bmanager($answer); $id = isset($_GET['id']) ? intval($_GET['id']) : 0; $res = $user->getUserById($id); $donnees = $res->fetch(PDO::FETCH_OBJ); if (isset($_POST['modifier'])) { $titre = $_POST['titre']; $auteur = $_POST['auteur']; $date = $_POST['date']; $res = $user->update($id, $titre, $auteur, $date); if ($res) { header('Location: formulaire03.php'); } }
On peut avant d'afficher le formulaire, tester $donnees , pour éviter d'éventuelles erreurs si l'ID n'existe pas
Le bienfait n'est jamais perdu
Ce que j'aimerais avoir votre niveau en php, ça fonctionne à merveille.
Un énorme merci à vous.
Maintenant je vais aller faire un petit tour au lit avant de m'attaquer à la partie suppression de l'exo qui à mon avis est faite sur le même canevas.
Encore merci et bonne nuit à vous.
Pour le DELETE n'oubliez pas le WHERE sinon mauvaise surprise.. la classe BManager semble s'occuper des exercices et on a des addUser (qui doit être réécrite) , c'est un peu confus. Avec la variable $user , on a aussi l'impression qu'on gère des utilisateurs.
EDIT:
- Pourquoi travailler en ISO-88959, une contrainte ou c'est voulu ?
- Pensez à htmlspecialchars pour l'affichage de vos données, j'insiste qu'à l'affichage ( appel de echo )
Bonne nuit à vous aussi et à bientôt pour la suite.
Le bienfait n'est jamais perdu
Bonjour, juste une question après la lecture de cette discussion : à quoi va servir de convertir les données avec htmlspecialchars ? (la lecture de la doc (http://php.net/manual/fr/function.htmlspecialchars.php) ne me suffit pas pour comprendre...)
Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell
Si la discussion est résolue, merci de cliquer sur le bouton
Salut,
vous pouvez faire un test simple,
Qu'est-ce qui se passe quand j'exécute ce bout de code, le fond de ma page devient tout rouge. Imaginons que ça soit l'oeuvre d'un utilisateur et que j'ai stocké ce contenu dans ma base de données (le stockage en lui même n'est pas problématique on ne va pas appliquer htmlspecialchars avant mais quand on veut l'afficher), à chaque fois qu'un utilisateur visite ma page , il aura droit à ce fond rouge.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <?php $str = '<style>body {background-color: red}</style>'; echo $str;
Rien du tout, on a juste le même contenu de $str dans le navigateur. Plus d'infos sur https://fr.wikipedia.org/wiki/Cross-site_scripting , XSS stocké ou permanent.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <?php $str = '<style>body {background-color: red}</style>'; echo htmlspecialchars($str);
Suivant dans le contexte dans lequel on est, il faut savoir jouer avec les options ENT_QUOTE etc... et l'encodage pour avoir un résultat correct.
Le bienfait n'est jamais perdu
Hop, me revoilà
J'ai un peu changé pour la suppression d'un exo avec un petit formulaire demandant une confirmation ou non.
Ici mon petit souci c'est que les redirections de mes headers ne se font pas, c'est étrange.
En ce qui concerne l' ISO-88959 c'est pour la gestion des accents qui ne se fait pas en UTF-8, je ne sais pas si c'est le bon choix mais ça fonctionne, enfin pour la partie html. Par contre les entrées d'exos avec accent dans la base produisent des erreurs quand je soumet le formulaire.
Bref, voilà le code qui me pose des soucis de redirection :
Autre chose, j'aimerais qu'après l'envoi l'echo de validation se retrouve sur la page du premier formulaire. Ici, il n'y a pas de redirection mais l'exo est bien supprimé et l'echo le confirmant s'affiche sur cette page.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70 <?php include_once 'Bmanager.php'; $rep= new Connection('localhost', 'exo', 'utf8', 'root', ''); $answer=$rep->dbconnect(); $user=new Bmanager($answer); $id = isset($_GET['id']) ? $_GET['id'] : 0; $res=$user->getUserById($id); $donnees = $res->fetch(PDO::FETCH_OBJ); if(isset($_POST['oui'])){ $titre = $_POST['titre']; // $id = $_POST['titre']; $res=$user->delete($id); if ($res) { echo"<div class='couleur'>Suppression enregistrée avec succès </div>"; header('Location:formulaire03.php'); if(isset($_POST['non'])){ header('Location:formulaire03.php'); }} } ?> <!doctype> <html lang="fr"> <head> <link href="contact.css" type="text/css" rel="stylesheet"/> <meta charset=" ISO-8859-1" /> <head> <title>Confirmation</title> </head> <body> <!-- <form action="suppexo2.php" method="post"> --> <form action="suppexo2.php?id=<?php echo $id ?>" method="post"> <fieldset> <legend> <p>Confirmation de suppression</p> </legend> <table> <tr> <td>Titre de l'exercice</td> <td> <input type="text" name="titre" placeholder="" value="<?php echo $donnees->titre; ?> " /> </td> </tr> <tr><td> <input type="submit" value="Oui" name="oui"/></td> <td> <input type="submit" value="Non" name="non"/></td></tr> </table> </fieldset> </form> </body> </html>
Dernière chose, je n'ai eut aucune réponse sur le forum css concernant la mose en forme du php
UTF-8 gère bien les accents, ça dépend de comment vous avez géré la chose. Quel genre d'erreurs avec les entrées des accents ?
Pour la mise en forme, ça n'a rien à avoir avec PHP je ne sais pas quelle question vous avez posé.
A quoi ressemble le contenu de delete ?
On ne fait pas un echo avant un header, pas trop compris l'avant-dernier paragraphe.
PS: $id = isset($_GET['id']) ? $_GET['id'] : 0; par $id = isset($_GET['id']) ? intval($_GET['id']) : 0;
Le bienfait n'est jamais perdu
Mon souci c'est surtout que la redirection vers formulaire03.php ne se fait pas. Par contre les exos sont bien supprimés.
Mon delete est très simple et pour l'instant il fonctionne bien
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 public function delete($id){ $st=$this->db->prepare("DELETE FROM exercice WHERE id = ?"); $st->execute(array($id)); echo "Exercice supprimé avec Succés"; } }
On ne fait pas un echo avant un header
N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP
J'ai fait le changement mais toujours pas de redirection vers mon formulaire, je vais continuer à fouiller.
Il faut retirer echo du delete, et mettre return $st->rowCount();
Le bienfait n'est jamais perdu
J'avoue que je ne comprends pas trop la manip de devoir compter pour que la redirection se fasse mais ça fonctionne très bien, grand merci
A contrario le header du "non" ne redirige toujours pas vers le même formulaire que le bouton "oui" qui fonctionne à présent
Dernière chose, comment faire apparaître mes echos sur mon premier formulaire ?
Je m'explique :
J'ai un premier formulaire qui demande les titres auteurs et dates des exercices. A chaque exercice entré je n'ai pas l'echo de confirmation.
En ce qui concerne les formulaires d'ajout ou de suppression, je voudrais que les echos apparraissent sur le premier formulaire, celui où l'on entre les données.
Je ne sais pas si mon explication est vraiment claire
En gros je voudrais notifier à chaque fois que l'exercice est bien enregistré, supprimé ou modifié.
Pour comprendre, faut lire la doc sinon effectivement vous risquez d'être perdu. C'est bien de copier les codes mais les comprendre c'est encore mieux.
Pour les messages, il y a plusieurs possibilités, faites une recherche sur les messages flash avec les sessions en PHP vous aurez une piste.
Le bienfait n'est jamais perdu
Ben, je fais pas mal de recherches sur le web et j'avoue que je vais lire la doc mais que je ne la comprends pas forcèment.
Merci pour la piste sur les messages flash avec les sessions.
En gros il faut que je trouve le moyen de mettre des
pour que mes echos aboutissent. J'espère ne pas dire une grosse bêtise, si oui, veuillez m'en excuser.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 $_SESSION['message']='message; // puis echo $_Session['message'];
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager