При добавлении новой записи, она должна сначала добавляться в базу, а затем страница должна обновляться с помощью помощь header("Location: ".__FILE__);(дабы избежать повторной отправки POST при обновлении страницы), но при нажатии кнопки сохранить ничего не происходит!!!(после обновлении страницы все как надо). Не могу понять почему. PHP: <?php $success = false; $host = 'localhost'; $user = 'root'; $password = ''; $bd_name = 'guestbook'; $link = mysqli_connect($host, $user, $password, $bd_name) or die(mysqli_error($link)); if(!empty($_POST['name']) and !empty($_POST['text'])){ $time = time(); $name = $_POST['name']; $coment = $_POST['text']; $success = mysqli_query($link, "INSERT INTO coments (time, name, coment) VALUES ($time, '$name', '$coment')") or die(mysqli_error($link)); header("Location: ".__FILE__); exit; } echo <<<_END <!DOCTYPE html> <html lang="ru"> <head> <meta charset="utf-8"> <title>Гостевая книга</title> <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css"> <link rel="stylesheet" href="style.css"> </head> <body> <div id="wrapper"> <h1>Гостевая книга</h1> _END; $request = mysqli_query($link, 'SELECT * FROM coments')or die(mysqli_error($link)); for ($data = []; $row = mysqli_fetch_assoc($request); $data[] = $row); foreach ($data as $item){ $localtime = date('d.m.Y H:i:s',$item['time']); echo <<<_END <div class="note"> <p> <span class="date">$localtime</span> <span class="name">$item[name]</span> </p> <p> $item[coment] </p> </div> _END; } if(!empty($success)){ echo <<<_END <div class="info alert alert-info"> Запись успешно сохранена! </div> _END; } echo <<<_END <div id="form"> <form action="" method="POST"> <p><input class="form-control" name="name" placeholder="Ваше имя" value=""></p> <p><textarea class="form-control" name="text" placeholder="Ваш отзыв" value=""></textarea></p> <p><input type="submit" class="btn btn-info btn-block" value="Сохранить"></p> </form> </div> </div> </body> </html> _END; ?>
А зачем вы heredoc используете везде? Сложно такой код читать. Выглядит так как будто вы его с интернета взяли а не сами написали.
F:\wamp64\www\guestbook\guestbook.php --- Добавлено --- http://theory.phphtml.net/tasks/php/practice/miniproekty-php-dlya-novichkov.html
не вижу на глаз ошибки. включи отображение ошибок <?php error_reporting ( E_ALL ); в браузере нажми F12 / перейди во вкладку сеть / после заюзай свою форму и посмотри что в ответ пришло
А если написать echo __FILE__; путь совпадает? Я бы использовал $_SERVER['PHP_SELF'] или SCRIPT_NAME вместо __FILE__
Да. --- Добавлено --- Спасибо с $_SERVER['PHP_SELF'] все работает как надо, но я так и не понял почему. --- Добавлено --- PHP: echo __FILE__.'<br>'; echo $_SERVER['PHP_SELF']; Выдает: F:\wamp64\www\guestbook\guestbook.php /guestbook/guestbook.php --- Добавлено --- 'PHP_SELF' Имя файла скрипта, который сейчас выполняется, относительно корня документов. Например,$_SERVER['PHP_SELF'] в скрипте по адресу http://example.com/foo/bar.php будет /foo/bar.php. Константа __FILE__ содержит полный путь и имя файла текущего (то есть подключенного) файла. Не могу понять суть последнего предложения, но наверняка вся фишка именно там.
Так вроде суть хэдера в том что бы отдать его юзеру, и уже браузер юзера переведет его на нужный локейшн. Поэтому нет смысла отправлять пользователю полный путь к скрипту. Он ведь не знает что у тебя есть диск f с папками wamp www ..