[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Переадресация
Каролина
есть такой код который должен перенаправлять на 3 страницы. на 1 стр перенаправляет на 2 и 3 нет там на странице указаны лог и пароль если что http://nashclas.tk/admin/
<?php
function
echo2($expression){
echo '<pre>'.print_r($expression, 1).'</pre>';
}

session_start();

// это массив таблица записи пользователей. пароль хранится как буто в закрытом виде хеш мд5
$users = array(
array('login'=>'LogniZ1', 'name'=>'Задания','pass'=>'PassiZ') ,
array('login'=>'LognidzX1', 'name'=>'Д/З', 'pass'=>'PassidzX2'),
array('login'=>'LoginisF01', 'name'=>'Фото', 'pass'=>'PassisF02')
);





if(count($_POST)){
$submit_msg = array();
echo2($_POST);
extract($_POST, EXTR_SKIP); // извлекаем все переменные, они будут по имени name формы (в том числе переменная $go но она и не нада)
echo2('login:'.$login);
echo2('pass:'.$pass);

foreach($users as $record){
if($login == $record['login'] && $pass == $record['pass']){
$user = $record; // логин пароль совпал
break;
}
}


if(isset($user)){
echo2($user);
$is_admin = strpos($user['role'], 'admin') !== false; // true - админь, false, простой смертный.
$_SESSION['is_admin'] = $is_admin; // на страницах админа проверять например так:
if(!$_SESSION['is_admin']===true){//от винта};
$_SESSION['name'] = $user['name']; // а это напрмпер отображать имя текущего пользователя.
if($users[0])
header('Location:http://nashclas.tk/admin/zadania/'); // куда направляться после логина. }
elseif ($users[1])
header('Location:http://nashclas.tk/admin/d.z/'); // куда направляться после логина. }
elseif ($users[2])
header('Location:http://nashclas.tk/admin/foto/'); // куда направляться после логина. }


} else {
$submit_msg[] = 'пользователь с таким логином и паролем не найден.';
$submit_msg[] = "попробуйте бла бла бла";
}
$msg = implode('<br>', $submit_msg);
} else {
// переменные для подстановки в форму.
$login = '';

$msg = '';
}
?>

<form method="post">
<
fieldset><label for="login">Логин</label>:<br>
<
input type="text" id="login" name="login" value="<?=$login?>"><br>
<
label for="pass">Пароль</label>:<br>
<
input type="password" id="pass" name="pass"><br>
<
input type="submit" id="go" name="go" value="Login"><br>
</
fieldset>
<?=$msg?></form>





Спустя 4 минуты, 42 секунды (3.09.2012 - 21:49) Игорь_Vasinsky написал(а):
у тяя вывод выше заголовков. редирект не сработает пока не уберёшь.

умело, хвалю.
$msg = implode('<br>', $submit_msg);


а вот тут опять печалька.. в качестве аргумента хитрое слово, а название функции лажа
function echo2($expression){


а такое даже я ещё не ризу не использовал
extract($_POST, EXTR_SKIP);

Спустя 3 минуты, 56 секунд (3.09.2012 - 21:53) Каролина написал(а):
Цитата (Игорь_Vasinsky @ 3.09.2012 - 19:49)
у тяя вывод выше заголовков. редирект не сработает пока не уберёшь.


в каком смысле

Спустя 32 секунды (3.09.2012 - 21:54) Каролина написал(а):
что убрать кого убрать

Спустя 2 минуты, 43 секунды (3.09.2012 - 21:56) Игорь_Vasinsky написал(а):
ты даже ошибки не получаешь???

это закомментируй

echo '<pre>'.print_r($expression, 1).'</pre>';


в начале скрипта

error_reporting(E_ALL);

Спустя 2 минуты, 37 секунд (3.09.2012 - 21:59) Каролина написал(а):
http://nashclas.tk/admin/ вывело ошибку

Спустя 1 минута, 17 секунд (3.09.2012 - 22:00) Каролина написал(а):
Цитата (Игорь_Vasinsky @ 3.09.2012 - 19:56)


echo '<pre>'.print_r($expression, 1).'</pre>';



что это я только пользуюсь сказали что так лучше выводит точно не врубились но рекомендовали

Спустя 20 часов, 46 минут, 10 секунд (4.09.2012 - 18:46) Каролина написал(а):
так кто поможет что делать

Спустя 12 часов, 50 минут, 37 секунд (5.09.2012 - 07:37) Bezdna написал(а):
Цитата (Каролина @ 4.09.2012 - 19:46)
так кто поможет что делать


Помочь себе можешь только ты сама. И пока ты будешь тупо копировать чужие куски кода, не понимая их смысл, думаю вряд ли что-нибудь получится.

Спустя 59 минут, 9 секунд (5.09.2012 - 08:36) Игорь_Vasinsky написал(а):
согласен. надоело.

снимаю тебя с бюджетного обучения.
тока платное. так что решай вопросы с родителями и обсудим стоимость обучения, длительность, содержание.

Спустя 10 часов, 11 минут, 13 секунд (5.09.2012 - 18:47) Каролина написал(а):
хахаха все просят помощи и вы даете ее бесплатно че мне та платно придется

Спустя 2 дня, 14 часов, 6 минут, 32 секунды (8.09.2012 - 08:54) Каролина написал(а):
ну так блин помогите, ну незнаю как сделать

<?php

function
echo2($expression){
echo '<pre>'.print_r($expression, 1).'</pre>';
}
error_reporting(E_ALL);
session_start();

// это массив таблица записи пользователей. пароль хранится как буто в закрытом виде хеш мд5
$users = array(
array('login'=>'LogniZ1', 'name'=>'Задания','pass'=>'PassiZ') ,
array('login'=>'LognidzX1', 'name'=>'Д/З', 'pass'=>'PassidzX2'),
array('login'=>'LoginisF01', 'name'=>'Фото', 'pass'=>'PassisF02')
);





if(count($_POST)){
$submit_msg = array();
echo2($_POST);
extract($_POST, EXTR_SKIP); // извлекаем все переменные, они будут по имени name формы (в том числе переменная $go но она и не нада)
echo2('login:'.$login);
echo2('pass:'.$pass);

foreach($users as $record){
if($login == $record['login'] && $pass == $record['pass']){
$user = $record; // логин пароль совпал
break;
}
}


if(isset($user)){
echo2($user);
$is_admin = strpos($user['role'], 'admin') !== false; // true - админь, false, простой смертный.
$_SESSION['is_admin'] = $is_admin; // на страницах админа проверять например так:


if(!$_SESSION['is_admin']===true){//от винта};
$_SESSION['name'] = $user['name']; // а это напрмпер отображать имя текущего пользователя.
if($users[0])
header('Location:http://nashclas.tk/admin/zadania/'); // куда направляться после логина. }
elseif ($users[1])
header('Location:http://nashclas.tk/admin/d.z/'); // куда направляться после логина. }
elseif ($users[2])
header('Location:http://nashclas.tk/admin/foto/'); // куда направляться после логина. }


} else {
$submit_msg[] = 'пользователь с таким логином и паролем не найден.';
$submit_msg[] = "попробуйте бла бла бла";
}
$msg = implode('<br>', $submit_msg);
} else {
// переменные для подстановки в форму.
$login = '';

$msg = '';
}
?>
<form method="post">
<
fieldset><label for="login">Логин</label>:<br>
<
input type="text" id="login" name="login" value="<?=$login?>"><br>
<
label for="pass">Пароль</label>:<br>
<
input type="password" id="pass" name="pass"><br>
<
input type="submit" id="go" name="go" value="Login"><br>
</
fieldset>
<?=$msg?></form>

Спустя 6 часов, 17 минут, 24 секунды (8.09.2012 - 15:11) Shuriken написал(а):
У тебя не хватает одной закрывающейся фигурной скобки.

Здесь
  echo2($user);
ты выводишь данные, а далее пишешь заголовок
header('Location:http://nashclas.tk/admin/zadania/');

Заголовок должен быть до каких-либо выводов в браузеров

Спустя 6 часов, 48 минут, 56 секунд (8.09.2012 - 22:00) Каролина написал(а):
сделала код получше как вам

<?php
error_reporting(E_ALL);
// это файл login.php
// здесь не должно быть хтмл кода. для хтмл используется соответствующий файл login.htm.php

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

function echo2($expression){
echo '<pre>'.print_r($expression, 1).'</pre>';
}

// эта функция для того чтобы на всех страницах однообразно проверять статус пользователя. ее также нужно поместить в файл который всегда запускается первым,
// или копировать на все страницы, где нужно проверять авторизованность пользователя.

/**
* Возвращает учетную запись пользователя если пользователь авторизован или пустой массив, если не авторизован.
*/

function current_user_get(){
if(isset($_SESSION['user']['login'])){
return $_SESSION['user'];
} else {
return array();
}
}



/**
* Устанавливает учетную запись в сессию.
* Эта функция пока простая. Но для очевидности вынесена сюда.
*
@param array $user - учетная запись пользователя, которая подтверждена введенным паролем. Все поля кроме пароля рекомендуется.
*/

function current_user_set(array $user){
$_SESSION['user'] = $user;
}


// это массив таблица записи пользователей. вместо записей таблицы "users" базы данных.
// в таблице пользователей не должно быть ничего лишнего.

$users = array(
array('name'=>'Вася', 'login'=>'vasya', 'pass'=>'PassiZ', 'role'=>'admin'),
array('name'=>'Петя', 'login'=>'petya', 'pass'=>'PassidzX2', 'role'=>'user'),
array('name'=>'Саша', 'login'=>'sasha', 'pass'=>'PassisF02', 'role'=>'user')
);


// начало кода...
$title = 'Вход на сайт'; // будет отрисовано в шаблоне.
$gstate_msg = array(); // сообщения о текущем состоянии формы. лучше расположить это в шаблоне на последнем месте. и шрифт курсив.
$submit_msg = array(); // сообщения которые нужно вывести после субмита. лучше всего расположить их в шаблоне рядом с кнопкой. жирным шрифтом.
// оба масива будут преобразованы в строку в шаблоне.


session_start();



if(count($_POST)){
extract($_POST, EXTR_SKIP); // извлекаем все переменные, из поста (не заменяя существующие).
// $login, $pass, $go

$logout_disabled = 'disabled';
}else {
// переменные, которые должны быть объявлены для подстановки в форму если нет поста (если есть пост, эти переменные будут извлечены из поста extract).
$login = '';
$logout_disabled = 'disabled';
}

if(count($_POST)){
if(isset($logout)){
// когда было нажато на кнопку выход
session_destroy();
header('Location: '.$_SERVER['REQUEST_URI']); // переходим на гет текущей.
exit();
}
// значит нажато на кнопку $go


// проверяем совпадение пары логин пароль. переменная $user будет установлена значением соответсвующейзаписи из таблицы пользователей,
// или не будет установлена при несовпадении пары логин-пароль.
// цикл по каждой записи и проверка совпадения логина и пароля одновременно.

foreach($users as $record){
if($login == $record['login'] && $pass == $record['pass']){
$user = $record; // логин пароль совпал
break; // поиски можно не продолжать, так как запись найдена. (база данных должна гарантировать что только поле логин уникальное)
}
}

if(!isset($user)){
// можно ничего не делать, но в форму передать сообщение необходимо.
$submit_msg[] = 'Пользователь с таким логином и паролем не найден.';
$submit_msg[] = 'Подсказка: вот эти все пользователи, их пароли и роль на сайте:<pre>'.print_r($users, true).'</pre>';

} else {
// запись найдена, потому что в форме был передан верный пароль и логин.
// пользователя можно авторизовать. как признак, в сессию можно установить учетную запись пользователя.
// сессия это временный файл, который связан с конкретным броузером с помощью куков. пхп об этом заботится, предоставляя переменную $_SESSION,
// которая ведет себя как обычный массив.

unset($user['pass']); // чтобы не сохранять пароль в файле сессии. остальное остается. самое важное и ключевое это login, остальное для удобства.
current_user_set($user);
//$current_user = current_user_get();
//$submit_msg[] = $current_user['name'].', вы успешно авторизовались по логину '.$current_user['login'].'. Ваша роль на сайте :'.$current_user['role'].'.';
// так как пользователь изменился успешно, нет смысла отображать сообщение субмита, пользователь увидит его в состоянии,
// когда перейдем на гет хеадером. вообще-то отсюда надо идти на страницу, которая затребовала авторизацию, но этого кода еще нет...

// чтобы сделать так, чтобы пользователь переходил на страницу, которая запросила авторизацию,


if(!isset($_GET['return_uri'])){
header('Location: '.$_SERVER['REQUEST_URI']); // переходим на гет текущей.
} else {
header('Location: '.$_GET['return_uri']); // переходим на гет той страницы которая запросила авторизацию..
}


}
}
else {
// нет поста. отобразить текущее состояние.
$current_user_get = current_user_get(); //
if(count($current_user_get)){
$gstate_msg[] = 'Вы уже авторизованы как "'.$current_user_get['name'].'". Ваша роль на сайте: "'.$current..;
?>


_____________
wmu (U398141202367)
wmr (R321962242752)[SIZE=7][COLOR=purple]
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.