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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помогите пожалуйста с перезапросом страницы методом GET

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Пишу лабараторную работу №8 второго курса php Борисова 2015 Создание гостевой книги. Попал в засаду с перезапросом страницы методом GET
новый ученик
Отправлено: 21 Мая, 2017 - 21:26:10
Post Id


Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Май 2017  


Помог: 0 раз(а)




Чтобы форма при перезапуске страницы не отправляла новую запись в базу надо перезапросить страницу методом GET, но поскольку страница инклюдится заголовок не отправляется.... Попробовал включить буферизацию не помогает. Подскажите пожалуйста в чём моя ошибка!!!! С удалением записи тоже пока не понял что делать....
Вот код страницы.
Спойлер (Отобразить)


Отредактировано модератором: Строитель, 21 Мая, 2017 - 21:31:02
 
 Top
Строитель Модератор
Отправлено: 21 Мая, 2017 - 21:35:03
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




Вот эти пару строк
PHP:
скопировать код в буфер обмена
  1. header("Location: " . $_SERVER["PHP_SELF"]);
нужно прописать в конце блока с проверкой метода
PHP:
скопировать код в буфер обмена
  1. if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  2.     // ваш код
  3.     header('Location: '. $_SERVER['PHP_SELF']);
  4.     exit;
  5. }
 
 Top
новый ученик
Отправлено: 21 Мая, 2017 - 21:44:51
Post Id


Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Май 2017  


Помог: 0 раз(а)




Строитель пишет:
Вот эти пару строк
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.... В этом-то и засада. При отправке заголовка пишет ошибку что заголовки отправлены. Пробовал буферизацию включить но не помогает. Это всё отображено в коде страницы.
 
 Top
Строитель Модератор
Отправлено: 21 Мая, 2017 - 21:52:35
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




новый ученик, а что толку что они уже есть? Они НЕ ТАМ ГДЕ НАДО - понимаете?
 
 Top
новый ученик
Отправлено: 21 Мая, 2017 - 22:03:12
Post Id


Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Май 2017  


Помог: 0 раз(а)




Строитель пишет:
новый ученик, а что толку что они уже есть? Они НЕ ТАМ ГДЕ НАДО - понимаете?

Понял свою ошибку. Вставил так как вы указали. Только стало ещё веселей.... Теперь при отправке формы происходит переход на 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;
}

/* Сохранение записи в БД */
 
 Top
Строитель Модератор
Отправлено: 21 Мая, 2017 - 22:20:06
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




Не должно быть никакого вывода в браузер до вызова 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. }
 
 Top
новый ученик
Отправлено: 21 Мая, 2017 - 22:22:43
Post Id


Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Май 2017  


Помог: 0 раз(а)




Строитель пишет:
новый ученик, а что толку что они уже есть? Они НЕ ТАМ ГДЕ НАДО - понимаете?

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



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




новый ученик, пост выше вашего видели? Пробовали?
 
 Top
новый ученик
Отправлено: 21 Мая, 2017 - 22:32:41
Post Id


Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Май 2017  


Помог: 0 раз(а)




Строитель пишет:
новый ученик, пост выше вашего видели? Пробовали?

Да видел попробовал. С тем же результатом. После отправки новой записи переход на index.php и новой записи нет. Попробовал совсем удалить отправку заголовка. Результат тоже. После отправки новой записи переход на index.php и новой записи нет. Но ведь отправку заголовка я удалил.... Почему страница на index.php переходит???? Что-то у меня мозг вскипать начинает...
 
 Top
Строитель Модератор
Отправлено: 21 Мая, 2017 - 22:33:58
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




новый ученик, напишите пожалуйста, ещё раз ваш код, но с учётом текущих изменений.
 
 Top
новый ученик
Отправлено: 21 Мая, 2017 - 22:39:42
Post Id


Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Май 2017  


Помог: 0 раз(а)




Строитель пишет:
новый ученик, напишите пожалуйста, ещё раз ваш код, но с учётом текущих изменений.

Вот код всей страницы. Отправка заголовка закоментирована. Но результат при отправке формы тот же. Переход на 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>";
}
/* Вывод записей из БД */
?>

(Отредактировано автором: 21 Мая, 2017 - 22:41:37)

 
 Top
Строитель Модератор
Отправлено: 21 Мая, 2017 - 22:54:05
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




Попробуйте сейчас отправить данные из вашей формы, а результат скопируйте сюда
Спойлер (Отобразить)
 
 Top
новый ученик
Отправлено: 21 Мая, 2017 - 23:06:21
Post Id


Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Май 2017  


Помог: 0 раз(а)




Строитель пишет:
Попробуйте сейчас отправить данные из вашей формы, а результат скопируйте сюда
Спойлер (Отобразить)

Я немного по другому сделал. Полностью пересоздал эту страницу с прежним кодом. Раскоментировал заголовок. Теперь снова пишет ошибку что заголовки отправлены 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>";
}

/* Вывод записей из БД */
?>
 
 Top
Строитель Модератор
Отправлено: 21 Мая, 2017 - 23:15:38
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




новый ученик, по тексту ошибки становится понятно, что у вас вывод начат в файле index.php, а файл gbook.inc.php подключен к index.php ниже этого вывода. Верно?
 
 Top
новый ученик
Отправлено: 21 Мая, 2017 - 23:19:51
Post Id


Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Май 2017  


Помог: 0 раз(а)




Строитель пишет:
новый ученик, по тексту ошибки становится понятно, что у вас вывод начат в файле index.php, а файл gbook.inc.php подключен к index.php ниже этого вывода. Верно?

Да. Так и есть. В этом-то и засада что gbook.inc.php подключен к index.php. Если бы это была самостоятельная страница вопроса бы не возникло.
 
 Top
Страниц (3): [1] 2 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB