Raven1122
16.09.2011, 14:38:19
Witam, mam problem z sesja poniewaz przy zalogowaniu ustawiam sesje $_SESSION['auth'] = 1;, sesja jest ustawiana w pliku board.php, ogolem mam 3 pliki:
board.php
edit.php
delete.php
no i na poczatku edit wpisuje:
if($_SESSION['auth'] = 1){
}
else {
}
lecz za kazdym razem wyskakuje mi brak uprawnien, dlaczego?
longinus_torwaldzki
16.09.2011, 14:42:18
sadistic_son
16.09.2011, 14:44:56
A uzupełniając podpowiedź mojego przedmówcy to to musi się znaleźć przed wysłaniem nagłówków. Innymi słowy przed jakimkolwiek kodem html. Czyli najlepiej na samym początku każdego pliku, który korzysta z sesji.
Raven1122
16.09.2011, 15:12:34
dobra juz rozgryzlem, ale sie pojawil probliem stworzylem plik logout.php:
<?php
$_SESSION['auth'] = 0;
header("location:./index.php"); ?>
no i dobra zmienila sesje auth na wartosc 0, ale jak tylko zmienie index.php na board.php (w linku bez wpisywania hasla) to automatycznie znow robi sie 1. Kod:
$sql = "SELECT userpassword FROM emes_accounts WHERE userlogin = '$login'";
if($pass !== $row['userpassword']){
header ("location:./index.php?password=wrong"); }
else {
$_SESSION['auth'] = 1;
}
?>
Ruio
16.09.2011, 15:24:16
spróbuj zamiast !== użyć !=
edit.
Sprawdzasz na innych stronach czy użytkownik jest zalogowany czy nie ?
Raven1122
16.09.2011, 15:27:10
dalej to samo
Ruio
16.09.2011, 15:30:55
To lepiej zostaw !== i zobacz czy na pewno sprawdzasz na innych podstronach czy użytkownik jest zalogowany
peter13135
16.09.2011, 15:33:30
@Ruio. Co to miało by zmienić

Po pierwsze, nie wiadomo skąd się wzieła u Ciebie zmienna $pass

