За последние 24 часа нас посетили 15919 программистов и 1546 роботов. Сейчас ищут 767 программистов ...

Не работает header.

Тема в разделе "PHP для новичков", создана пользователем Honanaipr, 20 июн 2017.

  1. Honanaipr

    Honanaipr Новичок

    С нами с:
    5 июн 2017
    Сообщения:
    14
    Симпатии:
    0
    При добавлении новой записи, она должна сначала добавляться в базу, а затем страница должна обновляться с помощью помощь header("Location: ".__FILE__);(дабы избежать повторной отправки POST при обновлении страницы), но при нажатии кнопки сохранить ничего не происходит!!!(после обновлении страницы все как надо). Не могу понять почему.
    PHP:
    1. <?php
    2.         $success = false;
    3.         $host = 'localhost';
    4.         $user = 'root';
    5.         $password = '';
    6.         $bd_name = 'guestbook';
    7.         $link = mysqli_connect($host, $user, $password, $bd_name)
    8.                                 or die(mysqli_error($link));
    9.             if(!empty($_POST['name']) and !empty($_POST['text'])){
    10.             $time = time();
    11.             $name = $_POST['name'];
    12.             $coment = $_POST['text'];
    13.             $success = mysqli_query($link, "INSERT INTO coments (time, name, coment)
    14.                                 VALUES ($time, '$name', '$coment')")
    15.                                  or die(mysqli_error($link));
    16.             header("Location: ".__FILE__);
    17.             exit;
    18.         }
    19.         echo <<<_END
    20. <!DOCTYPE html>
    21. <html lang="ru">
    22. <head>
    23.     <meta charset="utf-8">
    24.     <title>Гостевая книга</title>
    25.     <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
    26.     <link rel="stylesheet" href="style.css">
    27. </head>
    28. <body>
    29.     <div id="wrapper">
    30.         <h1>Гостевая книга</h1>
    31. _END;
    32.         $request = mysqli_query($link, 'SELECT * FROM coments')or die(mysqli_error($link));
    33.         for ($data = []; $row = mysqli_fetch_assoc($request); $data[] = $row);
    34.         foreach ($data as $item){
    35.             $localtime = date('d.m.Y H:i:s',$item['time']);
    36.            
    37.             echo <<<_END
    38.         <div class="note">
    39.             <p>
    40.             <span class="date">$localtime</span>
    41.                 <span class="name">$item[name]</span>
    42.             </p>
    43.             <p>
    44.                 $item[coment]
    45.             </p>
    46.         </div>
    47. _END;
    48.         }
    49.         if(!empty($success)){ echo <<<_END
    50. <div class="info alert alert-info">
    51.             Запись успешно сохранена!
    52. </div>
    53. _END;
    54. }
    55.         echo <<<_END
    56.         <div id="form">
    57.             <form action="" method="POST">
    58.                 <p><input class="form-control" name="name" placeholder="Ваше имя" value=""></p>
    59.                 <p><textarea class="form-control" name="text" placeholder="Ваш отзыв" value=""></textarea></p>
    60.                 <p><input type="submit" class="btn btn-info btn-block" value="Сохранить"></p>
    61.             </form>
    62.         </div>
    63.     </div>
    64. </body>
    65. </html>
    66. _END;
    67.  
    68. ?>
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    имя пхп скрипта ?
     
  3. umbabaraumba

    umbabaraumba Новичок

    С нами с:
    18 июн 2017
    Сообщения:
    100
    Симпатии:
    17
    А зачем вы heredoc используете везде?
    Сложно такой код читать. Выглядит так как будто вы его с интернета взяли а не сами написали.
     
  4. Honanaipr

    Honanaipr Новичок

    С нами с:
    5 июн 2017
    Сообщения:
    14
    Симпатии:
    0
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    <form action="?????" method="POST">
     
  6. Honanaipr

    Honanaipr Новичок

    С нами с:
    5 июн 2017
    Сообщения:
    14
    Симпатии:
    0
    Если кавычки пустые он должен отправить на текущую страницу??
    Обычно так работает.
     
  7. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    не вижу на глаз ошибки.
    включи отображение ошибок
    <?php
    error_reporting ( E_ALL );

    в браузере нажми F12 / перейди во вкладку сеть / после заюзай свою форму и посмотри что в ответ пришло
     
  8. umbabaraumba

    umbabaraumba Новичок

    С нами с:
    18 июн 2017
    Сообщения:
    100
    Симпатии:
    17
    А если написать echo __FILE__; путь совпадает?

    Я бы использовал $_SERVER['PHP_SELF'] или SCRIPT_NAME вместо __FILE__
     
    #8 umbabaraumba, 20 июн 2017
    Последнее редактирование: 20 июн 2017
  9. Honanaipr

    Honanaipr Новичок

    С нами с:
    5 июн 2017
    Сообщения:
    14
    Симпатии:
    0
    Да.
    --- Добавлено ---
    Спасибо с $_SERVER['PHP_SELF'] все работает как надо, но я так и не понял почему.
    --- Добавлено ---
    PHP:
    1. echo __FILE__.'<br>';
    2. 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__ содержит полный путь и имя файла текущего (то есть подключенного) файла.


    Не могу понять суть последнего предложения, но наверняка вся фишка именно там.
     
  10. gruth

    gruth Активный пользователь

    С нами с:
    13 май 2017
    Сообщения:
    224
    Симпатии:
    18
    Так вроде суть хэдера в том что бы отдать его юзеру, и уже браузер юзера переведет его на нужный локейшн. Поэтому нет смысла отправлять пользователю полный путь к скрипту. Он ведь не знает что у тебя есть диск f с папками wamp www ..