Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] SMS Premium
Forum PHP.pl > Forum > Przedszkole
Carveth
  1. <?php
  2. if (empty ($_POST['check'])) {
  3.  error ("Podaj kod.");
  4.  } else {
  5.  $_POST['name'] = str_replace("'","",strip_tags($_POST['check']));
  6.  if ($_POST['check'] == 'Admin' || $_POST['check'] == 'Staff') {
  7. error ("Zapomnij o tym");
  8.  } else {
  9. $query = $db -> Execute("SELECT id, code, status FROM cod WHERE code='".$_POST['check']."' AND status='active'");
  10. $dupe = $query -> RecordCount();
  11. $query -> Close();
  12. if ($dupe > 0) {
  13. error ("Kod nieprawidłowy");
  14. } else {
  15. $db -> Execute("UPDATE players SET premium='Y' WHERE id=".$player -> id);
  16. $db -> Execute("UPDATE cod SET status='inactive' WHERE code='".$_POST['check']."'");
  17. error("Konto premium zostało aktywowane na 30 dni!");
  18. }
  19.  }
  20.  }
  21. ?>


Oto cały skrypt do płatności sms na wapacz. Wiem że źle napisałem skrypt no i kolega powiedział że może poprawić go za opłatą (wysoką) a mówi że jest tu dość prosty błąd. Możecie wskazać gdzie (i najlepiej) podać poprawkę?

Z góry dziękuję za pomoc
Trobin
Ale co tutaj nie działa? Opisz, wytłumacz, pokaż, narsuj schemat cokolwiek, bylebyśmy wiedzieli o co w ogóle chodzi.
marcio
Blad moze byc taki ze nie filtrujesz zmiennych z zapytan sql a tych funkcji nam nie pokazales
Carveth
Wywala errora narazie "Podaj kod" a nie pokazuje formularza
Cezar708
Cytat(Carveth @ 5.05.2008, 21:19:31 ) *
Wywala errora narazie "Podaj kod" a nie pokazuje formularza


w takim razie masz odpowiedź... nie jest ustawiona zmienna $_POST['check']

~EDIT
być może formularz masz źle zbudowany, może zamiast metody post przesyłasz dane motedą post, ewentualnie źle masz nazwane pole w formularzu
marcio
A zrob tak
  1. <?php
  2. if (isset($_POST['check']) && !empty ($_POST['check']) && $_POST['check'] != 'Admin' || $_POST['check'] != 'Staff') {
  3.  
  4.  $_POST['name'] = str_replace("'","",strip_tags($_POST['check']));
  5. $query = $db -> Execute('SELECT id, code, status FROM cod WHERE code="'.mysql_real_escape_string($_POST['check']).'" AND status="active"');
  6. $dupe = $query -> RecordCount();
  7. $query -> Close();
  8. if ($dupe > 0) {
  9. $db -> Execute("UPDATE players SET premium='Y' WHERE id=".$player -> id);
  10. $db -> Execute("UPDATE cod SET status='inactive' WHERE code='".mysql_real_escape_string($_POST['check'])."'");
  11. error("Konto premium zostało aktywowane na 30 dni!");
  12.  }
  13. else echo('Blad');
  14. }
  15. else echo('Konto nie zostalo aktywowane');
  16. ?>
Hazel
Cytat(Carveth @ 5.05.2008, 23:03:27 ) *
  1. <?php
  2. $dupe = $query -> RecordCount();
  3. (...)
  4. if ($dupe > 0) {
  5.               error ("Kod nieprawidłowy");
  6.           }
  7. ?>


Ee... No może ja się nie znam...
Ale jak dla mnie to to wykonuje tego errora zawsze wtedy, kiedy ilość zwróconych z bazy wyników jest wieksza od zera,
czyli jeśli zapytanie jest poprawne i zwraca jakiś wynik, to właśnie wtedy to się wykonuje...
Cezar708
no ale zauważcie, że Carveth napisał, że występuje błąd:

Cytat(Carveth @ 5.05.2008, 21:19:31 ) *
Wywala errora narazie "Podaj kod" a nie pokazuje formularza


a więc zostaje spełniony warunek:

  1. <?php
  2. if (empty ($_POST['check'])){ ....
  3. ?>


więc w tym jest problem, myślę że powinieneś zbadać drogę jaką Ci w poprzednim poście napisałem
marcio
Dziwi mnie ta linijka
  1. <?php
  2. $_POST['name'] = str_replace("'","",strip_tags($_POST['check']));
  3. ?>

Co chcesz na osiagnac moze mylisz wlasnie zmienna check z name?
Carveth
dałem kod jaki podał wyżej kolega i taki error wyskoczył

Fatal error: Call to a member function RecordCount() on a non-object in /xxx/sms.php on line 15

nie zwracać zbytnio na linie ale chodzi tutaj o

$dupe = $query -> RecordCount();
marcio
OOP nie znam
ale czy tworzysz obiekt??
  1. <?php
  2. $dupe = $query -> RecordCount();
  3. ?>

questionmark.gifquestionmark.gif

P.S pokaz funkcje RecordCount()
Hazel
@Cezar708:
racja, późno już, źle zobaczyłem na to, co on napisał.

@Carveth
To w tłumaczeniu z angielskiego znaczy, że wywołujesz funkcję na czymś co nie jest obiektem, czyli po prostu w zapytaniu jest cos nie tak.
A linijka $_POST['name'] = coś tam; nie ma prawa istnienia, nie możesz przypisać do superglobalnych zmiennych formy wart
ści w zwykły sposób, w końcu to nie są takie zwykłe zmienne.
A nawet gdybyś mógł, to po co? Zwłaszcza, że tej zmiennej którą w tej linii `tworzysz`, w ogóle nie wykorzystujesz w dalszym fragmencie...
erix
Cytat
ale czy tworzysz obiekt??

Tworzy. O ile mnie pamięć nie myli, to skrypt na Vallheru, a tam było AdoDB. ;]

