PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Без описания
Поиск в теме | Версия для печати
Каролина
Отправлено: 08 Сентября, 2012 - 08:55:56
Частый гость
Покинул форум
Сообщений всего: 241
Дата рег-ции: Дек. 2011
Откуда: от верблюдика
Помог: 0 раз(а)
[+][+]
помогите со скриптом ну неработает он
http://nashclas[dot]tk/admin/
PHP:
скопировать код в буфер обмена
<?PHP
function echo2( $expression ) {
echo '<pre>' . print_r ( $expression , 1 ) . '</pre>' ; }
// это массив таблица записи пользователей. пароль хранится как буто в закрытом виде хеш мд5
array ( 'login' => 'LogniZ1' , 'name' => 'Задания' , 'pass' => 'PassiZ' ) , array ( 'login' => 'LognidzX1' , 'name' => 'Д/З' , 'pass' => 'PassidzX2' ) , array ( 'login' => 'LoginisF01' , 'name' => 'Фото' , 'pass' => 'PassisF02' ) ) ;
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 ;
}
}
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>
caballero
Отправлено: 08 Сентября, 2012 - 09:42:16
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011
Откуда: Харьков
Помог: 126 раз(а)
отформатируй по человечески и увидишь где у тебя скобки не закрываютсся
PHP:
скопировать код в буфер обмена
<?PHP
function echo2( $expression )
{
echo '<pre>' . print_r ( $expression , 1 ) . '</pre>' ; }
// это массив таблица записи пользователей. пароль хранится как буто в закрытом виде хеш мд5
array ( 'login' => 'LogniZ1' , 'name' => 'Задания' , 'pass' => 'PassiZ' ) , array ( 'login' => 'LognidzX1' , 'name' => 'Д/З' , 'pass' => 'PassidzX2' ) , array ( 'login' => 'LoginisF01' , 'name' => 'Фото' , 'pass' => 'PassisF02' ) ) ;
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 ;
}
}
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>
Каролина
Отправлено: 08 Сентября, 2012 - 22:01:13
Частый гость
Покинул форум
Сообщений всего: 241
Дата рег-ции: Дек. 2011
Откуда: от верблюдика
Помог: 0 раз(а)
[+][+]
сделала еще один код как вам ток он не работает чета
PHP:
скопировать код в буфер обмена
<?PHP
// это файл 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 {
}
}
/**
* Устанавливает учетную запись в сессию.
* Эта функция пока простая. Но для очевидности вынесена сюда.
* @param array $user - учетная запись пользователя, которая подтверждена введенным паролем. Все поля кроме пароля рекомендуется.
*/
function current_user_set
( array $user ) { $_SESSION [ 'user' ] = $user ;
}
// это массив таблица записи пользователей. вместо записей таблицы "users" базы данных.
// в таблице пользователей не должно быть ничего лишнего.
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 ( ) ; // сообщения которые нужно вывести после субмита. лучше всего расположить их в шаблоне рядом с кнопкой. жирным шрифтом. // оба масива будут преобразованы в строку в шаблоне.
extract ( $_POST , EXTR_SKIP
) ; // извлекаем все переменные, из поста (не заменяя существующие). // $login, $pass, $go
$logout_disabled = 'disabled' ;
} else {
// переменные, которые должны быть объявлены для подстановки в форму если нет поста (если есть пост, эти переменные будут извлечены из поста extract).
$login = '' ;
$logout_disabled = 'disabled' ;
}
// когда было нажато на кнопку выход
header ( 'Location: ' . $_SERVER [ 'REQUEST_URI' ] ) ; // переходим на гет текущей. }
// значит нажато на кнопку $go
// проверяем совпадение пары логин пароль. переменная $user будет установлена значением соответсвующейзаписи из таблицы пользователей,
// или не будет установлена при несовпадении пары логин-пароль.
// цикл по каждой записи и проверка совпадения логина и пароля одновременно.
foreach ( $users as $record ) {
if ( $login == $record [ 'login' ] && $pass == $record [ 'pass' ] ) {
$user = $record ; // логин пароль совпал
break ; // поиски можно не продолжать, так как запись найдена. (база данных должна гарантировать что только поле логин уникальное)
}
}
// можно ничего не делать, но в форму передать сообщение необходимо.
$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 ..;
?>
OrmaJever
Отправлено: 08 Сентября, 2012 - 23:47:04
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010
Откуда: Чернигов
Помог: 299 раз(а)
Господи я понимаю что нужно быть вежливым и всё такое но иногда так бесят тупые люди, которые не видят и не понимают элементарного.
Каролина что не понятно что в последних трёх строках фигурная скобка не закрыта?
(Отредактировано автором: 08 Сентября, 2012 - 23:47:44)
-----Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
Поиск в теме | Версия для печати
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
Powered by ExBB FM 1.0 RC1. InvisionExBB