Hej, witam Was. Ostatnio zabrałem się za książkę wydawnictwa Helion pt: “Projektowanie Systemów CMS przy Użyciu PHP i JQUERY”.
Nikt tego nie ściągnie, wstaw fragment kodu, który podejrzewasz, o niepoprawne działanie. Użyj znacznika code.
Być może jest to plik admin_libs.php, który sprawdza czy sesja jest adminem i tak dalej.
?php
require $_SERVER['DOCUMENT_ROOT'].'/mt.incs/basics.php';
function is_admin(){
if(!isset($_SESSION['userdata']))return false;
if(
isset($_SESSION['userdata']['groups']['_administrators']) ||
isset($_SESSION['userdata']['groups']['_superadministrators'])
)return true;
if(!isset($_REQUEST['login_msg']))$_REQUEST['login_msg']='permissiondenied';
return false;
}
if(!is_admin()){
require SCRIPTBASE.'mt.admin/login/login.php';
exit;
}
?
Albo plik login.php.
?php
require SCRIPTBASE.'mt.incs/recaptcha.php';
$captcha=recaptcha_get_html(RECAPTCHA_PUBLIC);
?
html
head
titleLogowanie/title
script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"/script
script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.0/jquery-ui.min.js"/script
link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.0/themes/south-street/jquery-ui.css" /
script src="/mt.admin/login/login.js"/script
link rel="stylesheet" type="text/css" href="/mt.admin/login/login.css" /
meta http-equiv="Content-Type" content="text/html; charset=utf-8"/head
body
div id="header"/div
?php
if(isset($_REQUEST['login_msg'])){
require SCRIPTBASE.'mt.incs/login-codes.php';
$login_msg=$_REQUEST['login_msg'];
if(isset($login_msg_codes[$login_msg])){
echo 'script$(function(){$("strong'
.htmlspecialchars($login_msg_codes[$login_msg])
.'/strong").dialog({modal:true});});/script';
}
}
?
div class="tabs"
ul
lia href="#tab1"Logowanie/a/li
lia href="#tab2"Przypomnienie hasła/a/li
/ul
div id="tab1"
form method="post" action="/mt.incs/login.php?redirect=?php echo $_SERVER['PHP_SELF'];?"
table
trthe-mail/thtdinput id="email" name="email" type="email" //td/tr
trthhasło/thtdinput type="password" name="password" //td/tr
tr id="captcha"thcaptcha/thtd?php echo $captcha; ?/td/tr
trth colspan="2" align="right"input name="action" type="submit" value="zaloguj" class="login" //th/tr
/table
/form
/div
div id="tab2"
form method="post" action="/mt.incs/password-reminder.php?redirect=?php echo $_SERVER['PHP_SELF'];?"
table
trthe-mail/thtdinput id="email" type="text" name="email" //td/tr
trth colspan="2" align="right"input name="action" type="submit" value="wyślij mi moje hasło" class="login" //th/tr
/table
/form
/div
/div
/body
/html
Albo login.php z innego folderu.
?php
require 'login-libs.php';
login_check_is_email_provided();
//sprawdzenie czy podano hasło
if(!isset($_REQUEST['password'])|| $_REQUEST['password']==''){
login_redirect($url,'nopassword');
}
login_check_is_captcha_provided();
login_check_is_captcha_valid();
//sprawdzenie czy podana kombinacja hasła i adresu e-mail pasuje do użytkownika
$password=md5($_REQUEST['email'].'|'.$_REQUEST['password']);
$r=dbRow('select * from user_accounts where email="'.addslashes($_REQUEST['email']).'" and password="'.$password.'" and active');
if($r==false){
login_redirect($url,'loginfailed');
}
// powodzenie! utworzenie zmiennej sesji i dokonanie przekierowania
$_SESSION['userdata']=$r;
$groups=json_decode($r['groups']);
$_SESSION['userdata']['groups']=array();
foreach($groups as $g)$_SESSION['userdata']['groups'][$g]=true;
if($r['extras']=='')$r['extras']='[]';
$_SESSION['userdata']['extras']=json_decode($r['extras']);
login_redirect($url);
'select * from user_accounts where email="'.addslashes($_REQUEST['email']).'" and password="'.$password.'" and active'
1. Niektóre bazy mogą takiego czegoś nie wspierać, chodzi o “and active”
http://stackoverflow.com/questions/859762/is-this-the-proper-way-to-do-boolean-test-in-sql
-
Pokaż kod dodający administratora do bazy
-
Włącz powiadamianie o błędach - może jakieś się generują?
Ps dużo funkcji jest “opkaowane” (dbRow, login_redirect, etc.) i strasznie kiepsko się to czyta. Nie wiem czy nie lepiej byłoby to samemu od początku napisać w prostszy sposób.
Nie potrafiłbym napisać tego sam.
Czyli jak rozumiem, póki co przepisujesz książkę i jak coś zadziała to się cieszysz. Coś jak uczenie się jazdy na rowerze, patrząc jak robią to inni?
Ściągnąłem ten plik .rar i ogólnie jeśli taki bełkot jest w tej książce to bym za nią 5 groszy nie dał. Znalazłem coś, co może być przyczyną błędów (raczej jest na pewno), ale może to nie być jedyny błąd i nie naprawi wszystkiego
--
-- Zrzut danych tabeli `user_accounts`
--
INSERT INTO `user_accounts` (`id`, `email`, `password`, `active`, `groups`, `activation_key`, `extras`) VALUES
(3, 'mateusz@gmail.com', '202cb962ac59075b964b07152d234b70', 1, '["_superadministrator"]', NULL, NULL),
(4, 'mt@gmail.com', '81dc9bdb52d04dc20036dbd8313ed055', 1, '[]', NULL, NULL);
...
//powodzenie. Utworzenie zmiennej sesji i dokonanie przekierowania
$_SESSION['userdata']=$r;
$groups=json_decode($r['groups']);
$_SESSION['userdata']['groups']=array();
foreach($groups as $g)$_SESSION['userdata']['groups'][$g]=true;
if($r['extras']=='')$r['extras']='[]';
$_SESSION['userdata']['extras']=json_decode($r['extras']);
function is_admin(){
if(!isset($_SESSION['userdata']))return false;
if(
isset($_SESSION['userdata']['groups']['_administrators']) ||
isset($_SESSION['userdata']['groups']['_superadministrators']
))return true;
if(!isset($_REQUEST['login_msg'])) $_REQUEST['login_msg']='permissiondenied';
return false; }
if(!is_admin()){
require SCRIPTBASE.'mt.admin/login/login.php';
exit;
}
Jako, że nie lubię dawać ryby: Znajdź błąd ograniczając się do tych fragmentów.
PS
-
Przechowywanie group jako wielu wartości w formacie json jest beznadziejne (poszukaj czemu nie należy tak robić)
-
Zapisanie uprawnień na sztywno to kastracja wszelkich znamion CMS-u
Nie przepisuje książki na sztywno. Czytam czego dotyczą rzeczy w niej zawarte oraz jak działają.
Cóż podpowiem, tylko bo faktycznie może ci to zająć: singular vs plural.
_superadministrators =/= _superadministrator. Tak?
Niestety logowanie nadal nie działa. Proszę kogokolwiek o pomoc
Proszę korzystać z opcji Edytuj , zamiast pisać post pod postem.
rgabrysiak