Probleme de variable $_GET avec un IF

Fermé
nice2k - 12 avril 2011 à 16:25
 nice2k - 12 avril 2011 à 17:00
Bonjour,

Je réalise un projet pour mes études qui consiste à coder un forum avec PHP / MySQL.
Mais voilà, j'ai un problème et je bloque.
En fait, je veux transmettre par l'url l'id du topic sur lequel l'utilisateur veut poster, et le récupérer dans mon fichier create_message.php pour pouvoir ensuite insérer le nouveau message dans ma base de donnée, et ce message aura comme topic_id celui que j'aurais récupéré.(J'espère que c'est clair :p)

Seulement, je récupère bien ma variable grâce à $id_topic = (int) $_GET['topic']; lorsque je fais un echo j'ai bien mon topic_id, mais dès que je fais mon echo dans mon IF juste après, il me renvoie que ma variable est égale à 0 !

J'ai essayé en passant par une variable de session ou même par POST dans un input hidden, et pareil, j'arrive à 'echo' ma variable avant mon IF, mais quand je le fais dedans j'ai ce message d'erreur :

Erreur : SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'topic_id' cannot be null

Alors que juste avant mon if ma variable n'était pas nulle.. HELP PLEASE :'(

La partie où je fais passer ma variable de show_topic.php à create_message.php :

<th width="10%" align="right" colspan="2">Créé le <?php echo $message['creation_date'].' ' ; if ($_SESSION['is_admin'] == 1) {
                    echo '<a href=remove_message.php?message='.$message['id'].'>Supprimer</a>'. ' '; echo '<a href=create_message.php?topic='.$id_topic.'>Répondre</a>'; }?></th>
                </tr>


Et la partie où je récupére sur create_message.php (où le echo marche que avant mon IF) :


<?php
session_start();
try
{
    // On se connecte à MySQL
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    $pdo_options[PDO::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES utf8";
    $bdd = new PDO('mysql:host=localhost;dbname=SUPFORUM', 'root', 'root', $pdo_options);
    $id_topic = (int) $_GET['topic'];

if(isset($_POST['submit'])) {


if(!isset($_POST['msg_content']) || $_POST['msg_content']=="") {
$msg = "Le message est vide !";
} else {
$msg = "";
}

if (isset($_POST['submit']) && !empty($_POST['msg_content'])) {
  
    $insert_db_msg = $bdd->prepare('INSERT INTO MESSAGES (content, author_id, topic_id, creation_date) VALUES(?, ?, ?, ?)');
    $insert_db_msg->execute(array($_POST['msg_content'], $_SESSION['id'], $id_topic, time()));
}
}

?>


Je vous remercie d'avance de votre aide, je suis désespéré..


4 réponses

Quand tu cliques sur le lien Repondre créé par
href=remove_message.php?message='.$message['id'].'>Supprimer</a>'. ' '; echo '<a href=create_message.php?topic='.$id_topic.'>Répondre</a>'; }?></th>

tu récupères $_GET['topic'] mais rien en $_POST

Quand tu cliques sur le bouton du formulaire, comme l'action est simplement create_message.php, tu récupères quelque chose en $_POST mais rien en $_GET : tu as perdu ton id_topic. Tu devrais le garder dans une variable de session
1
Bonjour

Faut pas désespérer comme ça :)

Dans ton code, tu récupères ton $id_topic dans $_GET, et tu testes la suite avec $_POST. Est-ce bien normal ?
0
Tout d'abord merci de te pencher sur mon problème :).

En fait je tente de stocker ma variable $_GET['topic'] dans $id_topic.
Puis j'essaye de l'insérer dans la base de donnée dans la colonne topic_id.

Mes variables POST présentes dans mon code sont en fait celles d'un formulaire présent un peu plus bas que je n'ai pas montré, je te le mets :

<form id="form5" name="form5" method="post" action="create_message.php">
             <p>
                Contenu du message * : </br></br> <textarea name="msg_content" type="text" id="textarea" value=""></textarea> </br></br>
                <input type="submit" name="submit" id="button" value="Ajouter message" /> </br></br>
        <?php
if(isset($_POST['submit'])) {
echo $msg;
}
?>
            </p>
        </form>


Merci encore.
0
Je ne suis pas sûr d'avoir bien compris, enfin je ne vois pas trop comment faire et ce que je dois changer.

J'ai essayé avec une variable de SESSION et j'avais l'impression d'avoir le même problème.. Pourrais-tu me mettre sur la voie?


EDIT : Bah écoute après plusieurs lectures de ton post j'ai compris et changé le formulaire en insérant la variable GET dans le champ action. Je te remercie infiniment, ça faisait 3 jours que je bloquais là dessus ! bonne journée à toi ;)
0