restrictie de la o sesiune la alta

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
Avatar utilizator
trif
Mesaje:500

restrictie de la o sesiune la alta

salut, am si eu problema urmatoare:
ma loghez pe pagina si cand ma duc la pagina "pagina_personala.php" imi arata pagina mea si o pot edita, dar aici vine problema, in bara apare asta localhost/site/pagina_personala.php?id=1 si este pagina mea personala de unde pot sa o modific pt ca imi preia cu GET, dar daca in loc de 1 pun 2 sau alt nr care este in bd imi apare in pagina datele de la id pe care l-am in loc de id. eu as dori ca daca sunt logat sa nu pot modifica datele de pe alta pagina daca schimb niste date in bara ci sa imi zica nu ai acces la acesta pagina. sper ca ati inteles. daca nu ait inteles, scrieti ce nu ati inteles ca va mai explic inca o data. multumesc anticipat. cu stima trif
M-am hotarat!
De ce sa fiu trist?
Oricum nu intereseaza pe nimeni...!
Mai bine sunt fericit si ii enervez pe toti cu fericirea mea!
http://www.cantaricrestine.ro
---> cu stima Trif

MarPlo Mesaje:4343
Salut
In loc de numar la ?id=nr poti folosi numele /valoarea care se afla in sesiunea de logare, ?id=val_sesiune, si adaugi elementele de editare doar daca valoarea $_GET['id'] se potriveste cu sesiunea de logare; astfel daca schimba pagina nu mai se potriveste cu valoarea din sesiunea lui.
Sau, daca trebuie folosit numar in acel URL, cand se logheaza mai creezi o sesiune cu id-ul paginii ce o poate edita. Apoi faci verificarea dintre acea sesiune si $_GET['id'].

claUdiu Mesaje:313
Sau... DAca id-ul din url este al userului poti sa faci o selectare in db dupa numele userului si dupa aceea sa selectezi din tabela unde ai userii cu : WHERE user="nume selectat dupa id" AND ID="id-ul din url" iar daca mysql_num_rows iti da 1, atunci il lasi sa modifice. Daca iti da 0, atunci ii dai sa afiseze un messaj.
Se spune ca...."omul tot invata in viata". Dar...Totusi...Trebie sa ne oprim undeva, nu?

trif Mesaje:500
salut, am reusit sa fac in mare ceea ce mi-ati zis si am cam reusit, dar mai este o problema, vreau sa pun conditia asta:

Cod: Selectaţi tot

if ('schimba_parola.php?utilizator='"'.$_SESSION['utilizator'].'"'&&id='.$_GET['id'].'')
{
fa asta}
else {
echo 'Nu aveti acces la aceasta pagina';
}

mai jos am codul pe toata pagina

Cod: Selectaţi tot

$utilizator=mysql_real_escape_string($_GET['id']);
$SQL_nume = 'SELECT * FROM utilizatori WHERE utilizator = "'.$_SESSION['utilizator'].'"  AND id="'.$_GET['id'].'"'; 
echo $SQL_nume;
$resultat_nume = mysql_query($SQL_nume);
$num_nume = mysql_num_rows($resultat_nume);
if ( $num_nume <> 0 )
{
$rand_nume=mysql_fetch_array($resultat_nume); 
if (isset($_GET['id']) && isset($_POST['nume'])) {
// Se verifica daca sunt date de la formular f889ca7cf6228edf350d4ba39495f4ce
// Se preiau datele
$id=$_GET['id'];
$nume=$_POST['nume'];
// Se face Update
$cerereSQL_nume = "UPDATE utilizatori SET nume='$nume' WHERE id='$id' LIMIT 1";
mysql_query($cerereSQL_nume) or die("NU se poate adauga!");
}
}
// Se face Select-ul pt. afisarea lor
$cerereSQL_nume = 'SELECT * FROM utilizatori WHERE utilizator = "'.$_SESSION['utilizator'].'"  AND id="'.$_GET['id'].'"'; 
$rezultat_n = mysql_query($cerereSQL_nume);
$num_n=mysql_num_rows($rezultat_n);
if ( $num_n <> 0 )
{
  $rand_n=mysql_fetch_array($rezultat_n);
  print '<form action="schimba_parola.php?id='.$_GET['id'].'" method="post">
*Nume: <br><input name="nume" type="text" value="'.$rand_n['nume'].'" > <br> <br>
<div align="left"><input type="Submit" value="Schimba NUME"> </div>
</form>'; 
}  
	echo '<br><div align="center">* NUME trebuie sa contina minim 3 caractere</div>