Cytat
A linijka $_POST['name'] = coś tam; nie ma prawa istnienia, nie możesz przypisać do superglobalnych zmiennych formy wart
ści w zwykły sposób, w końcu to nie są takie zwykłe zmienne.

Jak to nie? haha.gif Zmienne żądań, to są w rzeczywistości zwykłe tablice; różnią się tylko zasięgiem i początkowymi danymi. ;]

Nie wierzysz? Napisz sobie zwykły formularz i się pobaw. ;]

Carveth, daj mysql_error" title="Zobacz w manualu PHP" target="_manual po Execute i pokaż, co zwraca.
Carveth
Dałem takie zapytanie z or die($db -> ErrorMsg()); i coś takiego jest

$query = $db -> Execute('SELECT id, code, status FROM cod WHERE code="'.mysql_real_escape_string($_POST['check']).'" AND status="active"') or die($db -> ErrorMsg());

i wyskoczył ten error

Table 'rpg_5.cod' doesn't exist

Aaaa i właśnie skrypt pod Vallheru a jeśli chodzi wam o:

$_POST['name'] = str_replace("'","",strip_tags($_POST['check']));
if ($_POST['check'] == 'Admin' || $_POST['check'] == 'Staff') {
error ("Zapomnij o tym");
}

To jest zabezpieczenie przed atakiem SQL
erix
Cytat
Table 'rpg_5.cod' doesn't exist

Przeczytałeś? tongue.gif

Cytat
To jest zabezpieczenie przed atakiem SQL

Bawiłem się kiedyś w to coś (Vallheru) i to akurat było zabezpieczenie przed przekroczeniem uprawnień przez gracza. winksmiley.jpg
Carveth
Table 'rpg_5.cod' doesn't exist

to mówi że nie ma tej tabeli (raczej bazy) lecz jest na 100%exclamation.gif! Wszystko inne korzysta właśnie z tej bazy i działa
marcio
A wyswietl sobie zapytanie i pokarz je debuguj troche kod
Hazel
Cytat(erix @ 6.05.2008, 10:17:56 ) *
Jak to nie? haha.gif Zmienne żądań, to są w rzeczywistości zwykłe tablice; różnią się tylko zasięgiem i początkowymi danymi. ;]


Źle to ująłem. Taka linijka może istnieć, tylko, do cholery, po co nadawać zmiennej nazwę $_POST['name'] ? Nie dość że nadpisuje zmienną, która może służyć do czego innego, to jeszcze jest cholernie niewygodna w użyciu w porównaniu do takiego $a ... Nie wspominam o ewentualnych błędach ludzkich wynikających ze złego zrozumienia kodu. A może bardziej z głupiego sposobu nadawania identyfikatorów. Autor tematu nie sprawia wrażenia superoblatanego w PHP, wiec taki kod może mu tylko zaszkodzić - pomyśl, jakby w podręcznikach nadawali zwykłym zmiennym takie nazwy... sciana.gif
A że napisałem nieprawdę, to druga sprawa, ale nie czepiaj się szczegółów, bo chodziło o co innego i miałem wyższy cel tongue.gif

@Carveth: ten komunikat mówi, że tabela cod w bazie rpg_5 nie istnieje. Sprawdź nazwę tabeli. Nie ma prawa chyba innego błędu być.
erix
Cytat
Nie dość że nadpisuje zmienną, która może służyć do czego innego, to jeszcze jest cholernie niewygodna w użyciu w porównaniu do takiego $a ... Nie wspominam o ewentualnych błędach ludzkich wynikających ze złego zrozumienia kodu.

Ale dlaczego? Powiedzmy, na początku skryptu masz escape'owanie wszystkich danych, obrabianie, itp. Dlaczego w osobnych kawałkach kodu robić wiele razy to samo...?

Męczyć niepotrzebnie np. Registry? Nie strzelaj do muchy z armaty.
Carveth
A więc poprawiłem błąd bo zapomniałem że nazwa tabeli tutaj była cenzurowana. Już wszystko działa lecz mam jedno zastrzeżenie. W vallheru (silniku php) wyskakuje u góry error

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /xxx/xxx/premium.php:1) in /xxx/xxx/sessions.php on line 2

W
szystko działa prawidłowo tyle że wyświetla ten error u góry co jest denerwujące
marcio
SPrawdz czy nie madnych spacji nowych wierszy etc jak nie to daj ob_start(0 i tyle bez zadnego bawienia sie smile.gif
Gość
sprawdź czy w pliku premium.php jest coś przed session_start();

nie może wysłać nagłówku ponieważ, zostało już coś wysłane...

najlepiej na samym początku pliku dopisać: ob_start();
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.