Ustawienie sesji na 1 jest oczywiste. mianowicie warunek
if($pass !== $row['userpassword']){
jest niespełniony, więc jest wykonywany kod else
A jest dlatego nie spełniony, bo zarówno $row jak i $pass nie istnieje, więc są takie same (być może coś przekombinowałem)
Raven1122
16.09.2011, 15:33:36
na kazdej stronie przed trescia jest:
<?php
if(isset($_SESSION['auth']) and
$_SESSION['auth'] == '1'){
}
else {
}
?>
ale i tak pokazuje dana strone o.O
Ruio
16.09.2011, 15:37:14
sam nie wiem

Zasugerowałem się czymś ale już sam nie wiem czym ...
raven sprawdź jaką wartość mają zmienne podane przez petera i powinieneś rozwiązać problem
Raven1122
16.09.2011, 15:44:54
zmienna pass jest troszke przed kodem ktory podalem $pass = $_POST['pass'];
peter13135
16.09.2011, 15:47:26
przeanalizuję Twój kod linia po linii, aby ukazać Ci jego bezsensowność.
linia 1 :
ot zwykłe zapytanko mysql. Do którego wrzucasz nie istniejącą zmienną login.
linia 2:
tutaj nie mam się do czego przyczepić
linia 3: skąd wiesz, że user podał prawidłowy login (pomijająć, że ten $login nie istnieje, ale może masz stare php) i zmienna $row istnieje ?
linia 4:
-ani jednego błędu ;D
linia 5: to co pisałem wcześniej. zmienna pass nie istnieje i porównujesz ją z wartością z bazy... któta też może nie istnieć
dalej wszystko ok.
jeszcze taka jedna duża uwaga. Dlaczego ten kod wykonujesz zawsze, nawet jeśli user nie wysłał danych do logowania przez formularz ?
edit:// ten post zacząłem pisać zanim zobaczyłem powyższy post. Jak chcesz otrzymać dobrą odpowiedź to daj od razu wszelkie dane a nie później się okazuje, że było jeszcze coś.
No więc... załóżmy, że $login jest prawidłowa, $pass również. Dane się pobierają jak trzeba jest ustawiana sesja na 1 i jest git.
Jeśli hasło jest złe, a login dobry to przekierowuje gdzieś indziej
Jeśli login jes zły, to hasło jest porównywane z nieistniejącą zmienną
Jeślli brak jest żadnych danych (loginu i hasła) to zapytanie jest nieprawidłowe, $row i $pass są puste, a więc takie same, więc warunek nie jest spełniony i idzie do bloku else - to Ci napisałem już w pierwszym poście, czy dalsze posty były konieczne ?
Raven1122
16.09.2011, 18:08:42
no dobra, dodalem juz sprawdzenie czy informacje z pola nie sa puste, no ale znowu kolejny problem. po przejsciu dalej (kliknieciu zaloguj w forularzu) przenosi mnie na strone board.php. nastepnie klikam w menu edytuj tresc strony, a gdy juz chcialem znowu powrocic do board.php mowi zebym wypelnil wszystkie pola
Kod:
<?php
$login = $_POST['login'];
$pass = $_POST['pass'];
$sql = "SELECT userpassword FROM emes_accounts WHERE userlogin = '$login'";
if ($login != '' and $pass != ''){
if($pass != $row['userpassword']){
header ("location:./index.php?password=wrong"); break;
}
else {
$_SESSION['auth'] = 1;
}
?>
<?php if($_SESSION['auth'] == 1){
}
else {
}
}
else {
echo ("Wypełnij Wszystkie pola"); }
?>
odsiezam
Daiquiri
16.09.2011, 18:37:18
Bo zmienne $login oraz $pass są pobierane z danych wysłanych przez $_POST, których już tam nie ma?
Raven1122
16.09.2011, 18:43:42
a jak to naprawic, zeby to dzialalo?
Daiquiri
16.09.2011, 18:45:24
Zmienić warunek na taki, który będzie korzystał z danych $_SESSION.
I tak na marginesie, proszę zapoznać się i zastosować do wskazówek:
Temat: Jak poprawnie zatytulowac watek
Raven1122
16.09.2011, 18:55:11
a moglbym prosic o jakies rozwiazanie? bo kompletnie nie wiem jak mam to zrobic ;/
peter13135
16.09.2011, 18:59:44
znowu jakieś bzdury napisałeś w swoim kodzie.
Przypisujesz do zmiennych login i pass dane z tablicy $_POST bez sprawdzenia czy te dane istnieją (podpowiem, że możesz użyć funkcji isset)
potem wykonujesz zapytanie (bez upewnienia się czy zostały wysłane dane)
następnie sprawdzasz czy zmienne pass i login są puste, jeśli tak to wyświeltasz komunikat wypełnij wszystkie pola - po co Ci było potrzebne używać mysql_query, skoro i tak nic z bazy nie pobierasz w tym przypadku

?
dalej.. po co "zamykasz skrypt" by go potem otworzyć ?
mam na myśli
?><?php
Raven1122
16.09.2011, 19:02:31
jak to nie sprawdzam czy nie sa puste?
a to to co? ;p
if ($login != '' and $pass != ''){
peter13135
16.09.2011, 19:04:50
yyy, a gdzie ja napisałem, że nie sprawdzasz ?
Raven1122
16.09.2011, 19:06:21
zle zrozumialem, sorry ;p ale kurcze, jak rozwiazac ten problem?
freemp3
16.09.2011, 19:06:29
Daiquiri-emu zapewne chodzi o to, żebyś cały kod logowania wziął w warunek sprawdzający czy dane $_POST istnieją czyli:
Kod
if(isset($_POST['login]) && isset($_POST['pass']))
{
// Kod logowania
}
Raven1122
16.09.2011, 19:10:22
jak obialem kod tym co podales free to wyskoczyl blad:
Parse error: syntax error, unexpected T_BOOLEAN_AND, expecting ',' or ')' in /home/emes/public_html/pa/board.php on line 11
dobra juz poprawilem ten blad
peter13135
16.09.2011, 19:11:51
Już chyba 3 razy Ci pisałem co masz źlę (z tym sprawdzaniem) na różne sposoby. Przeczytaj uważnie, popraw i będzie działało. Ja nie wiem jak tak można.... ja Ci piszę co masz źle, a ty na to odpowiadasz "no dobra ale jak rozwiązać problem?". To po cholerę ja to piszę

kolega wyżej dał Ci gotowca. Popraw tylko nawiasy.
Raven1122
16.09.2011, 19:12:21
i jak obialem konstrukcja if kod do logowania to powtorka z rozrywki bo znowu dopisujac board.php moge wejsc bez podawania hasla
juz kompletnie sie pogubilem ;/
<?php
if(isset($_POST['login']) && isset($_POST['pass'])){
$login = $_POST['login'];
$pass = $_POST['pass'];
$sql = "SELECT userpassword FROM emes_accounts WHERE userlogin = '$login'";
if ($login != '' and $pass != ''){
if($pass != $row['userpassword']){
header ("location:./index.php?password=wrong"); }
else {
$_SESSION['auth'] = 1;
}
if($_SESSION['auth'] == 1){
}
else {
}
}
else {
echo ("Wypełnij Wszystkie pola"); }
}
?>
peter13135
16.09.2011, 19:21:45
w poprzednim poście pisałem:
Cytat
prawdzasz czy zmienne pass i login są puste, jeśli tak to wyświeltasz komunikat wypełnij wszystkie pola - po co Ci było potrzebne używać mysql_query, skoro i tak nic z bazy nie pobierasz w tym przypadku ?
WYpadało by to poprawić
Dodam do tego jeszcze, że wcięcia ułatwiły by nam i Tobie analizę kodu.
Pokaż ten plik board, to wtedy się zobaczy.
freemp3
16.09.2011, 19:22:40
Raven1122 dam Ci małą radę. Jeśli coś nie działa tak jak chcemy i zaczynamy powoli gubić się w kodzie to jest na to super sposób. Wywalić wszystko (lub skopiować gdzieś na bok w razie gdyby nas oświeciło) i napisać jeszcze raz od początku.
Zrób plik board.php mniej więcej tak:
1. Start sesji na samym początku pliku - funkcja session_start();
2. Sprawdź czy dostałeś dane z formularza tym warunkiem który podałem wyżej (z poprawionymi nawiasami

)
2.1 Jesli dostałeś dane z formularza połącz się z bazą i wyciągnij odpowiednie dane (jeśli będziesz korzystał z bazy umieść połączenie zaraz pod session_start())
2.2 Sprawdź dane i wykonaj odpowiednią akcje. Jeśli jest ok to auth ustaw na 1 i najlepiej odśwież strone (funkcja: header()); Jesli dane były błednę do informacji o błędzie
3. sprawdź czy auth jest na 1? jeśli nie to przekierowanie.
4. Dalsza część kodu
Raven1122
16.09.2011, 19:44:44
Plik board.php
<?php
$login = $_POST['login'];
$pass = $_POST['pass'];
$sql = "SELECT userpassword FROM emes_accounts WHERE userlogin = '$login'";
if(isset($_POST['login']) && isset($_POST['pass'])) {
if ($login != '' and $pass != ''){
if($pass != $row['userpassword']){
header ("location:./index.php?password=wrong"); break;
}
else {
$_SESSION['auth'] = 1;
}
if($_SESSION['auth'] == 1){
}
else {
}
}
else {
echo ("Wypełnij Wszystkie pola"); }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-Language" content="pl" />
<meta name="Robots" content="ALL" />
<meta name="author" content="eMeS" />
<meta http-equiv="X-UA-Compatible" content="IE=8">
<link rel="stylesheet" href="css/style.css" type="text/css" />
<link rel="icon" href="./images/favicon.ico" type="image/x-icon" />
<title>eMeS Systems - Panel Admina</title>
</head>
<body>
<div id="container">
<div id="menu"> <?php include("./includes/menu.php"); ?> </div>
<div id="content">
<?php
$sql = "SELECT * FROM emes_gallery";
?>
<table border="1" style="border:1px solid #000"><tr><td>Obrazek<td>Tytuł<td>Edycja<td>Usun</td></tr>
<?php
?>
<tr>
<td><img src="
<?php echo $row['imglink']; ?>" style="width:100px;" /><td><center>
<?php echo $row['title']; ?></center><td width="100"><center><a href="edit.php?id=
<?php echo $row['id']; ?>">Edytuj</a></center><td width="100"><center><a href="delete.php?id=
<?php echo $row['id']; ?>">Usuń</a></center></td></tr>
<?php } ?>
</table>
<div class="floatend"></div></div>
<div id="footer"></div>
</div>
</body>
</html>
dobra wykombinowałem coś czystszego i czytelniejszego, ale bez skudku (posluchalem sie rady freemp3)
<?php
//łączymy się z bazą
mysql_query("SET collation_connection = utf8_polish_ci");
mysql_query("SET NAMES `utf8` COLLATE `utf8_polish_ci`"); //Sprawdzamy czy tablice POST są ustawione
if(isset($_POST['login']) && isset($_POST['pass'])){ //Sprawdzamy czy tablice nie są puste i Dodajemy wartość login i pass do zmiennych
if($_POST['login'] != '' && $_POST['pass'] != ''){
$login = $_POST['login'];
$pass = $_POST['pass'];
}
else {
}
//Wyciągamy haslo poprzez login
$sql = "SELECT userpassword FROM emes_accounts WHERE userlogin = '$login'";
//Sprawdzamy poprawność hasła i loginu
if($pass == $row['userpassword']){
$_SESSION['auth'] = 1;
}
else {
$_SESSION['auth'] = 0;
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-Language" content="pl" />
<meta name="Robots" content="ALL" />
<meta name="author" content="eMeS" />
<meta http-equiv="X-UA-Compatible" content="IE=8">
<link rel="stylesheet" href="css/style.css" type="text/css" />
<link rel="icon" href="./images/favicon.ico" type="image/x-icon" />
<title>eMeS Systems - Panel Admina</title>
</head>
<body>
<div id="container">
<div id="menu"> <?php include("./includes/menu.php"); ?> </div>
<div id="content">
<?php
$sql = "SELECT * FROM emes_gallery";
?>
<table border="1" style="border:1px solid #000"><tr><td>Obrazek<td>Tytuł<td>Edycja<td>Usun</td></tr>
<?php
?>
<tr>
<td><img src="
<?php echo $row['imglink']; ?>" style="width:100px;" /><td><center>
<?php echo $row['title']; ?></center><td width="100"><center><a href="edit.php?id=
<?php echo $row['id']; ?>">Edytuj</a></center><td width="100"><center><a href="delete.php?id=
<?php echo $row['id']; ?>">Usuń</a></center></td></tr>
<?php } ?>
</table>
<div class="floatend"></div></div>
<div id="footer"></div>
</div>
</body>
</html>
peter13135
16.09.2011, 19:45:58
możesz wejść bez hasła, bo nie masz przecież sprawdzania czy session auth == 1 czy nie.. Wyświetlasz stronę bez względu na to.
Po drugie. Czemu logowanie masz poza <html></html>
Po trzecie, prosisz o pomoc i jednocześnie ją całkowicie ignorujesz.
freemp3
16.09.2011, 19:48:04
Na początek Twój kod tylko już sformatowany:
<?php
$login = $_POST['login'];
$pass = $_POST['pass'];
$sql = "SELECT userpassword FROM emes_accounts WHERE userlogin = '$login'";
if(isset($_POST['login']) && isset($_POST['pass'])) {
if ($login != '' and $pass != '')
{
if($pass != $row['userpassword'])
{
header ("location:./index.php?password=wrong"); break;
}
else
{
$_SESSION['auth'] = 1;
}
if($_SESSION['auth'] == 1)
{
}
else
{
}
}
else
{
echo ("Wypełnij Wszystkie pola"); }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-Language" content="pl" />
<meta name="Robots" content="ALL" />
<meta name="author" content="eMeS" />
<meta http-equiv="X-UA-Compatible" content="IE=8">
<link rel="stylesheet" href="css/style.css" type="text/css" />
<link rel="icon" href="./images/favicon.ico" type="image/x-icon" />
<title>eMeS Systems - Panel Admina</title>
</head>
<body>
<div id="container">
<div id="menu">
<?php include("./includes/menu.php"); ?>
</div>
<div id="content">
<?php
$sql = "SELECT * FROM emes_gallery";
?>
<table border="1" style="border:1px solid #000"><tr><td>Obrazek<td>Tytuł<td>Edycja<td>Usun</td></tr>
<?php
?>
<tr>
<td>
<img src="
<?php echo $row['imglink']; ?>" style="width:100px;" />
</td> <!-- tutaj -->
<td>
<center>
<?php echo $row['title']; ?> </center>
</td> <!-- tutaj -->
<td width="100">
<center>
<a href="edit.php?id=
<?php echo $row['id']; ?>">Edytuj</a>
</center>
</td> <!-- tutaj -->
<td width="100">
<center>
<a href="delete.php?id=
<?php echo $row['id']; ?>">Usuń</a>
</center>
</td>
</tr>
<?php } ?>
</table>
<div class="floatend"></div>
</div>
<div id="footer"></div>
</div>
</body>
</html>
Prawda, że czytelniej wygląda?
Teraz uwagi:
1. Nie podaje się danych do logowania publicznie

2. Warunek który podałem powinien być kilka linijek wyżej. Dokładnie to przed: $login = $_POST['login']; Dlaczego? Nie ma sensu przypisywanie do zmiennych czegoś czego nie ma i wyciąganie z bazy informacji o nieistniejącym użytkowniku. Pewnie i tak nic nie wyciągnie, ale to niepotrzebna strata czasu.
3. Brakuje kilku zakończeń komórek tabeli ("</td>"). Zaznaczyłem gdzie.
Teraz powinno być ok.
Raven1122
16.09.2011, 19:50:14
hah, dziekuje wam

daje wam pomogl za dluga meke z moim malo pojemnym mozdzkiem
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.