Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Помогите пожалуйста с перезапросом страницы методом GET
Форумы портала PHP.SU » » Вопросы новичков » Помогите пожалуйста с перезапросом страницы методом GET

Страниц (3): [1] 2 3 »
 

1. новый ученик - 21 Мая, 2017 - 21:26:10 - перейти к сообщению
Чтобы форма при перезапуске страницы не отправляла новую запись в базу надо перезапросить страницу методом GET, но поскольку страница инклюдится заголовок не отправляется.... Попробовал включить буферизацию не помогает. Подскажите пожалуйста в чём моя ошибка!!!! С удалением записи тоже пока не понял что делать....
Вот код страницы.
Спойлер (Отобразить)
2. Строитель - 21 Мая, 2017 - 21:35:03 - перейти к сообщению
Вот эти пару строк
PHP:
скопировать код в буфер обмена
  1. header("Location: " . $_SERVER["PHP_SELF"]);
нужно прописать в конце блока с проверкой метода
PHP:
скопировать код в буфер обмена
  1. if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  2.     // ваш код
  3.     header('Location: '. $_SERVER['PHP_SELF']);
  4.     exit;
  5. }
3. новый ученик - 21 Мая, 2017 - 21:44:51 - перейти к сообщению
Строитель пишет:
Вот эти пару строк
PHP:
скопировать код в буфер обмена
  1. header("Location: " . $_SERVER["PHP_SELF"]);
нужно прописать в конце блока с проверкой метода
PHP:
скопировать код в буфер обмена
  1. if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  2.     // ваш код
  3.     header('Location: '. $_SERVER['PHP_SELF']);
  4.     exit;
  5. }


Эти две строки в коде уже есть. Но страница подключаемая к index.php.... В этом-то и засада. При отправке заголовка пишет ошибку что заголовки отправлены. Пробовал буферизацию включить но не помогает. Это всё отображено в коде страницы.
4. Строитель - 21 Мая, 2017 - 21:52:35 - перейти к сообщению
новый ученик, а что толку что они уже есть? Они НЕ ТАМ ГДЕ НАДО - понимаете?
5. новый ученик - 21 Мая, 2017 - 22:03:12 - перейти к сообщению
Строитель пишет:
новый ученик, а что толку что они уже есть? Они НЕ ТАМ ГДЕ НАДО - понимаете?

Понял свою ошибку. Вставил так как вы указали. Только стало ещё веселей.... Теперь при отправке формы происходит переход на index.php а новая запись не добавляется... Или я снова что-то накосячил?
/* Сохранение записи в БД */
if($_SERVER['REQUEST_METHOD'] == 'POST'){
if(isset($_POST['name']) and isset($_POST['email']) and isset($_POST['msg'])){
$name = trim(strip_tags($_POST['name']));
$email = trim(strip_tags($_POST['email']));
$msg = trim(strip_tags($_POST['msg']));
$sql = "INSERT INTO msgs (name, email, msg) VALUES ('$name', '$email', '$msg')";
mysqli_query($link, $sql);
if( !$result)
echo mysqli_error($link);
}
header("Location: " . $_SERVER["PHP_SELF"]);
exit;
}

/* Сохранение записи в БД */
6. Строитель - 21 Мая, 2017 - 22:20:06 - перейти к сообщению
Не должно быть никакого вывода в браузер до вызова header(). А у вас там над ней echo прописан. Попробуйте пока так:
PHP:
скопировать код в буфер обмена
  1. if($_SERVER['REQUEST_METHOD'] == 'POST'){
  2.     if (isset($_POST['name'], $_POST['email'], $_POST['msg'])) {
  3.         $name = trim(strip_tags($_POST['name']));
  4.         $email = trim(strip_tags($_POST['email']));
  5.         $msg = trim(strip_tags($_POST['msg']));
  6.        
  7.         $sql = "
  8.            INSERT INTO msgs (
  9.                name, email, msg
  10.            ) VALUES ('$name', '$email', '$msg')
  11.        ";
  12.         mysqli_query($link, $sql);
  13.     /*if( !$result)
  14.     echo mysqli_error($link);
  15.     */
  16.     }
  17.     header("Location: " . $_SERVER["PHP_SELF"]);
  18.     exit;
  19. }
