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`)

4voto

Peter Bailey Points 62125

On dirait que votre formulaire n'est pas configuré pour utiliser POST.

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

1voto

Aiden Bell Points 19856

Quelques commentaires qui pourraient vous aider :

  1. Veuillez fournir la sortie du journal, les messages d'erreur
  2. Imprimez le SQL et exécutez-le manuellement sur le serveur, quelles erreurs se produisent ?
  3. Votre construction SQL utilisant la concaténation de chaînes de caractères est vraiment sinistre et probablement un risque pour la sécurité.

Regardez la documentation pour AOP . L'API de PHP, bien que nommée de manière incohérente, est assez stable. Il est donc fort probable que vous ayez fait quelque chose de mal, auquel cas une erreur devrait s'ensuivre.

1voto

woliveirajr Points 4110

Si tout fonctionne bien, vous obtenez un résultat. Mais si quelque chose "échoue", vous n'obtenez rien, aucun message. Vous restez dans le noir, désemparé. Et c'est mauvais.
Activez le rapport d'erreur. Ne vous contentez pas d'avoir un bloc if, ajoutez aussi un bloc else.

<?php
error_reporting(E_ALL); ini_set('display_errors', true);
if (isset($_POST['msg'])) {
    $title = mysql_real_escape_string($_POST['title'])
      or die('escape_string title failed');
    $msg = mysql_real_escape_string($_POST['msg'])
      or die('escape_string msg failed');
    // 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')")
          or die(mysql_error());
        header('location: /');
        exit;
    }
    else {
        print_r($reg_error);
    }
}
else {
    echo 'post parameter "msg" missing';
}
?>

0voto

Haim Evgi Points 40786

Echo ce que le résultat de la requête

echo mysql_errno($link) . ": " . mysql_error($link) . "\n";

Le script est-il entré dans la ligne qui fait la requête ?

0voto

Tim Points 759

Je viens de remarquer un truc bizarre...

$reg_error est un tableau tel que vous l'avez écrit.

$reg_error[] = 1;

Donc assignez une clé à ce tableau, comme $reg_error[0] ou autre et ensuite

if(count($reg_error) > 0) { /* your code */ }

ou simplement supprimer les crochets [] de $reg_error et laisser les if/else tels quels.

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