bonjour, j'ai fais la page nouveau topic
je me suis bien connecter, mais quand je poste un message, il me dit
ou soit il me dit : veuillez se connecter pour accéder à cette pageFatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 1364 Field 'topic_last_post' doesn't have a default value in /var/www/legtux.org/users/site/www/V1/forum-tester/postok.php:47 Stack trace: #0 /var/www/legtux.org/users/site/www/V1/forum-tester/postok.php(47): PDOStatement->execute() #1 {main} thrown in /var/www/legtux.org/users/site/www/V1/forum-tester/postok.php on line 47
je penses que c'est un souci de sécurité pour temps j'ai bien mis
Code php : Sélectionner tout - Visualiser dans une fenêtre à part if ($id==0) erreur(ERR_IS_CO);
je vous re donne mes 2 pages
poste.php
Code php : 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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189 <?php session_start(); $titre="Poster"; $balises = true; include("includes/identifiants.php"); include("includes/debut.php"); include("includes/menu.php"); //Qu'est ce qu'on veut faire ? poster, répondre ou éditer ? $action = (isset($_GET['action']))?htmlspecialchars($_GET['action']):''; //Il faut être connecté pour poster ! if ($id==0) erreur(ERR_IS_CO); //Si on veut poster un nouveau topic, la variable f se trouve dans l'url, //On récupère certaines valeurs if (isset($_GET['f'])) { $forum = (int) $_GET['f']; $query= $db->prepare('SELECT forum_name, auth_view, auth_post, auth_topic, auth_annonce, auth_modo FROM forum_forum WHERE forum_id =:forum'); $query->bindValue(':forum',$forum,PDO::PARAM_INT); $query->execute(); $data=$query->fetch(); echo '<p><i>Vous êtes ici</i> : <a href="./index.php">Index du forum</a> --> <a href="./voirforum.php?f='.$forum.'">'.stripslashes(htmlspecialchars($data['forum_name'])).'</a> --> Nouveau topic</p>'; } //Sinon c'est un nouveau message, on a la variable t et //On récupère f grâce à une requête elseif (isset($_GET['t'])) { $topic = (int) $_GET['t']; $query=$db->prepare('SELECT topic_titre, forum_topic.forum_id, forum_name, auth_view, auth_post, auth_topic, auth_annonce, auth_modo FROM forum_topic LEFT JOIN forum_forum ON forum_forum.forum_id = forum_topic.forum_id WHERE topic_id =:topic'); $query->bindValue(':topic',$topic,PDO::PARAM_INT); $query->execute(); $data=$query->fetch(); $forum = $data['forum_id']; echo '<p><i>Vous êtes ici</i> : <a href="./index.php">Index du forum</a> --> <a href="./voirforum.php?f='.$forum.'">'.stripslashes(htmlspecialchars($data['forum_name'])).'</a> --> <a href="./voirtopic.php?t='.$topic.'">'.stripslashes(htmlspecialchars($data['topic_titre'])).'</a> --> Répondre</p>'; } //Enfin sinon c'est au sujet de la modération(on verra plus tard en détail) //On ne connait que le post, il faut chercher le reste elseif (isset ($_GET['p'])) { $post = (int) $_GET['p']; $query=$db->prepare('SELECT post_createur, forum_post.topic_id, topic_titre, forum_topic.forum_id, forum_name, auth_view, auth_post, auth_topic, auth_annonce, auth_modo FROM forum_post LEFT JOIN forum_topic ON forum_topic.topic_id = forum_post.topic_id LEFT JOIN forum_forum ON forum_forum.forum_id = forum_topic.forum_id WHERE forum_post.post_id =:post'); $query->bindValue(':post',$post,PDO::PARAM_INT); $query->execute(); $data=$query->fetch(); $topic = $data['topic_id']; $forum = $data['forum_id']; echo '<p><i>Vous êtes ici</i> : <a href="./index.php">Index du forum</a> --> <a href="./voirforum.php?f='.$data['forum_id'].'">'.stripslashes(htmlspecialchars($data['forum_name'])).'</a> --> <a href="./voirtopic.php?t='.$topic.'">'.stripslashes(htmlspecialchars($data['topic_titre'])).'</a> --> Modérer un message</p>'; } $query->CloseCursor(); switch($action) { case "repondre": //Premier cas : on souhaite répondre //Ici, on affiche le formulaire de réponse ?> <h1>Poster une réponse</h1> <form method="post" action="postok.php?action=repondre&t=<?php echo $topic ?>" name="formulaire"> <fieldset><legend>Mise en forme</legend> <input type="button" id="gras" name="gras" value="Gras" onClick="javascript:bbcode('[g]', '[/g]');return(false)" /> <input type="button" id="italic" name="italic" value="Italic" onClick="javascript:bbcode('', '');return(false)" /> <input type="button" id="souligné" name="souligné" value="Souligné" onClick="javascript:bbcode('', '');return(false)" /> <input type="button" id="lien" name="lien" value="Lien" onClick="javascript:bbcode('', '');return(false)" /> <br /><br /> <img src="./images/smileys/heureux.gif" title="heureux" alt="heureux" onClick="javascript:smilies(' :D ');return(false)" /> <img src="./images/smileys/lol.gif" title="lol" alt="lol" onClick="javascript:smilies(' :lol: ');return(false)" /> <img src="./images/smileys/triste.gif" title="triste" alt="triste" onClick="javascript:smilies(' :triste: ');return(false)" /> <img src="./images/smileys/cool.gif" title="cool" alt="cool" onClick="javascript:smilies(' :frime: ');return(false)" /> <img src="./images/smileys/rire.gif" title="rire" alt="rire" onClick="javascript:smilies(' XD ');return(false)" /> <img src="./images/smileys/confus.gif" title="confus" alt="confus" onClick="javascript:smilies(' :s ');return(false)" /> <img src="./images/smileys/choc.gif" title="choc" alt="choc" onClick="javascript:smilies(' :o ');return(false)" /> <img src="./images/smileys/question.gif" title="?" alt="?" onClick="javascript:smilies(' :interrogation: ');return(false)" /> <img src="./images/smileys/exclamation.gif" title="!" alt="!" onClick="javascript:smilies(' :exclamation: ');return(false)" /> </fieldset> <fieldset><legend>Message</legend><textarea cols="80" rows="8" id="message" name="message"></textarea></fieldset> <input type="submit" name="submit" value="Envoyer" /> <input type="reset" name = "Effacer" value = "Effacer"/> </p></form> <?php break; case "nouveautopic": ?> <h1>Nouveau topic</h1> <form method="post" action="postok.php?action=nouveautopic&f=<?php echo $forum ?>" name="formulaire"> <fieldset><legend>Titre</legend> <input type="text" size="80" id="titre" name="titre" /></fieldset> <fieldset><legend>Mise en forme</legend> <input type="button" id="gras" name="gras" value="Gras" onClick="javascript:bbcode('[g]', '[/g]');return(false)" /> <input type="button" id="italic" name="italic" value="Italic" onClick="javascript:bbcode('', '');return(false)" /> <input type="button" id="souligné" name="souligné" value="Souligné" onClick="javascript:bbcode('', '');return(false)" /> <input type="button" id="lien" name="lien" value="Lien" onClick="javascript:bbcode('', '');return(false)" /> <br /><br /> <img src="./images/smileys/heureux.gif" title="heureux" alt="heureux" onClick="javascript:smilies(':D');return(false)" /> <img src="./images/smileys/lol.gif" title="lol" alt="lol" onClick="javascript:smilies(':lol:');return(false)" /> <img src="./images/smileys/triste.gif" title="triste" alt="triste" onClick="javascript:smilies(':triste:');return(false)" /> <img src="./images/smileys/cool.gif" title="cool" alt="cool" onClick="javascript:smilies(':frime:');return(false)" /> <img src="./images/smileys/rire.gif" title="rire" alt="rire" onClick="javascript:smilies('XD');return(false)" /> <img src="./images/smileys/confus.gif" title="confus" alt="confus" onClick="javascript:smilies(':s');return(false)" /> <img src="./images/smileys/choc.gif" title="choc" alt="choc" onClick="javascript:smilies(':O');return(false)" /> <img src="./images/smileys/question.gif" title="?" alt="?" onClick="javascript:smilies(':interrogation:');return(false)" /> <img src="./images/smileys/exclamation.gif" title="!" alt="!" onClick="javascript:smilies(':exclamation:');return(false)" /></fieldset> <fieldset><legend>Message</legend> <textarea cols="80" rows="8" id="message" name="message"></textarea> <label><input type="radio" name="mess" value="Annonce" />Annonce</label> <label><input type="radio" name="mess" value="Message" checked="checked" />Topic</label> </fieldset> <p> <input type="submit" name="submit" value="Envoyer" /> <input type="reset" name = "Effacer" value = "Effacer" /></p> </form> <?php break; case "editertopic": //toisième cas : on souhaite iditée un nouveau topic //Ici, on affiche le formulaire de nouveau topic break; //D'autres cas viendront s'ajouter là plus tard :p default: //Si jamais c'est aucun de ceux-là, c'est qu'il y a eu un problème :o echo'<h2>Cette action est impossible</h2>'; } //Fin du switch ?>
postok
Code php : 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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178 <?php session_start(); $titre="Poster"; include("includes/identifiants.php"); include("includes/debut.php"); include("includes/menu.php"); //On récupère la valeur de la variable action $action = (isset($_GET['action']))?htmlspecialchars($_GET['action']):''; // Si le membre n'est pas connecté, il est arrivé ici par erreur if ($id==0) erreur(ERR_IS_CO); switch($action) { //Premier cas : nouveau topic case "nouveautopic": //On passe le message dans une série de fonction $message = $_POST['message']; $mess = $_POST['mess']; //Pareil pour le titre $titre = $_POST['titre']; //ici seulement, maintenant qu'on est sur qu'elle existe, on récupère la valeur de la variable f $forum = (int) $_GET['f']; $temps = time(); if (empty($message) || empty($titre)) { echo'<p>Votre message ou votre titre est vide, cliquez <a href="./poster.php?action=nouveautopic&f='.$forum.'">ici</a> pour recommencer</p>'; } else //Si jamais le message n'est pas vide { //On entre le topic dans la base de donnée en laissant //le champ topic_last_post à 0 $query=$db->prepare('INSERT INTO forum_topic (forum_id, topic_titre, topic_createur, topic_vu, topic_time, topic_genre) VALUES(:forum, :titre, :id, 1, :temps, :mess)'); $query->bindValue(':forum', $forum, PDO::PARAM_INT); $query->bindValue(':titre', $titre, PDO::PARAM_STR); $query->bindValue(':id', $id, PDO::PARAM_INT); $query->bindValue(':temps', $temps, PDO::PARAM_INT); $query->bindValue(':mess', $mess, PDO::PARAM_STR); $query->execute(); $nouveautopic = $db->lastInsertId(); //Notre fameuse fonction ! $query->CloseCursor(); //Puis on entre le message $query=$db->prepare('INSERT INTO forum_post (post_createur, post_texte, post_time, topic_id, post_forum_id) VALUES (:id, :mess, :temps, :nouveautopic, :forum)'); $query->bindValue(':id', $id, PDO::PARAM_INT); $query->bindValue(':mess', $message, PDO::PARAM_STR); $query->bindValue(':temps', $temps,PDO::PARAM_INT); $query->bindValue(':nouveautopic', (int) $nouveautopic, PDO::PARAM_INT); $query->bindValue(':forum', $forum, PDO::PARAM_INT); $query->execute(); $nouveaupost = $db->lastInsertId(); //Encore notre fameuse fonction ! $query->CloseCursor(); //Ici on update comme prévu la valeur de topic_last_post et de topic_first_post $query=$db->prepare('UPDATE forum_topic SET topic_last_post = :nouveaupost, topic_first_post = :nouveaupost WHERE topic_id = :nouveautopic'); $query->bindValue(':nouveaupost', (int) $nouveaupost, PDO::PARAM_INT); $query->bindValue(':nouveautopic', (int) $nouveautopic, PDO::PARAM_INT); $query->execute(); $query->CloseCursor(); //Enfin on met à jour les tables forum_forum et forum_membres $query=$db->prepare('UPDATE forum_forum SET forum_post = forum_post + 1 ,forum_topic = forum_topic + 1, forum_last_post_id = :nouveaupost WHERE forum_id = :forum'); $query->bindValue(':nouveaupost', (int) $nouveaupost, PDO::PARAM_INT); $query->bindValue(':forum', (int) $forum, PDO::PARAM_INT); $query->execute(); $query->CloseCursor(); $query=$db->prepare('UPDATE forum_membres SET membre_post = membre_post + 1 WHERE membre_id = :id'); $query->bindValue(':id', $id, PDO::PARAM_INT); $query->execute(); $query->CloseCursor(); //Et un petit message echo'<p>Votre message a bien été ajouté!<br /><br />Cliquez <a href="./index.php">ici</a> pour revenir à l index du forum<br /> Cliquez <a href="./voirtopic.php?t='.$nouveautopic.'">ici</a> pour le voir</p>'; } break; //Houra ! //Deuxième cas : répondre case "repondre": $message = $_POST['message']; //ici seulement, maintenant qu'on est sur qu'elle existe, on récupère la valeur de la variable t $topic = (int) $_GET['t']; $temps = time(); if (empty($message)) { echo'<p>Votre message est vide, cliquez <a href="./poster.php?action=repondre&t='.$topic.'">ici</a> pour recommencer</p>'; } else //Sinon, si le message n'est pas vide { //On récupère l'id du forum $query=$db->prepare('SELECT forum_id, topic_post FROM forum_topic WHERE topic_id = :topic'); $query->bindValue(':topic', $topic, PDO::PARAM_INT); $query->execute(); $data=$query->fetch(); $forum = $data['forum_id']; //Puis on entre le message $query=$db->prepare('INSERT INTO forum_post (post_createur, post_texte, post_time, topic_id, post_forum_id) VALUES(:id,:mess,:temps,:topic,:forum)'); $query->bindValue(':id', $id, PDO::PARAM_INT); $query->bindValue(':mess', $message, PDO::PARAM_STR); $query->bindValue(':temps', $temps, PDO::PARAM_INT); $query->bindValue(':topic', $topic, PDO::PARAM_INT); $query->bindValue(':forum', $forum, PDO::PARAM_INT); $query->execute(); $nouveaupost = $db->lastInsertId(); $query->CloseCursor(); //On change un peu la table forum_topic $query=$db->prepare('UPDATE forum_topic SET topic_post = topic_post + 1, topic_last_post = :nouveaupost WHERE topic_id =:topic'); $query->bindValue(':nouveaupost', (int) $nouveaupost, PDO::PARAM_INT); $query->bindValue(':topic', (int) $topic, PDO::PARAM_INT); $query->execute(); $query->CloseCursor(); //Puis même combat sur les 2 autres tables $query=$db->prepare('UPDATE forum_forum SET forum_post = forum_post + 1 , forum_last_post_id = :nouveaupost WHERE forum_id = :forum'); $query->bindValue(':nouveaupost', (int) $nouveaupost, PDO::PARAM_INT); $query->bindValue(':forum', (int) $forum, PDO::PARAM_INT); $query->execute(); $query->CloseCursor(); $query=$db->prepare('UPDATE forum_membres SET membre_post = membre_post + 1 WHERE membre_id = :id'); $query->bindValue(':id', $id, PDO::PARAM_INT); $query->execute(); $query->CloseCursor(); //Et un petit message $nombreDeMessagesParPage = 15; $nbr_post = $data['topic_post']+1; $page = ceil($nbr_post / $nombreDeMessagesParPage); echo'<p>Votre message a bien été ajouté!<br /><br /> Cliquez <a href="./index.php">ici</a> pour revenir à l index du forum<br /> Cliquez <a href="./voirtopic.php?t='.$topic.'&page='.$page.'#p_'.$nouveaupost.'">ici</a> pour le voir</p>'; }//Fin du else break; default; echo'<p>Cette action est impossible</p>'; } //Fin du Switch ?> </div> </body> </html>
je penses, que c'es un truc tout bête
je mets la page constant, peut-être, il faut modifier un peut la sécurité afin d’éviter d'avoir des message veuillez se connecter hors, je me suis bien connecter
au cas ou
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <?php define('VISITEUR',1); define('INSCRIT',2); define('MODO',3); define('ADMIN',4); define('ERR_IS_CO','Vous ne pouvez pas accéder à cette page si vous n\'êtes pas connecté'); ?>
Partager