Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP][MYSQL] referer zabezpieczenie przed..., naibjaniem punktów
bl4ck_b0x
post 21.05.2008, 07:17:03
Post #1





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 21.11.2006

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


Witam.

Mam problem ponieważ tworzę coś w stylu "linków polecających" które będą dodawać pkt dla usera po którego linku (polecajacym) ktoś trafi na stronę ale aby zabezpieczyć to przed "nabijaniem" takich punktów chciałem stworzyć dość proste zabezpieczenie (ip, data).

Struktura bazy:

Kod
+referer
-ip
-data (YYYY-MM-DD)


Oto kod całego pliku referer.php:

  1. <?
  2. include('config.php');
  3. if(isset($_GET['p']))
  4. {
  5. $ip=$_SERVER['REMOTE_ADDR'];
  6. $data=date('Y:m:d');
  7. $p=intval($_GET['p']);
  8. $pkt=10;
  9. $query=mysql_query('SELECT r.ip, r.data, u.pkt FROM referer r, uzytkownicy u');
  10. while($result=mysql_fetch_array($query))
  11. {
  12. if(($ip==$result['ip'])&&($data==$result['data']))
  13. {
  14. echo 'Dzisiaj już pomogłeś temu użytkownikowi.';
  15. }
  16. elseif(($ip==$result['ip'])&&($data!==$result['data']))
  17. {
  18. $wynik=$result['pkt']+$pkt;
  19. mysql_query('UPDATE uzytkownicy SET pkt='.$wynik.'');
  20. mysql_query('INSERT INTO referer(ip,data) VALUES("'.$ip.'","'.$data.'")');
  21. echo 'Dodano punkty.';
  22. }
  23. else
  24. {
  25. $wynik=$result['pkt']+$pkt;
  26. mysql_query('UPDATE uzytkownicy SET pkt='.$wynik.'');
  27. mysql_query('INSERT INTO referer(ip,data) VALUES("'.$ip.'","'.$data.'")');
  28. echo 'Dodano punkty.';
  29. }
  30. }
  31. }
  32. else
  33. {
  34. echo 'Brak poleconego.';
  35. }
  36. ?>


Bardzo proszę o pomoc bo nic sie nie wyświetla, ciągle jest biała strona. mysql_error(); także nic nie wyświetlił.

Ten post edytował bl4ck_b0x 21.05.2008, 07:26:51
Go to the top of the page
+Quote Post
potreb
post 21.05.2008, 07:36:40
Post #2





Grupa: Zarejestrowani
Postów: 1 568
Pomógł: 192
Dołączył: 7.03.2005
Skąd: Warszawa

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


Może dodaj do zapytania or die(mysql_error());
  1. <?php
  2. &&($data!==$result['data']))
  3. ?>


Powinno byc:

  1. <?php
  2. &&($data!=$result['data']))
  3. ?>


Zresztą nie wiem do czego ci ten warunek else if, skoro stworzyłeś już if-a, który sprawdza czy dany user nie głosował już.

Ten post edytował potreb 21.05.2008, 07:40:16


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

Go to the top of the page
+Quote Post
bl4ck_b0x
post 21.05.2008, 07:49:29
Post #3





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 21.11.2006

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


Hmm co najdziwniejsze nic nie umieszcza w bazie... w ogóle zrobiłem w while echo 'a'; żeby sprawdzić czy działa w ogóle while i niestety nie działa :/
Go to the top of the page
+Quote Post
erix
post 21.05.2008, 08:10:00
Post #4





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




Ale po co tak komplikować...?

  1. <?php
  2. $data=date('Y:m:d');
  3. $p=intval($_GET['p']);
  4. $pkt=10;
  5. $query=mysql_query('SELECT r.ip, r.data, u.pkt FROM referer r, uzytkownicy u');
  6. ?>


Nie możesz zrobić zapytania, które bezpośrednio wyciąga konkretnego użytkownika, tylko przerabiasz całą tabelę...?

Dorzuć WHERE na sprawdzaniu adresu IP gościa.

Potem sprawdzasz, czy są rekordy, jeśli są - sprawdzasz datę i ifem, jeśli się zgadza - komunikat, że było, w przeciwnym wypadku - dodaj do bazy.

  1. <?php
  2. elseif(($ip==$result['ip'])&&($data!==$result['data']))
  3. {
  4. $wynik=$result['pkt']+$pkt;
  5. mysql_query('UPDATE uzytkownicy SET pkt='.$wynik.'');
  6. mysql_query('INSERT INTO referer(ip,data) VALUES("'.$ip.'","'.$data.'")');
  7. echo 'Dodano punkty.';
  8. }
  9. else
  10. {
  11. $wynik=$result['pkt']+$pkt;
  12. mysql_query('UPDATE uzytkownicy SET pkt='.$wynik.'');
  13. mysql_query('INSERT INTO referer(ip,data) VALUES("'.$ip.'","'.$data.'")');
  14. echo 'Dodano punkty.';
  15. }
  16. ?>


