Skocz do zawartości
  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

DaFF

Sprawdzanie id [url] porownywanie sesji i rekordu bazy

Promowane odpowiedzi

Witam,

Mam pewne pytanie, otóż jak zrobić aby po wejściu na xxx.php?aaa?id=yyy pobierało dane z tabeli którą wyznaczę lecz porównywało id sesji z zapisem w bazie z tabela autor i dopuero wtedy ujawnialo tresc.

        if(isset($_GET['id']) && ($_SESSION['user_id']) == $dane['autor'])

Cos w tym stylu czyli, mam newsa napisal go id 1 w tabeli mam autor 1 i gdy ktos wchodzi na link tego newsa sprawdza czy jest n zalogowany jako dany user (autor) i pokazuje treśc jeżeli tak.

Prosiłbym o jakąś pomoc

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Nie wiem czy o to Ci chodzi, ale musisz porównać id użytkownika do id autora wpisu następnie przed wyświetleniem tego newsa musisz właśnie wprowadzić to porównanie no i jak jest takie samo to wyświetla a jak nie to nw jakieś przekierowanie albo coś ...

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Raczej zrobiłbym to tak, że najpierw dał if($_GET['id']), a dopiero w nim if($_SESSION['user_id'] == $dane['autor']), na przykład:

if($_GET['id']) {

	if($_SESSION['user_id'] == $dane['autor']) {

		//wyswietla wyniki

	} else {

		//wyrzuca blad czy cos

	}

} else {

	//brak id czegoś, w przypadku newsów, brak $_GET['id'] powinno powodować wypisanie wszystkich

}

Ale nie jestem pewien czy o to ci chodzi.. Sprecyzuj problem.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Ok poradziłem sobie z tym, zapomniałem o dodaniu w zapytaniu where=autor :>

Teraz inny problem:

<?php

if(isset($_GET['zrob']) and  ''.$dane['autor'].'' == $user ||  ''.$dane['user_group'].'' == 'Administrator' ||  ''.$dane['user_group'].'' == 'Moderator')

{

	$user = $_SESSION['user_id'];

	$zrob=$_GET['zrob'];

mysql_query("DELETE FROM news WHERE id='$zrob'");

}

Problem w tym, że gdy user_group = Administrator/Moderator to akcja się wykonuje lecz gdy rekord w bazie jest rowny $user to nie, a chodzi o to, że ma się wykonać jeśli $dane['autor'] jest równe $user lub jeśli $dane['user_group'] równa się z któraś z tych grup.

Ktoś wie w czym problem? zgaduję, że użyłem jakoś źle operatorów.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Próbowałeś trochę ponawiasować?


if((isset($_GET['zrob']) && ''.$dane['autor'].'' == $user) || (''.$dane['user_group'].'' == 'Administrator' || ''.$dane['user_group'].'' == 'Moderator')) 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

<?php

if((isset($_GET['zrob']) and  ''.$dane['user'].'' == $user) ||  (''.$dane['user_group'].'' == 'Administrator' || ''.$dane['user_group'].'' == 'Moderator'))

{

	$user = $_SESSION['user_id'];

	$zrob=$_GET['zrob'];

mysql_query("DELETE FROM news WHERE id='$zrob'");

}

tsa, nie działa

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Deklarację $user widzę dopiero po tym, gdy warunek zostanie spełniony, czy wcześniej gdzieś zostało to zrobione? Możliwe, że $user to po prostu null.

PS Masz SQL Injection w tym, ale to druga sprawa.. :)

Popróbuj różne opcje, najpierw usuń z warunków

||  (''.$dane['user_group'].'' == 'Administrator' || ''.$dane['user_group'].'' == 'Moderator')

i sprawdź, jeśli zadziała to problemem są właśnie operatory, jeśli nie to problem leży gdzieś indziej.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jeżeli dam $user == 1 to user o id 1 może wykonać tą akcję, jeżeli dam na grupę to grupa moze wykonac akcje ale sam user nie :<

zmienna $user zwraca id usera a $dane autor zwraca również id usera chodzi o to, że nie porównuję jakby tej pierwszej części.

o sqli wiem ale najpierw funkcjonalnośc później można wyłączyć znaki specjalne w urlu:>

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Ja to w takich przypadkach nie zastanawiam się tylko nieco skracam warunek i tworzę kolejny, na przykład:


if(isset($_GET['zrob']) and  ''.$dane['user'].'' == $user) {

    //kodzik

} else if(''.$dane['user_group'].'' == 'Administrator' || ''.$dane['user_group'].'' == 'Moderator') {

    //kodzik

} else {

    //inny kodzik

} 

Ale to tylko ja, jestem leniwy i nie lubię za długo nad czymś siedzieć. :P

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Ja ewentualnie mogę dodać 2 if'y bo skrócić nie mogę ponieważ akcja ma się wykonać jeśli autor = id usera lub gdy grupa jest grupą administracyjną.

dodam jeszcze, że

"Zmienna $user = 3

Baza (autor) = 3" zwracają prawidłowy wynik

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Tak tylko takie coś źle wygląda i muszę edytować 2x jak chcę coś zmienić, lepiej władować to w 1 if

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Nie musisz edytować 2 razy jakbyś albo:

A - zrobił to obiektowo i dodał metodę usuwania

B - po prostu wcześniej zrobił funkcję usuwania.


function del() {

   $user = $_SESSION['user_id']; 

   $zrob=$_GET['zrob']; 

   mysql_query("DELETE FROM news WHERE id='$zrob'");

}

i wywoływał ją przy spełnionym którymś z warunków.

Nie jestem profesjonalistą i szczerze mówiąc mało mnie obchodzi jak wygląda kod jeśli działa.. :)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

No właśnie ten mój też powinien działac, wcześniej zrobiłem warunek:

if (''.$wiersz['user'].'' == $user ||  ''.$dane['user_group'].'' == 'Administrator' ||  ''.$dane['user_group'].'' == 'Moderator') {

        if(isset($_GET['id']))

Który działa a teraz taki:

if (''.$wiersz['autor'].'' == $autor ||  ''.$user_data['user_group'].'' == 'Administrator' ||  ''.$user_data['user_group'].'' == 'Moderator') {

if(isset($_GET['zrob']))

[/code

i on nie działa :>

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.

×