<br><br>';
$parola_veche=$_POST['parola_veche'];
$SQL = 'SELECT * FROM utilizatori WHERE id="'.$_GET['id'].'"'; 
$resultat = mysql_query($SQL);
$nr = mysql_num_rows($resultat);
if ( $nr <> 0 )
{
  $rand1=mysql_fetch_array($resultat); 
  if ($rand1['pass'] == $parola_veche && $_POST['parola_noua'] == $_POST['cparola']){
// Se verifica daca sunt date de la formular f889ca7cf6228edf350d4ba39495f4ce
// Se preiau datele
$id=$_GET['id'];
$parola_noua=$_POST['parola_noua'];
$cparola = $_POST['cparola'];
// Se face Update
$cerereSQL = "UPDATE utilizatori SET parola='".md5($parola_noua)."', pass='$cparola' WHERE id='$id' LIMIT 1";
mysql_query($cerereSQL) or die("NU se poate adauga!");
}
}
// Se face Select-ul pt. afisarea lor
$cerereSQL ='SELECT * FROM utilizatori WHERE utilizator = "'.$_SESSION['utilizator'].'"  AND id="'.$_GET['id'].'"'; 
$rezultat = mysql_query($cerereSQL);
$num=mysql_num_rows($rezultat);
if ( $num <> 0 )
{
  $rand=mysql_fetch_array($rezultat);
  print '<form action="schimba_parola.php?id='.$_GET['id'].'" method="post">
Parola VECHE: <br><input name="parola_veche" type="password" class="textfield" ><br>
**Parola NOUA: <br><input name="parola_noua" type="password" class="textfield"  /><br>
Confirma parola: <br><input name="cparola" type="password" class="textfield" /><br><br>
<div align="left"><input type="Submit" value="Schimba PAROLA"> </div>
</form>'; 
}  
echo '<br><div align="center">** PAROLA trebuie sa contina minim 3 caractere</div><br><br>';
nu este asa mare lucru sunt doar selecturile pt nume si parole si update la fiecare.
cum fac ca daca imi modifica cineva linkul de sus sa imi apara un mesaj ca nu ai acces la acesta pagina. cred ca intelegeti. multumesc anticipat. cu stima trif
M-am hotarat!
De ce sa fiu trist?
Oricum nu intereseaza pe nimeni...!
Mai bine sunt fericit si ii enervez pe toti cu fericirea mea!
http://www.cantaricrestine.ro
---> cu stima Trif

MarPlo Mesaje:4343
Daca unde ai $_SESSION['utilizator'] , probabil nu e definita acea sesiune, ori e definita mai tarziu in cod, sau nu e adaugat session_start() la inceput.
Ca sa apara "nu ai acces la acesta pagin , se verifica daca valorile din URL se potrivesc cu cele din Sesiune, in caz contrar adaugi exit('nu ai acces la acesta pagin');

- E gresit doi '&' unul dupa altul in URL.

trif Mesaje:500
salut, am reusit, problema era aici:
?utilizator='.$_SESSION['utilizator'].'&id='.$_GET['id'].'" nu trebuia sa pun asa "'.$_SESSION['utilizator'].'" cu dublu gilimele, ci simplu. multumesc pentru ajutor, cu stima trif
M-am hotarat!
De ce sa fiu trist?
Oricum nu intereseaza pe nimeni...!
Mai bine sunt fericit si ii enervez pe toti cu fericirea mea!
http://www.cantaricrestine.ro
---> cu stima Trif

trif Mesaje:500
salut, am o problema si tot nu stiu cum sa o rezolv, am codul acesta:

Cod: Selectaţi tot

<?php
	//Start session
session_start();
include "conectare.php";
$sql="SELECT * FROM utilizatori LIMIT 1"; 
$res=mysql_query($sql);
while($rand=mysql_fetch_array($res)){
echo ''.$rand['ranguri'].'';
//Check whether the session variable SESS_MEMBER_ID is present or not
	if(!isset($_SESSION['utilizator']) || (trim($_SESSION['utilizator']) == '') || ''.$rand['ranguri'].'' !=2 || ''.$rand['ranguri'].'' !=3)
	{
		header("location: autentificare.php");
		exit();
	}  
	}
