За последние 24 часа нас посетили 16584 программиста и 1650 роботов. Сейчас ищут 2027 программистов ...

Ошибка Cannot modify header information - headers already sent

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

  1. vvv7220

    vvv7220 Новичок

    С нами с:
    17 июл 2022
    Сообщения:
    15
    Симпатии:
    0
    если я обработаю PoST в начале, то форма не отправляет данные.
    Код (Text):
    1. <?php
    2. if (!empty($_POST)) {
    3. $sql = mysqli_query($conn, "INSERT INTO `users` (`name`, `age`, `salary`) VALUES ('{$_POST['name']}', '{$_POST['age']}', '{$_POST['salary']}')");
    4. header('Location: redirect.php');
    5. }
    6. ?>
    7.  
    8. <!DOCTYPE html>
    9. <html lang="ru">
    10. <head>
    11.     <meta charset="UTF-8">
    12.     <meta http-equiv="X-UA-Compatible" content="IE=edge">
    13.     <meta name="viewport" content="width=device-width, initial-scale=.0">
    14.     <title>Редиректы PHP</title>
    15.     <link rel="stylesheet" href="css/bootstrap-grid.css">
    16.     <link rel="stylesheet" href="css/bootstrap.min.css">
    17.     <link rel="stylesheet" href="learnphp.css">
    18. </head>
    19. <body>
    20.     <header>
    21.                 <h1>Редиректы PHP</h1>
    22.     </header>
    23.     <div class="container-fluid p-0">
    24.         <div class="row">
    25.             <div data-bs-spy="scroll" data-bs-target="#list-example" data-bs-offset="0" class="col-lg-9 scrollspy-example" tabindex="0">
    26.                 <article id="form_saving">
    27.                     <h3><a href="https://code.mu/ru/php/book/prime/redirect/form-saving/" target="_blank">Сохранение формы в БД и редирект в PHP</a></h3>
    28.                     <?php
    29.                     $servername = "localhost";
    30.                     $username = "root";
    31.                     $password = "";
    32.                     $database = "practice_01";
    33.                     $conn = mysqli_connect($servername, $username, $password, $database);
    34.                     if (!$conn) {
    35.                         die('<p style="color:red">'.mysqli_connect_errno().' - '.mysqli_connect_error().'</p>');
    36.                     }
    37.                     echo "Соединение с БД установленно". '<br>';
    38.                     mysqli_set_charset($conn, "utf8");
    39.                         $query = "SELECT * FROM users";
    40.                         $result = mysqli_query($conn, $query) or die(mysqli_error($conn));
    41.                         $user = mysqli_fetch_assoc($result);
    42.                     ?>
    43.                     <form action="" method="POST">
    44.                         <input name="name" value="<?= $user['name'] ?>">
    45.                         <input name="age" value="<?= $user['age'] ?>">
    46.                         <input name="salary" value="<?= $user['salary'] ?>">
    47.                         <input type="submit">
    48.                     </form>
    49.                     <?php
    50.                     $sql = mysqli_query($conn, "SELECT `name`, `age`, `salary` FROM `users`");
    51.                     while ($usr = mysqli_fetch_assoc($sql)) {
    52.                         echo "<table>
    53.                             <tr>
    54.                             <td>{$usr['name']}</td>
    55.                             <td>{$usr['age']}</td>
    56.                             <td>{$usr['salary']}</td>
    57.                             </tr>
    58.                             </table>";
    59.                     }
    60.                     echo 'юзер успешно добавлен!';
    61.                     ?>
    62.                    
    63.                 </article>
    64.             </div>
    65.             <!-- Navigation -->
    66.             <div class="col-lg-3">
    67.                 <h3>Всего 4 темы</h3>
    68.                 <div id="list-example" class="list-group">
    69.                     <a class="list-group-item list-group-item-action" href="#redirect_intro">1. Введение в редиректы PHP</a>
    70.                     <a class="list-group-item list-group-item-action" href="#get_queries">2. GET запросы и редирект в PHP</a>
    71.                     <a class="list-group-item list-group-item-action" href="#flash">3. Флеш сообщения в PHP</a>
    72.                     <a class="list-group-item list-group-item-action" href="#form_saving">4. Сохранение формы в БД и редирект в PHP</a>
    73.                 </div>
    74.             </div>
    75.         </div>
    76.     </div>
    77. </body>
    78. </html>
     
  2. antoniii

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

    С нами с:
    16 мар 2022
    Сообщения:
    419
    Симпатии:
    71
    Скажи, в полях формы есть значения?
    PHP:
    1.                     <form action="" method="POST">
    2.                         <input name="name" value="<?= $user['name'] ?>">
    3.                         <input name="age" value="<?= $user['age'] ?>">
     
  3. vvv7220

    vvv7220 Новичок

    С нами с:
    17 июл 2022
    Сообщения:
    15
    Симпатии:
    0
    да есть.
    --- Добавлено ---
    Проверил сейчас специально. не знаю что случилось. но код вставленный после формы начал работать. если вставить до начала всего html, то не отправляются данные из формы
    --- Добавлено ---
    форма отправляется но сообщение: Cannot modify header information - headers already sent by (output started at всё равно появляется
     
  4. antoniii

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

    С нами с:
    16 мар 2022
    Сообщения:
    419
    Симпатии:
    71
    Что если временно заменить запрос на вставку в базу:
    print_r($_POST);
     
  5. vvv7220

    vvv7220 Новичок

    С нами с:
    17 июл 2022
    Сообщения:
    15
    Симпатии:
    0
    форма отправляется но сообщение: Cannot modify header information - headers already sent by (output started at всё равно появ
    этот код вообще не работает. а exit если прписать, то боковое меню на сайте исчезает и ошибка : Warning: Cannot modify header information - headers already sent by (output started at C:\OpenServer\domains\lavrikphp\redirect.php:1) in C:\OpenServer\domains\lavrikphp\redirect.php on line 237
    на 237 строке у меня как раз header
    --- Добавлено ---
    тогда так:
    Array ( [name] => usr16 [age] => 50 [salary] => 23000 )
    Warning: Cannot modify header information - headers already sent by (output started at
    --- Добавлено ---
    принт распечатывает массив, если обработчик после формы вставлен. если до html кода, то ничего. вообще никакоЙ реакции
     
  6. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.842
    Симпатии:
    652
    Mля. Ну, ты и упорный «непонимаха»! Этот код ни разу не пересекается с боковым меню и прочим HTML-кодом. И в нем есть exit безо всяких «если приписать».

    Выкладывай весь файл с этим кодом (HTML-составляющую можно сократить).
     
  7. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.842
    Симпатии:
    652
    Это здец:
    PHP:
    1. <?php
    2. if (!empty($_POST)) {
    3. $sql = mysqli_query($conn,
    Я походу начинаю догадываться, почему у тебя ничего не работает Уже успел написать в теме, что код подключения к БД можно прописать выше этой вилки. Иначе нужно дублировать код подключения в обеих ветках.
    --- Добавлено ---
    Вот это тоже хрень:
    PHP:
    1. <?php ...
    2.                         $query = "SELECT * FROM users";
    3.                         $result = mysqli_query($conn, $query) or die(mysqli_error($conn));
    4.                         $user = mysqli_fetch_assoc($result);
    5.                     ?>
    6.                     <form action="" method="POST">
    7.                         <input name="name" value="<?= $user['name'] ?>">
    8.                         <input name="age" value="<?= $user['age'] ?>">
    9.                         <input name="salary" value="<?= $user['salary'] ?>">
    10.                         <input type="submit">
    11.                     </form>
    12.                     <?php
    13.                     $sql = mysqli_query($conn, "SELECT `name`, `age`, `salary` FROM `users`");
    14.                     while ($usr = mysqli_fetch_assoc($sql)) {