Po co Ci dwa razy ten sam kawałek kodu w różnych warunkach, skoro równie dobrze wystarczy Ci samo else...?


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

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
bl4ck_b0x
post 21.05.2008, 08:19:43
Post #5





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 21.11.2006

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


właśnie chodzi o to, że z tabeli użytkownicy wyciągam tylko ilość pkt a punkty będą dodawane przez gości dlatego chce żeby było to zapisywane na bazie (data,ip) nastepnie sprawdzanie czy istnieje takie ip, nastepnie jesli istnieje ale punkty dodawal 24 godziny temu (czyli dzien wczesniej) to powinno sie dodac, jesli nie to wyswietla ze juz zostaly dodane punkty.

p.s.
sprawdze to co napisales (przerobie to pod ten skrypt)
Go to the top of the page
+Quote Post
erix
post 21.05.2008, 08:31:59
Post #6





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




No, ja rozumiem, ale po co przeskakujesz wszystkie rekordy via PHP za każdym razem, skoro możesz skonstruować odpowiednie zapytanie...?


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

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
bl4ck_b0x
post 21.05.2008, 08:37:18
Post #7





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 21.11.2006

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


ok mam takie zapytanie

  1. <?php
  2. $query=mysql_query('SELECT r.ip, r.data, u.pkt FROM referer r, uzytkownicy u WHERE r.ip="'.$ip.'"');
  3. ?>


ale nadal nie dziala.. ;/ cholera nie wiem co jest nie tak...

Ten post edytował bl4ck_b0x 21.05.2008, 08:37:36
Go to the top of the page
+Quote Post
erix
post 21.05.2008, 08:41:01
Post #8





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




Cytat
ale nadal nie dziala.. ;/

Nie siedzę przed Twoim komputerem i nie wiem, w jaki sposób "nie działa"...

Zwraca jakiekolwiek rekordy? Wysypuje system? Zawiesza interpreter, nic nie robi, może wysypał fusy po Twojej kawie? tongue.gif


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

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
bl4ck_b0x
post 21.05.2008, 08:44:19
Post #9





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 21.11.2006

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


dobra bez jaj haha.gif po prostu jest cała biała strona, tak jakby while w ogóle nie działało...
Go to the top of the page
+Quote Post
potreb
post 21.05.2008, 08:56:27
Post #10





Grupa: Zarejestrowani
Postów: 1 568
Pomógł: 192
Dołączył: 7.03.2005
Skąd: Warszawa

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


Wklej swój poprawiony kod. Daj na początku skryptu error_reporting(E_ALL);


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

Go to the top of the page
+Quote Post
bl4ck_b0x
post 21.05.2008, 08:58:52
Post #11





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 21.11.2006

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


kodzik:

  1. <?
  2. include('config.php');
  3. if(isset($_GET['p']))
  4. {
  5. $ip=$_SERVER['REMOTE_ADDR'];
  6. $data=date('Y:m:d');
  7. $p=intval($_GET['p']);
  8. $pkt=10;
  9. $query = mysql_query('SELECT r.ip, r.data, u.pkt FROM referer r, uzytkownicy u') or die (mysql_error());
  10. while($result=mysql_fetch_array($query))
  11. {
  12. if(($ip==$result['ip'])&&($data==$result['data']))
  13. {
  14. echo 'Dzisiaj już pomogłeś temu użytkownikowi.';
  15. }
  16. else
  17. {
  18. $wynik=$result['pkt']+$pkt;
  19. mysql_query('UPDATE uzytkownicy SET pkt='.$wynik.'');
  20. mysql_query('INSERT INTO referer(ip,data) VALUES("'.$ip.'","'.$data.'")');
  21. echo 'Dodano punkty.';
  22. }
  23. }
  24. }
  25. else
  26. {
  27. echo 'Brak poleconego.';
  28. }
  29. ?>



p.s.
jesli jest w zapytaniu WHERE r.ip="'.$ip.'" to i tak nie działa...

Ten post edytował bl4ck_b0x 21.05.2008, 09:01:11
Go to the top of the page
+Quote Post
erix
post 21.05.2008, 09:04:18
Post #12





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




Ok, trywialne pytanie, ale jak Ty ten skrypt wywołujesz?

Daj
  1. <?php
  2. ?>
dla $query po:
  1. <?php
  2. $query = mysql_query('SELECT r.ip, r.data, u.pkt FROM referer r, uzytkownicy u') or die (mysql_error());
  3. ?>


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

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
bl4ck_b0x
post 21.05.2008, 09:07:13
Post #13





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 21.11.2006

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


