Как с помощью PHP перенаправить пользователя на другую страницу сайта после успешной отправки формы?

Здравствуйте! Я написал следующий код: <br/> <br/> <pre><code class="php">&lt;?php
        if (isset($_POST['login']) &amp;&amp; isset($_POST['password'])){
          $login = strip_tags(trim($_POST['login']));
          $password = strip_tags(trim($_POST['password']));
          $db = new PDO(dsn:"mysql:host=localhost;dbname=u2361498_default", username:"u2361498_default", password: "2Ze66dOGJ3SijHaz");
          $info = [];
          if($query = $db-&gt;query("SELECT `login`, `password` FROM `admin`")){
              $info = $query-&gt;fetchAll(fetch_style: PDO::FETCH_ASSOC);
          }else{
              print_r($db-&gt;ErrorInfo());
          }
            foreach($info as $data){
              if($data["login"] == $login &amp;&amp; $data["password"] == $password){
                header('location: admin/admin-input-true.html');
              }else{
                  echo'Данные введены неверно!';
              }}};?&gt;</code></pre> <br/> <br/> Однако, я получаю следующую ошибку: <br/> <pre><code>Warning: Cannot modify header information - headers already sent by (output started at /var/www/u2361498/data/www/razmyslovich-law.online/admin.php:3) in /var/www/u2361498/data/www/razmyslovich-law.online/admin.php on line 43</code></pre> <br/> <br/> Когда я тестировал код в редакторе, все работало корректно, но после размещения сайта на хостинге возникла проблема. Можете подсказать, в чем может быть причина?
  • 13 октября 2024 г. 18:22
Ответы на вопрос 1
Ошибка, которую вы видите ("Warning: Cannot modify header information - headers already sent..."), возникает из-за того, что до вызова функции `header()` уже был сгенерирован какой-либо вывод на экран. Это может быть вызвано пробелами, текстом или даже символом новой строки перед открывающим PHP тегом `<?php`, либо выводом (например, `echo` или `print`) от предыдущих операций.

Вот несколько шагов, которые помогут вам исправить ошибку:

1. **Проверьте наличие пробелов и вывода**: Убедитесь, что перед `<?php` нет пробелов, пустых строк или любого другого вывода. Ваш PHP файл должен начинаться сразу с `<?php`.

2. **Переместите вывод ошибок**: Такие сообщения, как "Данные введены неверно!", стоит помещать ниже `header()`, или просто завершить выполнение скрипта с помощью `exit`, чтобы избежать дальнейшего вывода.

Вот пример, как нужно изменить код:

```php
<?php
if (isset($_POST['login']) && isset($_POST['password'])) {
    $login = strip_tags(trim($_POST['login']));
    $password = strip_tags(trim($_POST['password']));
    
    $db = new PDO("mysql:host=localhost;dbname=u2361498_default", "u2361498_default", "2Ze66dOGJ3SijHaz");
    
    $info = [];
    if ($query = $db->query("SELECT `login`, `password` FROM `admin`")) {
        $info = $query->fetchAll(PDO::FETCH_ASSOC);
    } else {
        print_r($db->errorInfo());
    }

    foreach ($info as $data) {
        if ($data["login"] == $login && $data["password"] == $password) {
            header('Location: admin/admin-input-true.html');
            exit(); // Остановить выполнение скрипта
        }
    }

    // Если вы хотите показывать сообщение об ошибке, то сделайте это после возможного редиректа
    echo 'Данные введены неверно!';
    exit(); // Остановить выполнение скрипта после вывода сообщения
}
?>
```

3. **Закрытие выполнения**: Использование `exit();` после вызова `header()` помогает предотвратить дальнейшую обработку скрипта и вывод лишней информации после перенаправления.

Если следуя вышеуказанным рекомендациям, проблема все еще возникнет, стоит проверить файл на наличие BOM (Byte Order Mark), который может быть добавлен некоторыми текстовыми редакторами. Попробуйте использовать редактор, который позволяет сохранять файлы без BOM.
Похожие вопросы