Skocz do zawartości

[PHP/Mysql] Kod sprawdzający sms Coś nie tak


Necro

Rekomendowane odpowiedzi

Witam.

Mam pewien problem ze skryptem sprawdzającym kody sms.

Ok zacznijmy.

Kod Skryptu:

// Zobaczmy czy kod jest w bazie
$zapytanie = "SELECT * from kody where kod='$kod'";
$wynik = mysql_query($zapytanie);

$wiersze = mysql_affected_rows();
if (($wiersze)<1) { 
echo 'Kod jest niepoprawny'; }


// Wiadomo o co chodzi :P
if ($kod=="") { 
echo 'Wypełnij wszystkie pola'; } 


// Sprawdza czy kod został wykorzystany
$zapytanie = "SELECT * from kody where kod='$kod'";
$wynik = mysql_query($zapytanie);
while($rekord = mysql_fetch_array($wynik)) {
$status = $rekord[status];
if ($status==1) {
echo 'Podany kod został już wykorzystany'; } 


// Jeżeli jest ok to zmieniamy status kody na 1 czyli wykorzystany
else {
$zapytanie2 = "UPDATE kody set status=1 where kod='".$kod."'";
$wynik2 = mysql_query($zapytanie2);
}

echo 'Wszystko przebiegło bardzo dobrze';

}

I chodzi o to jak nie wpisze kodu to wywala "Kod jest niepoprawnyWypełnij wszystkie pola" a powinno być "Wypełnij wszystkie pola".

Dalej jak wpisze już kod który został użyty to wyskakuje "Podany kod został już wykorzystanyWszystko przebiegło bardzo dobrze" a powinno samo "Podany kod został już wykorzystany".

Proszę o pomoc, i jeszcze czy ten skrypt jest bezpieczny??

Pozdrawiam

Odnośnik do komentarza
Udostępnij na innych stronach

Zacznijmy od tego, że wszystko powinno być w odpowiedniej kolejności... najpierw sprawdź czy kod został wpisany, jeżeli nie to wyświetl komunikat i zakończ skrypt (po co w tym wypadku sprawdzać czy kod jest w bazie ?) .

--

mysql_affected_rows() zwraca ilość wierszy przetworzonych w ostatniej operacji INSERT, UPDATE lub DELETE
użyj mysql_num_rows()

--

echo 'Wszystko przebiegło bardzo dobrze';

Wrzuć o jeden } wyżej tzn, dwie linijki wyżej :D

do reszty myślę, że dojdziesz sam :)

ps, niepotrzebne dwa zapytania SELECT, lepiej zrób jedno i sprawdź odrazu, czy coś zwróciło (korzystając z tego, że mysql_fetch_array() zwraca FALSE jeżeli nie ma więcej wierszy) i co zwróciło (status kodu).

logo-stat4seo-blue-small.png

Odnośnik do komentarza
Udostępnij na innych stronach

$kod = mysql_real_escape_string($kod);
$zapytanie = "SELECT * from kody where kod='$kod'";
$wynik = mysql_query($zapytanie);

$wiersze = mysql_num_rows($wynik);

$msg = '';
if (($wiersze)<1 && $msg == '') { 
$msg = 'Kod jest niepoprawny'; }


// Wiadomo o co chodzi :P
if ($kod=="" && $msg == '') { 
$msg = 'Wypełnij wszystkie pola'; } 

if ($msg == '')
{
 // Sprawdza czy kod został wykorzystany
 $zapytanie = "SELECT * from kody where kod='$kod'";
 $wynik = mysql_query($zapytanie);
 while($rekord = mysql_fetch_array($wynik)) {
 $status = $rekord[status];
if ($status==1) {
$msg = 'Podany kod został już wykorzystany'; } 

// Jeżeli jest ok to zmieniamy status kody na 1 czyli wykorzystany
else {
$zapytanie2 = "UPDATE kody set status=1 where kod='".$kod."'";
$wynik2 = mysql_query($zapytanie2);
$msg = 'Wszystko przebiegło bardzo dobrze';
  }
}

echo $msg;

Powinno działać chociaż mogą być błędy. Przed przekazywaniem parametrów do bazy trzeba użyć mysql_real_escape_string inaczej kod nie jest bezpieczny.

Odnośnik do komentarza
Udostępnij na innych stronach

Nie ma sprawy, żeby przyspieszyć możesz spróbować tak zmienić, żeby zrezygnować z pierwszej kwerendy. Chociaż najbardziej przyspieszy kiedy dodasz klucz na pole `kod` w bazie (jeśli jeszcze go nie ma).

$kod = mysql_real_escape_string($kod);
$msg = '';

// Wiadomo o co chodzi :P
if ($kod=="" && $msg == '') { 
$msg = 'Wypełnij wszystkie pola'; } 

if ($msg == '')
{
 // Sprawdza czy kod został wykorzystany
 $msg = 'Kod jest niepoprawny';
 $zapytanie = "SELECT * from kody where kod='$kod'";
 $wynik = mysql_query($zapytanie);
 while($rekord = mysql_fetch_array($wynik)) {
 $status = $rekord[status];
if ($status==1) {
$msg = 'Podany kod został już wykorzystany'; } 

// Jeżeli jest ok to zmieniamy status kody na 1 czyli wykorzystany
else {
$zapytanie2 = "UPDATE kody set status=1 where kod='".$kod."'";
$wynik2 = mysql_query($zapytanie2);
$msg = 'Wszystko przebiegło bardzo dobrze';
break;
  }
}

echo $msg;

Odnośnik do komentarza
Udostępnij na innych stronach

Dziękuje bardzo za pomoc, teraz to już chyba będzie działało ok.

Zaraz dodam klucz do bazy.

Jeszcze raz dziękuje i Pozdrawiam

Za bardzo się pośpieszyłem :) Nie wywala komunikatu jak nic nie zostanie wpisane :D (Już działa, odpowiedź mam poniżej musiałem dać } nad $msg; a nie pod)

Sorka że tak mecze.

PS. Po echo $msg; musiałem dodać } bo wywalało " Parse error: parse error, unexpected $end in D:\WebServ\httpd\sprawdz.php on line 39"

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności