0 votes

Problème avec $_POST

Ça ne marchera pas. Tous les champs sont corrects, etc. et j'ai une connexion à la base de données.

Au problème

J'utilise ce script pour insérer un message dans la base de données :

<?php

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

$title = mysql_real_escape_string($_POST['title']);
$msg = mysql_real_escape_string($_POST['msg']);

// kolla efter tomma fält
if (empty($title) || empty($msg)) {
$reg_error[] = 1;
}

if (!isset($reg_error)) {
mysql_query("INSERT INTO messages (title, message, date, user_id)
             VALUES('$title', '$msg', '".time()."', '2')");

header('location: /');

exit;

}

}
?>

La forme :

<form action="post_msg.php" method="post">

<b>Title:</b>
<input type="text" name="title" size="40" />

<b>Message:</b>
<textarea rows="15" cols="75" name="msg"></textarea>

<input type="submit" value="Post Message" />
</form>

Ça a bien marché l'autre jour. Pas aujourd'hui. Pas d'erreur. Le "post stuff" apparaît dans l'url. Je pensais que cela ne se produisait que si l'on utilisait $_GET, ce qui n'est pas le cas. http://localhost/post_msg.php?title=fdsg&msg=sdfg

Je n'obtiens aucune erreur, la page se recharge simplement.

messages db

CREATE TABLE IF NOT EXISTS `messages` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(140) COLLATE utf8_unicode_ci DEFAULT NULL,
`message` text COLLATE utf8_unicode_ci
`date` int(10) unsigned NOT NULL,
`user_id` int(10) unsigned NOT NULL,
 PRIMARY KEY (`id`),
 FULLTEXT KEY `title` (`title`,`message`)

0voto

Erik Points 265

Supprimez l'en-tête de redirection et tapez ceci à la fin du script pour le débogage :

v echo mysql_error() ;

0voto

David Ferguson Points 11

Avec le code fourni, reg_error est uniquement utilisé pour déterminer si le SQL doit être exécuté ou non. Au lieu de définir une variable (puisque sa définition ne dépend que d'une déclaration conditionnelle), pourquoi ne pas simplement modifier votre code pour faire :

<?php

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

$title = mysql_real_escape_string($_POST['title']);
$msg = mysql_real_escape_string($_POST['msg']);

// kolla efter tomma fält
if (!empty($title) && !empty($msg)) {

  mysql_query("INSERT INTO messages (title, message, date, user_id)
             VALUES('$title', '$msg', '".time()."', '2')");

  header('location: /');

  exit;

}

else {

  echo "There was an error";

}

}
?>

Il s'agirait simplement du code. L'instruction else sera évidemment modifiée à terme, mais pour l'instant, elle vous permettra de savoir si la requête SQL a été tentée. Si ce n'est pas le cas, la condition échoue et vous n'obtenez pas de valeurs du message pour une raison quelconque.

La seule façon dont votre URL pourrait changer est si la méthode de la balise de formulaire était modifiée. Si elle est réglée sur post, elle ne devrait pas apparaître dans l'URL.

0voto

J'ai trouvé le problème ! J'ai vérifié mon fichier header.php et devinez quoi ? il y avait un formulaire que je n'avais pas fermé :/ désolé de vous déranger les gars

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X