Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.90/29: Рейтинг темы: голосов - 29, средняя оценка - 4.90
1 / 1 / 0
Регистрация: 13.05.2012
Сообщений: 47

Перенаправление на другую страницу

21.04.2020, 17:56. Показов 5962. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Помогите новичку разобраться.
На странице есть форма с текстовыми полями. В эту страницу вставлен php скрипт, который выводит текстовый результат прямо в текущей странице. Результат выводится через "echo"
Но если скрипт делает редирект на другую страницу то по факту перенаправления нет.
Если скрипт и html страницу разделить на 2 файла тогда все работает. Но тогда результат скрипта появляется в новой странице а не в текущей.
Как сделать что бы и результат выводился в текущей странице и редирект происходил.
Спасибо.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.04.2020, 17:56
Ответы с готовыми решениями:

Перенаправление на другую страницу с условиями
привет! ести проблемка, я делаю страницу голосование /опрос, на первой странице пользователь вводит свой уникальный код (получает по...

Как отключить перенаправление на другую страницу при вызове mail.php?
Добрый вечер, друзья! Собственно вопрос в названии темы. Подробнее - при вызове mail.php со страницы происходит референс на страницу...

Перенаправление на предыдущую страницу
Добрый день, Подскажите как сделать перенаправление на предыдущую страницу. Есть сайт визитка, на разных его страницах установлена...

20
105 / 57 / 22
Регистрация: 20.12.2009
Сообщений: 1,279
Записей в блоге: 2
22.04.2020, 16:18
Неплохо бы видеть код, но могу предположить что редирект не происходит из-за "headers already sent"
в разделе "для начинающих" есть прикерпеленная тема как победить эту беду.
Также могу предположить что нужно включить опции для отображение всех нотисов и ворнингс чтобы увидеть это.
PHP
1
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
1
1 / 1 / 0
Регистрация: 13.05.2012
Сообщений: 47
23.04.2020, 11:10  [ТС]
Supersumestria, Вы правы, по документации редирект должен быть до выводов заголовков. А у меня получается после.
Проблему решил через Javascript вместо редиректа написал так
PHP
1
2
3
4
5
6
echo '<script language="JavaScript">
  function func() {
    document.location.href = "index.html"
  }
  func();
</script>';
0
 Аватар для HotReboot
326 / 227 / 92
Регистрация: 22.04.2017
Сообщений: 1,136
23.04.2020, 21:21
Makintosh, Не делайте так. Это очень плохой код.
JavaScript
1
2
3
4
5
6
7
8
?>
<script language="JavaScript">
  function func() {
    document.location.href = "index.html"
  }
  func();
</script>
<?php
0
 Аватар для freevoyajer
20 / 21 / 2
Регистрация: 09.04.2020
Сообщений: 125
23.04.2020, 22:15
HotReboot, осмелюсь спросить, почему вы считаете код плохим?
0
1 / 1 / 0
Регистрация: 13.05.2012
Сообщений: 47
23.04.2020, 23:09  [ТС]
Цитата Сообщение от HotReboot Посмотреть сообщение
Не делайте так. Это очень плохой код.
Посоветуйте, как в такой ситуации сделать хорошим кодом?
0
Супер-модератор
Эксперт JSЭксперт HTML/CSSЭксперт PHP
 Аватар для gogolik
3965 / 2083 / 832
Регистрация: 13.03.2010
Сообщений: 6,880
23.04.2020, 23:30
Makintosh, так там написано как лучше, по мнению юзера...
0
Эксперт PHP
 Аватар для Fedor Vlasenko
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
23.04.2020, 23:39
редирект можно сделать 3 способами
1. header php
2. js
3. метатеги разметки

php лучше здесь так как не происходит отрисовка контента
но вы должны решить проблему (выставлять флаг редиректа), чтобы не попадать в циклическую перзагрузку
дабы так не делать, отправляют на другую страницу, а она уже редиректит назад
0
 Аватар для HotReboot
326 / 227 / 92
Регистрация: 22.04.2017
Сообщений: 1,136
23.04.2020, 23:41
freevoyajer, Потому что вместо того, что бы вебсерверу сразу отдать клиенту код, он отдаёт его php который тупо ничего не делает, а просто транслирует в html, отдаёт обратно веберверу и только потом отдаётся клиенту. И это всего лишь из-за пары символов.
0
1 / 1 / 0
Регистрация: 13.05.2012
Сообщений: 47
24.04.2020, 02:47  [ТС]
Что то я запутался. Объясните, пожалуйста, логику(можно без кода), как правильно делать?
В форме авторизации идет проверка логина и пароля. Если данные верные то происходит перенаправление на приватную страницу. Если данные не верные то рядом с формой ввода появляется текст что логин или пароль неверные.
Если форма html и скрипт в разных файлах то все работает, но сообщение что пароль неверный появляется на новой странице. А если я скрипт пишу в том же файле где и форма, то текст появляется рядом с формой но в случае правильных данных перенаправления не происходит.
0
 Аватар для sad67man
2604 / 1508 / 689
Регистрация: 23.08.2015
Сообщений: 3,834
24.04.2020, 03:53
Makintosh,
Цитата Сообщение от Makintosh Посмотреть сообщение
Если данные верные то происходит перенаправление на приватную страницу. Если данные не верные то рядом с формой ввода появляется текст что логин или пароль неверные.
Рассуждения верные. Проблема в реализации, а именно в вашем коде, который вы так и не показали.
Если вкратце, то у вас должен быть отдельный метод/функция для авторизации. Которая либо выполняется полностью, либо кидает исключение.
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
 
$error = null;
 
try {
    $userId = signIn($login, $password);
    logIn($userId);
    header('Location: /cabinet.php');
    die();
} carch (DomaintException $e) {
    $error = $e->getMessage();
}
 
?>
 
<?php if (!empty($error)): ?>
    <div class="alert alert-danger" role="alert"><?= $error ?></div>
<?php endif ?>
Вывод ошибки можно организовать через сессию прокидывая между страницами. Проверку на обязательность полей и кол-во символов можно проверять снаружи.
0
105 / 57 / 22
Регистрация: 20.12.2009
Сообщений: 1,279
Записей в блоге: 2
24.04.2020, 03:54
Вот рабочая форма с выводом текста и редиректом, без js :
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php ob_start();
   if (isset($_POST['login']) && !empty($_POST['username']) 
               && !empty($_POST['password'])) {            
           $key = $datastore->key('user', $_POST['username']);  
           $user = $datastore->lookup($key);                                  
                   if ($_POST['password'] == $user['password']) {
                  $_SESSION['valid'] = true;
                  $_SESSION['timeout'] = time();
                  $_SESSION['username'] = $_POST['username'];   
                 $_SESSION['userID'] =  $_POST['username'];
                 header('Location: main.php?user='.$_POST['username']);
                  $host  = $_SERVER['HTTP_HOST'];
                  $uri   = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
                  $extra = 'main.php';                   
                  header("Location: http://$host$uri/$extra");           
                  echo 'You have entered valid use name and password';
                  echo "<br>";
                  print_r(error_get_last());
                  echo "<br>";
                  echo "http://$host$uri/$extra";   
                  
                  die;
               }else {
                  $msg =  'User id or password is invalid';
               }
            } ob_end_flush();
         
      ?>
<html lang = "en">   
   <head>
      <title>VladBias.com</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
      <style> 
     
      </style>
      <link href="css/style.css?v1.1" rel="stylesheet">
   </head>
    
   <body>      
      <h2>Enter Username and Password</h2> 
      <div class = "container form-signin">
     </div> <!-- /container -->
      
      <div class = "container">
      
         <form class = "form-signin" role = "form" 
            action = "<?php echo htmlspecialchars($_SERVER['PHP_SELF']); 
            ?>" method = "post">
            <h4 class = "form-signin-heading"><?php echo $msg; ?></h4>
            <input type = "text" class = "form-control" 
               name = "username" placeholder = "username" 
               required autofocus <?php echo  $disabled; ?>></br>
            <input type = "password" class = "form-control"
               name = "password" placeholder = "password" required <?php echo  $disabled; ?>>
            <button class = "btn btn-lg btn-primary btn-block" type = "submit" 
               name = "login"   <?php echo  $disabled; ?> >Login</button>
               <div class="create_new">
                     </div> 
             <a = href=<?php echo  $pwd_link; ?>>Forgot password</a>
         </form>
        
         
      </div>
0
1 / 1 / 0
Регистрация: 13.05.2012
Сообщений: 47
24.04.2020, 10:36  [ТС]
sad67man,
Вот прикладывают пример свой.
Файл admin.php - приватная страница
PHP
1
2
3
4
5
6
7
8
9
10
11
<html><head>
    <title>Панель администратора</title>
</head><body>
<?php
require "auth.php";
?>
 
Это страница администратора<br />
<a href="admin.php?do=logout">Выход</a>
 
</body></html>
Файл enter.php - Форма ввода данных и проверка пароля
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<html><head>
<title>Авторизация</title>    
    
</head>
<body>
Это страница авторизации.
<br>
<?php
session_start();
 
if($_SESSION['admin']){
    header("Location: admin.php");
    exit;
}
 
$admin = 'a';
$pass = 'c4ca4238a0b923820dcc509a6f75849b';
 
if($_POST['submit']){
    if($admin == $_POST['user'] AND $pass == md5($_POST['pass'])){
        $_SESSION['admin'] = $admin;
        header("Location: admin.php");
        exit;
    }else echo '<p>Логин или пароль неверны!</p>';
}
?>
<br />
<form method="post">
    Username: <input type="text" name="user" /><br />
    Password: <input type="password" name="pass" /><br />
    <input type="submit" name="submit" value="Войти" />
</form>
</body>
</html>
Файл auth.php - Проверка авторизации

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
session_start();
 
if($_GET['do'] == 'logout'){
    unset($_SESSION['admin']);
    session_destroy();
}
 
if(!$_SESSION['admin']){
    header("Location: enter.php");
    exit;
}
?>
Если пароль неверный, то рядом с формой появляется предупреждение. Если пароль верный то форма исчезает а редиректа на admin.php не происходит.

Если делать редирект через javascript тогда не передаются сессии.

Добавлено через 25 минут
Даже если не смотреть на авторизация и проверку паролей а сделать вот так:

index.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<html><head>
<title>Авторизация</title>    
    
</head>
<body>
Это страница авторизации.
<br>
<?php
 
    header("Location: admin.php");
    exit;
 
?>
<br />
<form method="post">
    Username: <input type="text" name="user" /><br />
    Password: <input type="password" name="pass" /><br />
    <input type="submit" name="submit" value="Войти" />
</form>
</body>
</html>
То редиректа не происходит
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
24.04.2020, 10:43
Цитата Сообщение от Makintosh Посмотреть сообщение
Даже если не смотреть на авторизация и проверку паролей а сделать вот так:
index.php
а то, что у вас находится до 8 строчки вас совершенно не смущает? Собственно, во всех файлах у вас в этом и проблема - до отправки заголовков функцией header вы уже выводите пачку html.
Цитата Сообщение от Makintosh Посмотреть сообщение
JavaScript
1
2
3
4
function func() {
    document.location.href = "index.html"
  }
  func();
функция ради функции что ли ? Почему просто не написать
JavaScript
1
document.location.href = "index.html"
?
0
1 / 1 / 0
Регистрация: 13.05.2012
Сообщений: 47
24.04.2020, 10:47  [ТС]
KOPOJI,
Я и пытаюсь понять принцип как правильно. Если делать через javascript как в 3, 4 сообщении, то не происходит передачи сессии.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
24.04.2020, 10:53
Цитата Сообщение от Makintosh Посмотреть сообщение
как правильно
Правильно, как говорится, отделять мух от котлет. PHP-код должен выполняться до того, как будет формироваться и выводиться вывод HTML.
Цитата Сообщение от Makintosh Посмотреть сообщение
то не происходит передачи сессии
она бы происходила, но... Но тут точно та же самая проблема: запуск механизма сессий (session_start()) тоже является отправкой заголовков, а вы все заголовки отправляете уже после того, как вывели часть html, ибо:
Цитата Сообщение от Makintosh Посмотреть сообщение
PHP/HTML
1
2
3
4
5
6
<html><head>
    <title>Панель администратора</title>
</head><body>
<?php
require "auth.php";
?>
0
1 / 1 / 0
Регистрация: 13.05.2012
Сообщений: 47
24.04.2020, 10:56  [ТС]
KOPOJI,
Вот оказывается в чем проблема. Я думал что до редиректа нельзя выводить другие заголовки в коде php, а оказывается нельзя и html выводить. Вы и пример кода Supersumestria, навели меня кажется на правильный путь.
php код вставлять в начало страницы. А в том месте html, где нужно вывести результат работы php, просто пишем
PHP
1
<?php echo $result;?>
Я все правильно понял?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
24.04.2020, 11:01
Лучший ответ Сообщение было отмечено Makintosh как решение

Решение

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
session_start();
 
if($_SESSION['admin']){
    header("Location: admin.php");
    exit;
}
 
$admin = 'a';
$pass = 'c4ca4238a0b923820dcc509a6f75849b';
 
$message = ''; 
if($_POST['submit']){
    if($admin == $_POST['user'] AND $pass == md5($_POST['pass'])){
        $_SESSION['admin'] = $admin;
        header("Location: admin.php");
        exit;
    }else $message = '<p>Логин или пароль неверны!</p>';
}
?><html><head>
<title>Авторизация</title>    
    
</head>
<body>
Это страница авторизации.
<br>
<?=$message;?>
<br />
<form method="post">
    Username: <input type="text" name="user" /><br />
    Password: <input type="password" name="pass" /><br />
    <input type="submit" name="submit" value="Войти" />
</form>
</body>
</html>

Не по теме:

P.S. При включенных ошибках всех уровней могут посыпаться и нотисы.. Но да ладно



Добавлено через 1 минуту
Цитата Сообщение от Makintosh Посмотреть сообщение
Я все правильно понял?
Да, в общих чертах, именно так. Учтите, под "выводом" в данном случае понимается любой вывод - HTML, символы (даже пробелы, переводы строк и т.п.), метка BOM и т.п. - если что-то из этого есть перед открывающим тегом <?php, то вы получите ошибку (директива PHP output_buffering может частично решить эту проблему, но на нее лучше не полагаться а делать нормально)

Добавлено через 2 минуты
Цитата Сообщение от Makintosh Посмотреть сообщение
до редиректа нельзя выводить другие заголовки в коде php
а вот это как раз не так. Вы можете спокойно формировать и редиректы, и заголовки в коде PHP. Просто смысла от этого как бы нет. Зачем, если в итоге будет выполнен переход на другую страницу?
1
1 / 1 / 0
Регистрация: 13.05.2012
Сообщений: 47
24.04.2020, 11:06  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
а вот это как раз не так. Вы можете спокойно формировать и редиректы, и заголовки в коде PHP. Просто смысла от этого как бы нет. Зачем, если в итоге будет выполнен переход на другую страницу?
Например если редирект происходит по условию. Т.е. если неправильный пароль то выводится текст, а если правильный пароль, то редирект. И вот перед выводом текста я отправляю
PHP
1
header('Content-Type: text/html; charset=utf-8');
для правильно кодировки текста.

Возможно тоже глупость, то там так много нюансов и подводных камней, что новичку все учесть невозможно.
0
 Аватар для sad67man
2604 / 1508 / 689
Регистрация: 23.08.2015
Сообщений: 3,834
24.04.2020, 11:10
Makintosh, Вы должны сначала обработать входящий запрос $_POST, сделать операцию авторизации и отправить заголовки до какого-либо вывода. Не нужно этого делать посреди html кода. В контексте html кода php играет роль простого шаблонизатора, где данные уже заранее подготовлены для вывода и нужно их просто подставить. В шаблоне не должно быть никакой бизнес логики, обращений к суперглобальным массивам или Базе данных. Так же вы не должны маневрировать бизнес логикой за счет подключения файлов. Это нужно делать вызовами функций.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.04.2020, 11:10
Помогаю со студенческими работами здесь

Как сделать перенаправление на главную страницу?
вот у меня эта фун-я: if ($diff&gt;30) { include(&quot;del.php&quot;); Header(&quot;Location:index.php&quot;);} но ничего не происходит, кстати в этом же...

Создать php страницу через другую php страницу
Всем привет. Я пытаюсь написать страницу, которая по заданному шаблону должна создавать другие страницы на сервере. Вот её код: ...

Одноразовая пересылка на другую страницу
if ($wierszy == 1 )/// The count of today {header(&quot;Location: application/page_app.php?id=$m&quot;);} как создать пересылку которая будет...

Автоматический переброс на другую страницу
Добрый день. Есть сайт, с ЛК. Суть в чем, нужно если пользователь не авторизован, то перейдя по ссылке /project/lk.php его автоматически...

Проблемы с перенаправлением на другую страницу
привет! ести проблемка, я делаю страницу голосование /опрос, на первой странице пользователь вводит свой уникальный код (получает по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru