Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ograniczenie punktów
Forum PHP.pl > Forum > PHP
kiepski96
Jeśli w tabeli rejestracja w rekordzie użytkownika wpisze, że ma 400 punktów to chce, aby przy wyborze nagrody jak nie będzie miał tylu punktów wywalało mu błąd.

Tabela : rejestracja Komórka : punkty

Próbowałem tak :

$nick = $_SESSION['username'];
$punkty = "SELECT punkty FROM rejestracja";
$nick = $punkty;
if ($punkty <= 50) die ('Nie masz tylu punktów');

No i w bazie zapisuje , 60 punktów i błąd Nie masz tylu punktów pojawia się cały czas.
Proszę o pomoc .
Zyx
Polecam poczytać, jak wykonujemy zapytania SQL... bo na pewno nie tak, jak napisałeś...
kiepski96
Dzięki za podpowiedź, już wszystko działa,
Dla zainteresowanych zapytanie wygląda tak :

$db=mysql_query("SELECT punkty FROM rejestracja");
$nick = $_SESSION['username'];
$o=mysql_fetch_array($db);
$punkty =$o['punkty'];
$nick = $punkty;
if ($punkty <= 50) die ('Nie masz tylu punktów');
barcisz
Przydałoby się jeszcze uzależnić zapytanie od użytkownika, bo w tej chwili obojętnie kto będzie zalogowany to zapytanie zawsze zwróci wszystkie rekordy z bazy, a Ty weźmiesz pod uwagę zawsze tylko pierwszy rekord.

Nie wiem jak wygląda u Ciebie tabela rejestracja, ale to powinno być coś w tym stylu:

SELECT punkty FROM rejestracja WHERE login = 'tutaj_login'
kiepski96
Masz rację. Bierze tyko 1-wszy rekord . Zmieniłem to na :

$db=mysql_query("SELECT punkty FROM rejestracja WHERE username = '$nick'");
$nick = $_SESSION['username'];
$o=mysql_fetch_array($db);
$punkty =$o['punkty'];
$nick = $punkty;
if ($punkty <= 50) die ('Nie masz tylu punktów');

Tylko mam problem czy dobrze uzupełniłem to :

Kod
username = '$nick



Bo teraz nawet jeśli ma punkty to wywala, że nie ma .
barcisz
Przypisane do zmiennej $nick masz dopiero po wykonaniu zapytania. Powinno być odwrotnie.

Polecam w takich przypadkach po prostu przypisać sobie zapytanie do zmiennej i wypisać ją sobie na ekran, żeby sprawdzić czy na pewno jest takie, jakie chcemy (tylko testowo, docelowo oczywiście nie wypisujemy nigdzie zapytań smile.gif), czyli np:

Kod
$sql = "SELECT punkty FROM rejestracja WHERE username = '$nick'";
echo $sql;
$db=mysql_query($sql);


W takim przypadku na pewno zorientujesz się co jest nie tak.

Swoją drogą warto jeszcze doczytać na temat SQL Injection, bo sklejanie zapytania w ten sposób (czyli dodanie po prostu zmiennej $nick, która wcześniej była wprowadzona przez użytkownika, do zapytania) to proszenie się o kłopoty smile.gif
kiepski96
Ok, dziala

A jak zabezpieczyć to przed atakiem ?

Teraz mój kod wygląda :

$nick = $_SESSION['username'];
$db=mysql_query("SELECT punkty FROM rejestracja WHERE username = '$nick'");
$o=mysql_fetch_array($db);
$punkty =$o['punkty'];
$nick = $punkty;
if ($punkty <= 50) die ('Nie masz tylu punktów');
barcisz
Sposobów na zabezpieczenie jest kilka, ale warto temat poznać od podstaw (moim zdaniem jak się zrozumie w jaki sposób można wykonać atak SQL Injection, to potem bardziej się na takie sprawy uważa).

Na początek polecam artykuł z wiki:

http://pl.wikipedia.org/wiki/SQL_injection

Opisuje zarówno proste przykłady ataków, jak i sposoby radzenia sobie z nim.
kiepski96
A czy dodanie tylko mojego ip do phpmyadmina (tylko z mojego kompa można się zalogować do niego ) zabezpieczy stronę ?
barcisz
Zabezpieczy, ale tylko dostęp do samego phpmyadmina. Wiele zależy jeszcze od ustawień samej bazy (można tam ograniczyć, że dostęp jest możliwy tylko z localhosta, wtedy jedynie skrypty na serwerze będą mogły z niej korzystać, a więc phpmyadmin i Twoja strona).

A jeśli chodzi o SQL Injection to w ten sposób się przed nim nie ustrzeżesz, bo hipotetyczny włamywacz tylko lekko modyfikuje Twoje zapytania, a więc dla samej bazy nie ma różnicy między wywołaniem takim, jakie chcesz, a zmodyfikowanym przez intruza.
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.