Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql]Logowanie i sesja
Forum PHP.pl > Forum > Przedszkole
wrka123
Witam wszystkich:)
W php pisze od hmm dopiero 2 tygodni, ale idzie mi dosyć dobrze;)

Na swojej stronie utworzyłem sesję wykorzystując taki kod:
  1. <?php
  2.  
  3. mysql_connect("localhost","root","");
  4. mysql_select_db("tomek");
  5.  
  6. if(isset($_SESSION['zalogowany'])) {
  7. echo "Witam, ".$_SESSION['login']; 
  8. }else{
  9.  
  10. if(isset($_POST['wyslij'])) {
  11.  
  12.  
  13.  if(mysql_num_rows(mysql_query("SELECT login, haslo
  14.  FROM users WHERE login = '".$_POST['login']."' 
  15.  && haslo = '".$_POST['haslo']."' ")) > 0) {
  16.  
  17.  
  18.  if(mysql_num_rows(mysql_query("SELECT id FROM users
  19.  WHERE login = '".$_POST['login']."' 
  20.  && haslo = '".$_POST['haslo']."' ")) > 0 ) {
  21.  
  22.  
  23.  $_SESSION['zalogowany'] = true;
  24.  $_SESSION['login'] = $_POST['login'];
  25.  $_SESSION['haslo'] = $_POST['haslo'];
  26.  echo "Jesteś zalogowany<br> Możesz przegladac profile uzytkownikow <a href=userlook.php>tutaj</a><p>";
  27.  
  28.  
  29.  } else { 
  30.  
  31.  echo "Złe hasło, proszę spróbować ponownie";
  32. }
  33. } else { 
  34.  echo "Nie ma takiego użytkownika, lub podales/as zle haslo";
  35. }
  36. } else { 
  37.  
  38. ?>[/code]
  39. A w każdej podstronie, która może być widoczna tylko dla admina tworzyłem coś ta
    kiego(jest to system dodawania newsa do bazy):
  40. [code]<?
  41.  
  42. $admin= mysql_query("select * from users where rank=='admin'");
  43.  
  44. If($admin==$_SESSION['login'])
  45.  
  46. echo '<form method=post action=add.php>
  47. Dodawanie newsa do bazy<br>
  48. <textarea name=addnews rows=5 cols=19></textarea><br>
  49.  
  50. <input type=submit value=ok>';
  51.  
  52.  
  53.  
  54.  
  55. mysql_query("insert into tabelka(news) values('$addnews')");
  56.  
  57.  
  58. $newsy=mysql_num_rows(mysql_query("select * from tabelka where news=''"));
  59.  
  60. If($newsy>0)
  61. mysql_query("delete from tabelka where news=''");
  62. ?>

Wszystko pięknie ładnie, jak zaloguje się na użytkownika, który nie ma rangi amdina to nie może tego zobaczyć- i tak ma być. Niestety wczoraj zauważyłem, że jeśli nie zaloguje się w ogóle to mogę wejść do tego działu! Co muszę dopisać, aby tak nie było? Żeby tylko admin miał dostęp do tego działu i żeby wymagało to logowania?

Jeśli ktoś potrzebuje zobaczyć jak to wygląda to proszę bardzo: http://79.187.194.106/projekt2
Z góry dziękuje za odpowiedź smile.gif
Pozdrawiam
Tomek
marcio
Ogolnie jak przechowywujesz w sesji haslo to je koduj za pomoca md5() i dopiero porownuj z baza.
Ogolnie w pliku dla admina nie ma zadnej autoryzacji spradzaj czy zostala wyslalana sesja z login'em i haslem zapisuje w sesji i sprawdzaj tak
  1. <?php
  2. //tu polaczenie z baza
  3. $query = mysql_query("select * from users where rank=='admin'");
  4. while($tab = mysql_fetch_assoc($query)) {
  5. if($tab['login'] == $_SESSION['login'] && $tab['haslo'] == md5($_SESSION['haslo'])) {
  6. //tu panel admina
  7. }
  8. ?>

Ogolnie to nie wiem jak ci to wytlumaczyc bo masz to jakies dziwne biggrin.gif ale idea jest mniej wiecej taka
wrka123
- upps
działą odwrtonie- userzy zarejestrowani widzą wszytsko.
Ten kto sie nie zaloguje nie widzi nic- a ptrzebuje, zeby tylko ten co ma range admina to widzial:
Kod
<?php

mysql_connect("localhost","root","");
mysql_select_db("tomek");


$query = mysql_query("select * from users where rank='admin'");
while($tab = mysql_fetch_assoc($query));
if($tab['login'] = $_SESSION['login'] && $tab['haslo'] = md5($_SESSION['haslo'])){

echo "Dodawanie newsa do bazy:<a href=add.php>klik</a><br>
Edycja newsa w bazie:<a href=change.php>klik</a><br>
Usuwanie newsa z bazy:<a href=del.php>klik</a><br>
Masowe kasowanie newsów:<a href=massdel.php>klik</a><br>
Usuwanie użytkowników:<a href=userdel.php>klik</a><br>
Nadawanie rangi administratora:<a href=admingive.php>klik</a><br>
Czyszczenie shoutboxa:<a href=shoutboxclean.php>klik</a><br>
Czyszczenie wyników friendtestu:<a href=friendtestmassdel.php>klik</a><br>";
}

?>
marcio
No ok teraz moga to widziec tylko zalogowani a ja na twoim miejscu to bym zmienil jedna rzecz tabele dla normalnych user'ow zosta users a dla admina daj admin i wtedy nie bedzie sie mieszac zaden rank.

P.S teraz zobacze dokladniej na kod biggrin.gif

P.S2 maja byc 2 = bo porownujesz dane a nie przypisujesz
  1. <?php
  2. if($tab['login'] == $_SESSION['login'] && $tab['haslo'] == md5($_SESSION['haslo']))
  3. ?>
wrka123
Na pewno jest jakiś sposób na to...
-wrka123-
Cytat(wrka123 @ 31.12.2007, 14:36:37 ) *
Na pewno jest jakiś sposób na to...


Hmm... zauwazylem, że jak loguje w taki sposob:
1.Loguje sie na konto bez admina- pisze nie masz uprawnien admina(wszytko gra),
2.Wylogowuje sie
3 .Loguje sie na konto admina- panel sie wyswietla.
4. wylogowuje sie
5. z powrotem loguje sie na konto bez admina
6. a wtedy co dziwne wyswietla się panel admina!

Może zapisuje się coś w cookiesach?
marcio
W cookie sie nic sam z siebie nie zapisuje a ty cookie nie wysylasz wiec jest tylko jedna opcja zle niszczysz sesje po wylogowywaniu pokaz kod odpowiadajacy za wylogowywanie
-wrka123-
  1. <?php
  2. if(isset($_POST['wyloguj'])) {
  3. echo "<br>Zostałeś wylogowany";
  4. }
  5. ?>
  6. <br>
  7. Jeśli jeszcze sie nie zarejestrowałes to kliknij <a href=register.php>tutaj</a>
  8.  
  9.  
  10.  
  11. </td></tr>
  12. </table>
  13. <input type='submit' value='Wyśloguj' name='wyloguj'>
  14. </form>
  15. <br>
  16. <a href=panel.php>Admin</a>
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.