Я работаю над проектом, и мне нужно запустить мою программу на чужом веб-сервере. Это довольно простая страница входа, с которой у меня возникла проблема. Программа работает правильно, если я запускаю ее через локальный хост через WAMP. Проблема, с которой я столкнулась, заключается в том, что часть перенаправления работает неправильно, она проверяет пользователя и запускает сеанс, но когда он получает перенаправление, ничего не происходит.
Я либо делаю что-то неправильно с моим синтаксисом, который, как мне кажется, маловероятен, поскольку он корректно работает с моим локальным хостом. Или, альтернативно, я думаю, что у сервера нет этой функции (не уверен, что можно выбрать, какие модули поддерживаются вашим сервером, хотя я уверен, что это возможно).
Я не знаю, имеет ли это значение, но они используют «cpanel», где я могу получить доступ к файлам и там все в одном каталоге, поэтому, если кто-то может сказать мне, где я ошибаюсь, или предложить альтернативу перенаправлению через «заголовок» «любая помощь была бы весьма признательна. Я огляделся, но кажется, что «заголовок» – стандартная рабочая лошадь.
Вот код, который у меня есть:
if( (!empty($_POST['username'])) && (!empty($_POST['password'])) ) { // username and password sent from Form $myusername = $_POST['username']; $mypassword = $_POST['password']; $sql="SELECT UserName FROM User WHERE UserName='$myusername' and Password='$mypassword'"; $result=mysql_query($sql); $row=mysql_fetch_array($result); //$active=$row['active']; $count=mysql_num_rows($result); // If result matched $myusername and $mypassword, table row must be 1 row if($count==1) { echo "we made if to the if"; session_start(); session_register("myusername"); $_SESSION['login_user']=$myusername; echo "right b4 the re-direct"; header("location: UI.php"); exit; } else echo "Your user name/password was not correct pleast TRY AGAIN!!!"; }
Обновление: в ответ на утверждения об эхо, возможно ли возникновение проблемы, я обрабатываю свою форму в том же файле и используя echo $ _SERVER ['PHP_SELF']
Из документов :
Помните, что
header()
должен быть вызван до отправки любого фактического результата либо с помощью обычных тегов HTML, пустых строк в файле, либо из PHP.
Ваше echo
приводит к сбою переадресации, как и любой другой вывод, отправленный перед заголовком.
Я использую эту функцию для перенаправления …
Это работает во всех ситуациях. Даже если заголовки уже отправлены … или даже javascript отключен ..
function redirect($url) { if (!headers_sent()) { header('Location: '.$url); exit; } else { echo '<script type="text/javascript">'; echo 'window.location.href="'.$url.'";'; echo '</script>'; echo '<noscript>'; echo '<meta http-equiv="refresh" content="0;url='.$url.'" />'; echo '</noscript>'; exit; } }
Используя приведенный ниже код, мы перенаправляем страницу
$page = $_SERVER['REQUEST_URI']; echo '<script type="text/javascript">'; echo 'window.location.href="'.$page.'";'; echo '</script>';
Вы не можете устанавливать заголовки после вывода некоторого текста, так что либо вы перемещаете вызов header
перед echo
(отлично в вашем случае), либо используете буферизацию вывода .
Перенаправление через заголовки является незаконным, если какой-либо контент прошел. Выньте все echo
и это должно сработать. Если вы хотите, чтобы перед перенаправлением появилось сообщение, отображаемое пользователю, вам, скорее всего, придется это сделать с помощью JavaScript через location.href
.
Вероятно, вы уже отправили контент в браузер до отправки заголовка php. Это может быть просто \ n после закрытия php-тега (?>)
Найти место, где генерируется нежелательный вывод, может быть затруднено для больших проектов или длинных строк классов, расширяющих друг друга. Чтобы найти проблему, вы можете сделать это:
error_reporting(E_ALL); ini_set("display_errors", 1); header("Location: https://mydomain.com/myLoginAdress/"); die();
Строгая отчетность об ошибках будет вызывать строку и файл вывода.
echo "<script>window.location.href='yourPage.php'</script>";