var_dump wywalił mi coś takiego:

resource(4) of type (mysql result)

A skrypt wywołuje normlanie na localhost: http://localhost/~sklepik/referer.php?p=1

p <- p jest potrzebne jako określenie id uzytkownika bo chce dodawać PKT do konkretnego uzytkownika (sugerujac sie id)

Ten post edytował bl4ck_b0x 21.05.2008, 09:08:37
Go to the top of the page
+Quote Post
erix
post 21.05.2008, 09:16:54
Post #14





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




Ja nie mogę, dopiero teraz wpadłem...

Uwzględnij w nazwach kolumn ($result) nazwy tabel, np:

  1. <?php
  2. //zamiast:
  3. $wynik=$result['pkt']+$pkt;
  4. //to:
  5. $wynik=$result['u.pkt']+$pkt;
  6. ?>


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

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
bl4ck_b0x
post 21.05.2008, 09:18:54
Post #15





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 21.11.2006

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


dalej to samo ;/ juz nie mam sil do tego skryptu..
Go to the top of the page
+Quote Post
erix
post 21.05.2008, 09:20:43
Post #16





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




A zmieniłeś analogicznie w pozostałych miejscach skryptu?

Jak tak, to
  1. <?php
  2. ?>
na $result w pętli...


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

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
bl4ck_b0x
post 21.05.2008, 09:23:50
Post #17





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 21.11.2006

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


zobacz:

  1. <?
  2. include('config.php');
  3. if(isset($_GET['p']))
  4. {
  5. $ip=$_SERVER['REMOTE_ADDR'];
  6. $data=date('Y:m:d');
  7. $p=intval($_GET['p']);
  8. $pkt=10;
  9. $query = mysql_query('SELECT r.ip, r.data, u.id_uzytkownika, u.pkt FROM referer r, uzytkownicy u') or die (mysql_error());
  10. while($result=mysql_fetch_array($query))
  11. {
  12. var_dump($result);
  13. if(($ip==$result['ip'])&&($data==$result['data']))
  14. {
  15. echo 'Dzisiaj już pomogłeś temu użytkownikowi.';
  16. }
  17. else
  18. {
  19. $wynik=$result['u.pkt']+$pkt;
  20. mysql_query('UPDATE uzytkownicy u SET u.pkt='.$wynik.' WHERE u.id_uzytkownika="'.$p.'"');
  21. mysql_query('INSERT INTO referer(ip,data) VALUES("'.$ip.'","'.$data.'")');
  22. echo 'Dodano punkty.';
  23. }
  24. }
  25. }
  26. else
  27. {
  28. echo 'Brak poleconego.';
  29. }
  30. ?>


ciagle biala strona...
Go to the top of the page
+Quote Post
mike
post 21.05.2008, 09:30:07
Post #18





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Ustawienie:
  1. <?php
  2. ?>
nie załatwia sprawy. Warto sobie uświadomić, że dzięki temu błędy będą raportowane a to nie znaczy wyświetlane. Raportować można na wiele sposobów.
Aby błędy wyświetliły się na stronie należy dodać:
  1. <?php
  2. ini_set('display_errors', 1);
  3. ?>


To tak OT :-)

Poza tym funkcja mysql_fetch_array() wyrzuci błąd jeśli zapytanie nie zwróci żadnych wyników.
Zanim przekażesz uchwyt do wyników do tej funkcji sprawdź czy są wyniki: mysql_num_rows()
Go to the top of the page
+Quote Post
bl4ck_b0x
post 21.05.2008, 09:32:04
Post #19





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 21.11.2006

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


mysql_num_rows wywala mi 0. a co do tego ini_set('display_errors', 1); to nic sie niewyswietla...
Go to the top of the page
+Quote Post
mike
post 21.05.2008, 09:39:52
Post #20





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Cytat(bl4ck_b0x @ 21.05.2008, 10:32:04 ) *
mysql_num_rows wywala mi 0.
No to po sprawie. Jeśli jest zero to przeskakujesz pętlę while a jeśli więcej niż zero to do niej wchodzisz. Nie możesz korzystać z mysql_fetch_* jeśli jest zero wyników.

Cytat(bl4ck_b0x @ 21.05.2008, 10:32:04 ) *
a co do tego ini_set('display_errors', 1); to nic sie niewyswietla...
No to masz coś nie tak z ustawieniami serwera. Napisanie na początku:
  1. <?php
  2. ini_set('display_errors', 1);
  3. ?>
zwyczajowo wystarcza żeby zobaczyć błędy.
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: 13.07.2025 - 23:11