?>
si imi da eroarea asta

Cod: Selectaţi tot

Warning: Cannot modify header information - headers already sent by (output started at ...
acest cod imi restrictioneaza vizualizarea paginilor utilizatorilor care nu sunt logati, problema este ca am ceva pagini care numai rangurile 2 si 3 au voie sa le foloseasca nu rangul 1. ceea ce vreau este ca sa imi verifice ca daca nu este logat si rangurile sunt diferite de 2 si 3 sa le redirectioneze la autentificare.php. tot am cautat pe internet restrictionare la pagini care au diferite ranguri sau level, dar nu am gasit nici un raspuns numai cum sa imi declar rangurile. astept raspuns daca stie cineva cum sa face, va multumesc anticipat, cu stima trif
M-am hotarat!
De ce sa fiu trist?
Oricum nu intereseaza pe nimeni...!
Mai bine sunt fericit si ii enervez pe toti cu fericirea mea!
http://www.cantaricrestine.ro
---> cu stima Trif

MarPlo Mesaje:4343
Eroarea indica faptul ca deja sunt trrimise date de iesire la server inainte de linia cu header().
Date de iesire sunt: orice caracter / cod html sau chiar spatiu in afara tagului php <?php ?>, sau o instructiune cu echo ori print, in acel fisier sau in cele incluse, inainte de header().
Deci header() (ca si session_start() ) nu merge dupa echo (cum e in codul de sus). Daca vrei sa folosesti header pt. redirect, poti scoate linia cu echo ca nu-si are rostul.

Nu stiu de ce se foloseste asa: ''.$rand['ranguri'].'' !=2 (cu ghilimele pt. nimic) , si nu asa: $rand['ranguri'] !=2 . In astfel de coduri "ciudate" nu ma bag.

trif Mesaje:500
salut, am facut cu gilimele ca nu imi mergea nici simplu (adica fara gilimele) si cand am facut codul si l-am postat nu l-am mai modificat ci l-am lasat asa, intelegi? ceea ce imi trebuia si daca se poate imi mai trebuie este urmatoarea problema:
eu am un fisier acces.php care imi verifica daca utilizatorul este logat sau nu si daca este logat imi lasa sa citesc pagina iar daca nu ma redirectioneaza la pagina autentificare.php. atat am eu, si ceea ce vreau sa fac este ca in acel fisier acces.php sa mai imi verifice si si rangul nu numai sesiunea, si daca este utilizatorul este logat si are rangul 1 sa ma lase doar paginile de admin iar daca are rangul 2 doar de moderator si daca are rangul 3 doar de utilizator.
vreau sa fac asta ca sa nu mai fac faza cu if-urile acelea care au conditiile
- IF(daca este logat si rang 1) sa faca ... si ii pun cod
- ELSEIF(daca este logat si rang 2) sa faca ... si ii pun cod
si tot asa. ci vreau ca sa ma redirectioneze daca nu indeplineste rangul pe care il trebuie sa il aibe. sper ca ati inteles. multumesc pentru raspuns dar mai astept si alte raspunsuri. cu stima trif
M-am hotarat!
De ce sa fiu trist?
Oricum nu intereseaza pe nimeni...!
Mai bine sunt fericit si ii enervez pe toti cu fericirea mea!
http://www.cantaricrestine.ro
---> cu stima Trif

MarPlo Mesaje:4343
Sterge linia cu echo dinainte de header si incearca sa adaptezi codul asta unde vrei sa adaugi redirect.

Cod: Selectaţi tot

if(isset($_SESSION['utilizator']) && strlen($_SESSION['utilizator'])>1) {
  if($rand['ranguri'] < 2) {
    // redirect unde sunt permisi cei cu rang 1
    header("location: rang1.php");
    exit();
   }
  else if($rand['ranguri'] < 3) {
    // redirect unde sunt permisi cei cu rang 2
    header("location: rang2.php");
    exit();
  }
  else {
    echo $rand['ranguri'];
  }
else {
  header("location: autentificare.php");
  exit();
}