7. новый ученик - 21 Мая, 2017 - 22:22:43 - перейти к сообщению
Строитель пишет:
новый ученик, а что толку что они уже есть? Они НЕ ТАМ ГДЕ НАДО - понимаете?

Уважаемый! Подскажите что теперь за засада образовалась???? Я отправку заголовка вообще удалил а страница теперь после отправки формы всё время переходит на index.php не отправляя запись в базу... Что теперь делать с этим и почему это происходит после удаления отправки заголовка???? Не понял Огорчение
8. Строитель - 21 Мая, 2017 - 22:24:50 - перейти к сообщению
новый ученик, пост выше вашего видели? Пробовали?
9. новый ученик - 21 Мая, 2017 - 22:32:41 - перейти к сообщению
Строитель пишет:
новый ученик, пост выше вашего видели? Пробовали?

Да видел попробовал. С тем же результатом. После отправки новой записи переход на index.php и новой записи нет. Попробовал совсем удалить отправку заголовка. Результат тоже. После отправки новой записи переход на index.php и новой записи нет. Но ведь отправку заголовка я удалил.... Почему страница на index.php переходит???? Что-то у меня мозг вскипать начинает...
10. Строитель - 21 Мая, 2017 - 22:33:58 - перейти к сообщению
новый ученик, напишите пожалуйста, ещё раз ваш код, но с учётом текущих изменений.
11. новый ученик - 21 Мая, 2017 - 22:39:42 - перейти к сообщению
Строитель пишет:
новый ученик, напишите пожалуйста, ещё раз ваш код, но с учётом текущих изменений.

Вот код всей страницы. Отправка заголовка закоментирована. Но результат при отправке формы тот же. Переход на index.php к которому подключается страница а новая запись не вносится в базу данных.
<?php
/* Основные настройки */
const DB_HOST = 'localhost';
const DB_LOGIN = 'root';
const DB_PASSWORD = '';
const DB_NAME = 'gbook';
$link = mysqli_connect(DB_HOST, DB_LOGIN, DB_PASSWORD, DB_NAME);
/* Основные настройки */

/* Сохранение записи в БД */

if($_SERVER['REQUEST_METHOD'] == 'POST'){
if (isset($_POST['name'], $_POST['email'], $_POST['msg'])) {
$name = trim(strip_tags($_POST['name']));
$email = trim(strip_tags($_POST['email']));
$msg = trim(strip_tags($_POST['msg']));

$sql = "
INSERT INTO msgs (
name, email, msg
) VALUES ('$name', '$email', '$msg')
";
mysqli_query($link, $sql);
/*if( !$result)
echo mysqli_error($link);
*/
}
/*header("Location: " . $_SERVER["PHP_SELF"]);
exit;*/
}

/* Сохранение записи в БД */

/* Удаление записи из БД */
if(isset($_GET['id'])){
$del = $_GET['id'];
$delid = "DELETE FROM msgs WHERE id = $del";
mysqli_query($link, $delid);
}


/* Удаление записи из БД */
?>
<h3>Оставьте запись в нашей Гостевой книге</h3>

<form method="post" action="<?= $_SERVER["PHP_SELF"]?>">
Имя: <br /><input type="text" name="name" /><br />
Email: <br /><input type="text" name="email" /><br />
Сообщение: <br /><textarea name="msg"></textarea><br />

<br />

<input type="submit" value="Отправить!" />

</form>
<?php
/* Вывод записей из БД */
$output = "SELECT id, name, email, msg, UNIX_TIMESTAMP(datetime) as dt FROM msgs ORDER BY id DESC";
$result = mysqli_query($link, $output);
mysqli_close($link);
$row_count = mysqli_num_rows($result);
echo "<p>";
echo "Всего записей в гостевой книге:$row_count";
echo "</p>";

