Bonjour à tous et à toutes,
Je suis actuellement sur la création d'un forum, et je suis confronté à un problème,
lors du post d'un message un message d'erreur s'affiche :
Voici ma page postvalider :
et voici ma page post :
Merci vraiment pour votre attention et votre aide...
Je suis actuellement sur la création d'un forum, et je suis confronté à un problème,
lors du post d'un message un message d'erreur s'affiche :
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'topic_genre' cannot be null' in /home/XXXXX/public_html/postvalide.php:63 Stack trace: #0 /home/XXXXX/public_html/postvalide.php(63): PDOStatement->execute() #1 {main} thrown in /home/XXXXX/public_html/postvalide.php on line 63
Voici ma page postvalider :
<?php session_start(); ?>
<?php require_once 'connexioninscription.inc.php'; ?>
<?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
?>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="description" content="Afficher le forum." />
<meta name="keywords" content="Forum" />
<title>Forum</title>
<link rel="shortcut icon" sizes="32x32" title="forum" type="image/png" href="mafavicon.png" />
<link href="css1.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="container">
<?php
include ("header.inc.php");
include ("menus.inc.php");
include("debut.php");
?>
<div id="corpspostvalide">
<div id="formpostvalide">
<?php
$id = ($_SESSION['membre_id']);
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 class="textesimple">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=$bdd->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: [langue]ARAM_INT);
$query->bindValue(':titre', $titre, PDO: [langue]ARAM_STR);
$query->bindValue(':id', $id, PDO: [langue]ARAM_INT);
$query->bindValue(':temps', $temps, PDO: [langue]ARAM_INT);
$query->bindValue(':mess', $mess, PDO: [langue]ARAM_STR);
$query->execute();
$nouveautopic = $bdd->lastInsertId(); //Notre fameuse fonction !
$query->CloseCursor();
//Puis on entre le message
$query=$bdd->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: [langue]ARAM_INT);
$query->bindValue(':mess', $message, PDO: [langue]ARAM_STR);
$query->bindValue(':temps', $temps,PDO: [langue]ARAM_INT);
$query->bindValue(':nouveautopic', (int) $nouveautopic, PDO: [langue]ARAM_INT);
$query->bindValue(':forum', $forum, PDO: [langue]ARAM_INT);
$query->execute();
$nouveaupost = $bdd->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=$bdd->prepare('UPDATE forum_topic SET topic_last_post = :nouveaupost, topic_first_post = :nouveaupost WHERE topic_id = :nouveautopic');
$query->bindValue(':nouveaupost', (int) $nouveaupost, PDO: [langue]ARAM_INT);
$query->bindValue(':nouveautopic', (int) $nouveautopic, PDO: [langue]ARAM_INT);
$query->execute();
$query->CloseCursor();
//Enfin on met à jour les tables forum_forum et forum_membres
$query=$bdd->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: [langue]ARAM_INT);
$query->bindValue(':forum', (int) $forum, PDO: [langue]ARAM_INT);
$query->execute();
$query->CloseCursor();
$query=$bdd->prepare('UPDATE membres SET membre_post = membre_post + 1 WHERE membre_id = :id');
$query->bindValue(':id', $id, PDO: [langue]ARAM_INT);
$query->execute();
$query->CloseCursor();
//Et un petit message
echo'<p class="textesimple">Votre message a bien été ajouté!<br /><br />Cliquez <a href="./forum.php">ici</a> pour revenir à l index du forum<br />
Cliquez <a href="./affichertopic.php?t='.$nouveautopic.'">ici</a> pour le voir</p>';
}
break; //Houra !
?>
<?php
//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 class="textesimple">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=$bdd->prepare('SELECT forum_id, topic_post FROM forum_topic WHERE topic_id = :topic');
$query->bindValue(':topic', $topic, PDO: [langue]ARAM_INT);
$query->execute();
$data=$query->fetch();
$forum = $data['forum_id'];
//Puis on entre le message
$query=$bdd->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: [langue]ARAM_INT);
$query->bindValue(':mess', $message, PDO: [langue]ARAM_STR);
$query->bindValue(':temps', $temps, PDO: [langue]ARAM_INT);
$query->bindValue(':topic', $topic, PDO: [langue]ARAM_INT);
$query->bindValue(':forum', $forum, PDO: [langue]ARAM_INT);
$query->execute();
$nouveaupost = $bdd->lastInsertId();
$query->CloseCursor();
//On change un peu la table forum_topic
$query=$bdd->prepare('UPDATE forum_topic SET topic_post = topic_post + 1, topic_last_post = :nouveaupost WHERE topic_id =:topic');
$query->bindValue(':nouveaupost', (int) $nouveaupost, PDO: [langue]ARAM_INT);
$query->bindValue(':topic', (int) $topic, PDO: [langue]ARAM_INT);
$query->execute();
$query->CloseCursor();
//Puis même combat sur les 2 autres tables
$query=$bdd->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: [langue]ARAM_INT);
$query->bindValue(':forum', (int) $forum, PDO: [langue]ARAM_INT);
$query->execute();
$query->CloseCursor();
$query=$bdd->prepare('UPDATE membres SET membre_post = membre_post + 1 WHERE membre_id = :id');
$query->bindValue(':id', $id, PDO: [langue]ARAM_INT);
$query->execute();
$query->CloseCursor();
//Et un petit message
$nombreDeMessagesParPage = 15;
$nbr_post = $data['topic_post']+1;
$page = ceil($nbr_post / $nombreDeMessagesParPage);
echo'<p class="textesimple">Votre message a bien été ajouté!<br /><br />
Cliquez <a href="./forum.php">ici</a> pour revenir à l index du forum<br />
Cliquez <a href="./affichertopic.php?t='.$topic.'&page='.$page.'#p_'.$nouveaupost.'">ici</a> pour le voir</p>';
}//Fin du else
break;
?>
<?php
case "repondremp": //Si on veut répondre
//On récupère le titre et le message
$message = $_POST['message'];
$titre = $_POST['titre'];
$temps = time();
//On récupère la valeur de l'id du destinataire
$dest = (int) $_GET['dest'];
//Enfin on peut envoyer le message
$query=$bdd->prepare('INSERT INTO forum_mp (mp_expediteur, mp_receveur, mp_titre, mp_text, mp_time, mp_lu) VALUES (:id, :dest, :titre, :txt, :tps, "0")');
$query->bindValue(':id',$id,PDO: [langue]ARAM_INT);
$query->bindValue(':dest',$dest,PDO: [langue]ARAM_INT);
$query->bindValue(':titre',$titre,PDO: [langue]ARAM_STR);
$query->bindValue(':txt',$message,PDO: [langue]ARAM_STR);
$query->bindValue(':tps',$temps,PDO: [langue]ARAM_INT);
$query->execute();
$query->CloseCursor();
echo'<p class="textesimple">Votre message a bien été envoyé!<br />
<br />Cliquez <a href="./index.php">ici</a> pour revenir à l index du
forum<br />
<br />Cliquez <a href="./messagesprives.php">ici</a> pour retourner
à la messagerie</p>';
break;
?>
<?php
case "nouveaump": //On envoie un nouveau mp
//On récupère le titre et le message
$message = $_POST['message'];
$titre = $_POST['titre'];
$temps = time();
$dest = $_POST['to'];
//On récupère la valeur de l'id du destinataire
//Il faut déja vérifier le nom
$query=$bdd->prepare('SELECT membre_id FROM membres WHERE LOWER(membre_pseudo) = :dest');
$query->bindValue(':dest',strotolower($dest),PDO: [langue]ARAM_STR);
$query->execute();
if($data = $query->fetch())
{
$query=$bdd->prepare('INSERT INTO forum_mp (mp_expediteur, mp_receveur, mp_titre, mp_text, mp_time, mp_lu) VALUES (:id, :dest, :titre, :txt, :tps, :lu)');
$query->bindValue(':id',$id,PDO: [langue]ARAM_INT);
$query->bindValue(':dest',(int) $data['membre_id'],PDO: [langue]ARAM_INT);
$query->bindValue(':titre',$titre,PDO: [langue]ARAM_STR);
$query->bindValue(':txt',$message,PDO: [langue]ARAM_STR);
$query->bindValue(':tps',$temps,PDO: [langue]ARAM_INT);
$query->bindValue(':lu','0',PDO: [langue]ARAM_STR);
$query->execute();
$query->CloseCursor();
echo'<p class="textesimple">Votre message a bien été envoyé!
<br /><br />Cliquez <a href="./index.php">ici</a> pour revenir à l index du
forum<br />
<br />Cliquez <a href="./messagesprives.php">ici</a> pour retourner à
la messagerie</p>';
}
//Sinon l'utilisateur n'existe pas !
else
{
echo'<p class="textesimple">Désolé ce membre n existe pas, veuillez vérifier et
réessayez à nouveau.</p>';
}
break;
?>
<?php
default;
echo'<p class="textesimple">Cette action est impossible</p>';
} //Fin du Switch
?>
</div>
</div>
<?php
include ("footer.inc.php");
?>
</div>
</body>
</html>
et voici ma page post :
<?php session_start(); ?>
<?php require_once 'connexioninscription.inc.php'; ?>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="description" content="Poster votre message." />
<meta name="keywords" content="Poster" />
<title>poster</title>
<link rel="shortcut icon" sizes="32x32" title="crl" type="image/png" href="mafavicon.png" />
<link href="css1.css" rel="stylesheet" type="text/css"/>
<script>
function bbcode(bbdebut, bbfin)
{
var input = window.document.formulaire.message;
input.focus();
if(typeof document.selection != 'undefined')
{
var range = document.selection.createRange();
var insText = range.text;
range.text = bbdebut + insText + bbfin;
range = document.selection.createRange();
if (insText.length == 0)
{
range.move('character', -bbfin.length);
}
else
{
range.moveStart('character', bbdebut.length + insText.length + bbfin.length);
}
range.select();
}
else if(typeof input.selectionStart != 'undefined')
{
var start = input.selectionStart;
var end = input.selectionEnd;
var insText = input.value.substring(start, end);
input.value = input.value.substr(0, start) + bbdebut + insText + bbfin + input.value.substr(end);
var pos;
if (insText.length == 0)
{
pos = start + bbdebut.length;
}
else
{
pos = start + bbdebut.length + insText.length + bbfin.length;
}
input.selectionStart = pos;
input.selectionEnd = pos;
}
else
{
var pos;
var re = new RegExp('^[0-9]{0,3}$');
while(!re.test(pos))
{
pos = prompt("insertion (0.." + input.value.length + "):", "0");
}
if(pos > input.value.length)
{
pos = input.value.length;
}
var insText = prompt("Veuillez taper le texte");
input.value = input.value.substr(0, pos) + bbdebut + insText + bbfin + input.value.substr(pos);
}
}
function smilies(img)
{
window.document.formulaire.message.value += '' + img + '';
}
</script>
</head>
<body>
<div id="container">
<?php
include ("header.inc.php");
include ("menus.inc.php");
include("debut.php");
?>
<div id="corpsposter">
<div id="misenformeposter">
<?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 !
$id = ($_SESSION['membre_id']);
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= $bdd->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: [langue]ARAM_INT);
$query->execute();
$data=$query->fetch();
echo '<p class="textesimple"><i>Vous êtes ici</i> : <a href="./forum.php">Index du forum</a> -->
<a href="./afficherforum.php?f='.$data['forum_id'].'">'.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=$bdd->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: [langue]ARAM_INT);
$query->execute();
$data=$query->fetch();
$forum = $data['forum_id'];
echo '<p class="textesimple"><i>Vous êtes ici</i> : <a href="./forum.php">Index du forum</a> -->
<a href="./afficherforum.php?f='.$data['forum_id'].'">'.stripslashes(htmlspecialchars($data['forum_name'])).'</a>
--> <a href="./'.$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=$bdd->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: [langue]ARAM_INT);
$query->execute();
$data=$query->fetch();
$topic = $data['topic_id'];
$forum = $data['forum_id'];
echo '<p class="textesimple"><i>Vous êtes ici</i> : <a href="./forum.php">Index du forum</a> --> <a href="./afficherforum.php?f='.$data['forum_id'].'">'.stripslashes(htmlspecialchars($data['forum_name'])).'</a> --> <a href="./'.$topic.'">'.stripslashes(htmlspecialchars($data['topic_titre'])).'</a> --> Modérer un message</p>';
}
$query->CloseCursor();
?>
<?php
switch($action)
{
case "repondre": //Premier cas : on souhaite répondre
?>
<h1 class="textesimple">Poster une réponse</h1>
<form method="post" action="postvalide.php?action=repondre&t=<?php echo $topic ?>" name="formulaire">
<fieldset><legend><h3 class="textesimple">Mise en forme</h3></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('[i]', '[/i]');return(false)" />
<input type="button" id="souligné" name="souligné" value="Souligné" onClick="javascript:bbcode('[s]', '[/s]');return(false)" />
<input type="button" id="lien" name="lien" value="Lien" onClick="javascript:bbcode('[url]', '[/url]');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="interrogation" alt="interrogation" onClick="javascript:smilies(':interrogation:');return(false)" />
<img src="./images/smileys/exclamation.gif" title="exclamation" alt="exclamation" onClick="javascript:smilies(':exclamation:');return(false)" />
</fieldset>
<fieldset><legend><h3 class="textesimple">Message</h3></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": //Deuxième cas : on souhaite créer un nouveau topic
?>
<h1 class="textesimple">Nouveau topic</h1>
<form method="post" action="postvalide.php?action=nouveautopic&f=<?php echo $forum ?>" name="formulaire">
<fieldset><legend><h3 class="textesimple">Titre</h3></legend>
<input type="text" size="80" id="titre" name="titre" /></fieldset>
<fieldset><legend><h3 class="textesimple">Mise en forme</h3></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('[i]', '[/i]');return(false)" />
<input type="button" id="souligné" name="souligné" value="Souligné" onClick="javascript:bbcode('[s]', '[/s]');return(false)" />
<input type="button" id="lien" name="lien" value="Lien" onClick="javascript:bbcode('[url]', '[/url]');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="interrogation" alt="iinterrogation" onClick="javascript:smilies(':interrogation:');return(false)" />
<img src="./images/smileys/exclamation.gif" title="exclamation" alt="exclamation" onClick="javascript:smilies(':exclamation:');return(false)" /></fieldset>
<fieldset><legend><h3 class="textesimple">Message</h3></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 class="textesimple">
<input type="submit" name="submit" value="Envoyer" />
<input type="reset" name = "Effacer" value = "Effacer" /></p>
</form>
<?php
break;
//D'autres cas viendront s'ajouter là plus tard [langue]
default: //Si jamais c'est aucun de ceux-là, c'est qu'il y a eu un problème :o
echo'<p class="textesimple">Cette action est impossible</p>';
} //Fin du switch
?>
</div>
</div>
<?php
include ("footer.inc.php");
?>
</div>
</body>
</html>
Merci vraiment pour votre attention et votre aide...