Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP] SMS Premium
Carveth
post 5.05.2008, 22:03:27
Post #1





Grupa: Zarejestrowani
Postów: 82
Pomógł: 0
Dołączył: 20.02.2008

Ostrzeżenie: (0%)
-----


  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
Go to the top of the page
+Quote Post
Trobin
post 5.05.2008, 22:07:27
Post #2





Grupa: Zarejestrowani
Postów: 82
Pomógł: 6
Dołączył: 23.03.2008
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


Ale co tutaj nie działa? Opisz, wytłumacz, pokaż, narsuj schemat cokolwiek, bylebyśmy wiedzieli o co w ogóle chodzi.


--------------------
Pracuję na: Apache 2.2.4, MySQL 5.0.20a, PHP 5.3.0
Go to the top of the page
+Quote Post
marcio
post 5.05.2008, 22:07:41
Post #3





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Blad moze byc taki ze nie filtrujesz zmiennych z zapytan sql a tych funkcji nam nie pokazales

Ten post edytował marcio 5.05.2008, 22:08:15


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
Carveth
post 5.05.2008, 22:19:31
Post #4





Grupa: Zarejestrowani
Postów: 82
Pomógł: 0
Dołączył: 20.02.2008

Ostrzeżenie: (0%)
-----


Wywala errora narazie "Podaj kod" a nie pokazuje formularza
Go to the top of the page
+Quote Post
Cezar708
post 5.05.2008, 22:23:39
Post #5





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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

Ten post edytował Cezar708 5.05.2008, 22:28:03
Go to the top of the page
+Quote Post
marcio
post 5.05.2008, 22:27:19
Post #6





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


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. ?>


Ten post edytował marcio 5.05.2008, 22:29:07


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
Hazel
post 5.05.2008, 22:27:36
Post #7





Grupa: Zarejestrowani
Postów: 492
Pomógł: 33
Dołączył: 16.08.2007
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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...

Ten post edytował Hazel 5.05.2008, 22:28:22


--------------------
Go to the top of the page
+Quote Post
Cezar708
post 5.05.2008, 22:31:15
Post #8





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
marcio
post 5.05.2008, 22:33:24
Post #9





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


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?


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
Carveth
post 5.05.2008, 22:39:18
Post #10





Grupa: Zarejestrowani
Postów: 82
Pomógł: 0
Dołączył: 20.02.2008

Ostrzeżenie: (0%)
-----


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();
Go to the top of the page
+Quote Post
marcio
post 5.05.2008, 22:42:53
Post #11





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


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

questionmark.gifquestionmark.gif

P.S pokaz funkcje RecordCount()


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
Hazel
post 5.05.2008, 22:49:50
Post #12





Grupa: Zarejestrowani
Postów: 492
Pomógł: 33
Dołączył: 16.08.2007
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


@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...


--------------------
Go to the top of the page
+Quote Post
erix
post 6.05.2008, 09:17:56
Post #13





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
Carveth
post 6.05.2008, 14:55:18
Post #14





Grupa: Zarejestrowani
Postów: 82
Pomógł: 0
Dołączył: 20.02.2008

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
erix
post 6.05.2008, 16:09:07
Post #15





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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

Ten post edytował erix 6.05.2008, 16:09:20


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
Carveth
post 6.05.2008, 19:56:27
Post #16





Grupa: Zarejestrowani
Postów: 82
Pomógł: 0
Dołączył: 20.02.2008

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
marcio
post 6.05.2008, 20:03:47
Post #17





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


A wyswietl sobie zapytanie i pokarz je debuguj troche kod


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
Hazel
post 6.05.2008, 20:04:57
Post #18





Grupa: Zarejestrowani
Postów: 492
Pomógł: 33
Dołączył: 16.08.2007
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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ć.


--------------------
Go to the top of the page
+Quote Post
erix
post 7.05.2008, 09:20:45
Post #19





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
Carveth
post 7.05.2008, 15:11:26
Post #20





Grupa: Zarejestrowani
Postów: 82
Pomógł: 0
Dołączył: 20.02.2008

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 04:24