Проблема с $ _POST - PullRequest
0 голосов
/ 29 июня 2009

Это не сработает. Все поля правильные и т. Д., И у меня есть соединение с БД.

к проблеме

Я использую этот скрипт для вставки поста в БД:

<?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;

}


}
?>

Форма:

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

Хорошо работал на днях. Не сегодня. Нет ошибок «Почтовый материал» появляется в URL. Я думал, что это только при использовании $ _GET, что я не делаю. http://localhost/post_msg.php?title=fdsg&msg=sdfg

я не получаю никаких ошибок, страница просто перезагружается

сообщений дБ

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

Ответы [ 8 ]

4 голосов
/ 29 июня 2009

Похоже, ваша форма не настроена на использование POST

<form action="post_msg.php" method="post">
1 голос
/ 29 июня 2009

Если все работает нормально, вы получите результат. Но если что-то «терпит неудачу», вы ничего не получаете, нет сообщений, что так всегда. Это оставляет вас в темноте, невежественным. И это плохо.
Включите сообщение об ошибке. Не просто иметь блок if, добавьте блок 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';
}
?>
1 голос
/ 29 июня 2009

Несколько комментариев, которые могут помочь:

  1. Пожалуйста, предоставьте вывод журнала, сообщения об ошибках
  2. Распечатайте SQL и запустите его вручную на сервере, какие ошибки возникают?
  3. Ваша конструкция SQL с использованием конкатенации строк действительно мрачна и, вероятно, представляет угрозу безопасности.

Посмотрите документацию для PDO . API в PHP, хотя и с непоследовательным названием, довольно стабилен. Так что, скорее всего, вы сделали что-то не так, и в этом случае должна произойти ошибка.

0 голосов
/ 29 июня 2009

Я нашел проблему! я проверил мой файл header.php и угадайте что? была форма, которую я закрыл: / извините за беспокойство, ребята

0 голосов
/ 29 июня 2009

С предоставленным кодом reg_error используется только для определения того, выполняет SQL или нет. Вместо того, чтобы устанавливать переменную (поскольку ее единственный набор зависит от условного оператора), почему бы просто не изменить свой код на:

<?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";

}


}
?>

Это просто код. Очевидно, что оператор else, в конечном счете, будет изменен, но сейчас он даст вам запасной способ показать вам, даже если он попытался выполнить SQL-запрос. Если это не так, условие не выполняется, и по какой-то причине вы не получаете значения из сообщения.

Единственный способ изменить ваш URL - это изменить метод тега формы. Если он настроен на публикацию, он не должен отображаться в URL.

0 голосов
/ 29 июня 2009

Удалите заголовок перенаправления и введите его в конце сценария для отладки:

var_dump ($ _ POST); echo mysql_error ();

0 голосов
/ 29 июня 2009

Я только что заметил что-то странное ...

$ reg_error - это массив, каким вы его написали.

$reg_error[] = 1;

Итак ... назначьте ключ для этого массива, например, $ reg_error [0] или что-то еще ... и затем

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

.. или просто удалите скобки [] из $ reg_error и оставьте if / else как есть.

0 голосов
/ 29 июня 2009

Эхо-результат запроса

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

входил ли скрипт в строку, выполняющую запрос?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...