while($row = mysqli_fetch_assoc($result)){
echo "<p>";
echo "<a href='mailto:{$row["name"]}'>{$row['name']}</a>";
echo " " . date("d.m.Y в H:i:s", $row["dt"]) . " написал";
echo "<br />";
echo "{$row["msg"]}";
echo "</p>";
echo "<p align='right'>";
echo "<a href='http://mysite.local/index.php?id=gbook&del={$row[id]}'>Удалить</a>";
echo "</p>";
}
/* Вывод записей из БД */
?>
12. Строитель - 21 Мая, 2017 - 22:54:05 - перейти к сообщению
Попробуйте сейчас отправить данные из вашей формы, а результат скопируйте сюда
Спойлер (Отобразить)
13. новый ученик - 21 Мая, 2017 - 23:06:21 - перейти к сообщению
Строитель пишет:
Попробуйте сейчас отправить данные из вашей формы, а результат скопируйте сюда
Спойлер (Отобразить)

Я немного по другому сделал. Полностью пересоздал эту страницу с прежним кодом. Раскоментировал заголовок. Теперь снова пишет ошибку что заголовки отправлены Warning: Cannot modify header information - headers already sent by (output started at C:\OpenServer\domains\mysite.local\index.php:12) in C:\OpenServer\domains\mysite.local\inc\gbook.inc.php on line 28.
Вот код страницы.
<?php
/* Основные настройки */
const DB_HOST = 'localhost';
const DB_LOGIN = 'root';
const DB_PASSWORD = '';
const DB_NAME = 'gbook';
$link = mysqli_connect(DB_HOST, DB_LOGIN, DB_PASSWORD, DB_NAME);

/* Основные настройки */

/* Сохранение записи в БД */
if($_SERVER['REQUEST_METHOD'] == 'POST'){
if (isset($_POST['name'], $_POST['email'], $_POST['msg'])) {
$name = trim(strip_tags($_POST['name']));
$email = trim(strip_tags($_POST['email']));
$msg = trim(strip_tags($_POST['msg']));

$sql = "
INSERT INTO msgs (
name, email, msg
) VALUES ('$name', '$email', '$msg')
";
mysqli_query($link, $sql);
/*if( !$result)
echo mysqli_error($link);
*/
}
header("Location: " . $_SERVER["PHP_SELF"]);
exit;
}

/* Сохранение записи в БД */

/* Удаление записи из БД */

/* Удаление записи из БД */
?>
<h3>Оставьте запись в нашей Гостевой книге</h3>

<form method="post" action="<?= $_SERVER['REQUEST_URI']?>">
Имя: <br /><input type="text" name="name" /><br />
Email: <br /><input type="text" name="email" /><br />
Сообщение: <br /><textarea name="msg"></textarea><br />

<br />

<input type="submit" value="Отправить!" />

</form>
<?php
/* Вывод записей из БД */
$output = "SELECT id, name, email, msg, UNIX_TIMESTAMP(datetime) as dt FROM msgs ORDER BY id DESC";
$result = mysqli_query($link, $output);
mysqli_close($link);
$row_count = mysqli_num_rows($result);
echo "<p>";
echo "Всего записей в гостевой книге:$row_count";
echo "</p>";

while($row = mysqli_fetch_assoc($result)){
echo "<p>";
echo "<a href='mailto:{$row["name"]}'>{$row['name']}</a>";
echo " " . date("d.m.Y в H:i:s", $row["dt"]) . " написал";
echo "<br />";
echo "{$row["msg"]}";
echo "</p>";
echo "<p align='right'>";
echo "<a href='http://mysite.local/index.php?id=gbook&del={$row[id]}'>Удалить</a>";
echo "</p>";
}

/* Вывод записей из БД */
?>
14. Строитель - 21 Мая, 2017 - 23:15:38 - перейти к сообщению
новый ученик, по тексту ошибки становится понятно, что у вас вывод начат в файле index.php, а файл gbook.inc.php подключен к index.php ниже этого вывода. Верно?
15. новый ученик - 21 Мая, 2017 - 23:19:51 - перейти к сообщению
Строитель пишет:
новый ученик, по тексту ошибки становится понятно, что у вас вывод начат в файле index.php, а файл gbook.inc.php подключен к index.php ниже этого вывода. Верно?

Да. Так и есть. В этом-то и засада что gbook.inc.php подключен к index.php. Если бы это была самостоятельная страница вопроса бы не возникло.

 

Powered by ExBB FM 1.0 RC1