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

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

21.04.2020, 17:56. Показов 5882. Ответов 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,271
Записей в блоге: 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
3947 / 2054 / 829
Регистрация: 13.03.2010
Сообщений: 6,752
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
2603 / 1507 / 689
Регистрация: 23.08.2015
Сообщений: 3,814
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,271
Записей в блоге: 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
2603 / 1507 / 689
Регистрация: 23.08.2015
Сообщений: 3,814
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
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru