Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Zabezpieczenie modułu przez "nabijaniem"
Forum PHP.pl > Forum > Przedszkole
fredzio90
mam takówy problem.. robie moduł do systemu CMS podobnego do Programu Partnerskiego na stronach komercyjnych.. i mam problem...
mam 2 tabele do jednej zapisuje się zarejestrowanego usera, do drugiej zapisywane są adresy ip które odwiedziły linki PP ( domyślacie się, linki aby zbierać punkty ) i moj problem polega na zabezpieczeniu przez nabijaniem punktów przez tą samą osobe, przez te same IP.... napisałem taką funkcje:

  1. <?php
  2. function pp_view() {
  3. global $pp_tbl, $pp_conf_tbl, $goto, $PHP_SELF, $REMOTE_ADDR;
  4.  
  5.  
  6. $sql = mysql_query("SELECT * FROM $pp_tbl WHERE pp_nr='{$_GET['url']}'");
  7. while($r = mysql_fetch_array($sql)) {
  8. $points = $r['points'];
  9. $nr_pp = $r['pp_nr'];
  10. $ppnick = $r['ident']; 
  11.  
  12. $check = mysql_query("SELECT * FROM $pp_conf_tbl");
  13. while($ccc = mysql_fetch_array($check)) {
  14. $ip = $ccc['ip'];
  15. }
  16.  
  17. if($ip=='$REMOTE_ADDR') {
  18. header("Location: $PHP_SELF");
  19. } else {
  20. $sqlUp = mysql_query("UPDATE $pp_tbl SET points=points+1 WHERE ident='$ppnick'");
  21. $sqlZab = mysql_query("INSERT INTO $pp_conf_tbl SET ip='$REMOTE_ADDR', data=now()");
  22. header("Location: $PHP_SELF");
  23. }
  24. }
  25. }
  26. ?>



i niewiem jak tą funkcje przekrztałcić aby:

podczas wchodzenia w link, sprawdzane było w tabeli $pp_conf_tbl czy ip usera ktory kliknow w link PP nie znajduje się w tabeli.. jeżeli tak to żeby pokazało $PHP_SELF, a jeżeli nie to żeby dodało jego ip do bazy $pp_conf_tbl i zaaktualizowało tabele $pp_tbl a dokladnie jego pole points+1...

jak kilkam w odnosnik kierujacy do dodania punktów, dodaje się do bazy ip i aktualizuje punkty usera, lecz powinno wykrywać także czy ip usera nie jest w tabeli i uniemożliwić "nalicznie" punnktów...
MacPain
Pobierasz nr ip od kolesia sprawdzasz czy istnije w tabeli, jeżeli nie to dodajesz ip + punkty, jeżeli tak to nie dodajesz nic dobrze rozumiem questionmark.gifquestionmark.gif?

Jeżeli tak to spróbuj tak
  1. <?php
  2.  
  3. //...łączysz sie z baza
  4.  
  5. //...pobierasz ip
  6.  
  7. $zapytanie = mysql_query("SELECT * FROM numery_ip WHERE nr_ip = '$ip'");
  8.  if(mysql_num_rows($zapytanie) > 0){
  9. echo "Nr. ip istnieje już w bazie";
  10. }else{
  11.  $dodaj = mysql_query("INSERT INTO numery_ip VALUES(0,'$ip','punkty')");
  12.  echo "Głos został oddany dziękuje";
  13.  }
  14. ?>
fredzio90
TAK biggrin.gif

to co podales to musi byc w tym stylu.. tutaj sie nei lkacze z baza.. chodiz mi o ten fragment kodu:
  1. <?php
  2. $check = mysql_query("SELECT * FROM $pp_conf_tbl");
  3. while($ccc = mysql_fetch_array($check)) {
  4. $ip = $ccc['ip'];
  5. }
  6.  
  7. if($ip=='$REMOTE_ADDR') {
  8. header("Location: $PHP_SELF");
  9. } else {
  10. $sqlUp = mysql_query("UPDATE $pp_tbl SET points=points+1 WHERE ident='$ppnick'");
  11. $sqlZab = mysql_query("INSERT INTO $pp_conf_tbl SET ip='$REMOTE_ADDR', data=now()");
  12. header("Location: $PHP_SELF");
  13. }
  14. }
  15. ?>


wszystko dodaje, ip usera do bazy pp_conf... ale dodaje rowniez za kazdym razem punkty.. ja chce zeby z 1 IP mozna bylo 1 glos walnac....

i chodzi mi tutaj czy pętelke while() jest dobrze w kodzie powyżej.. i niewiem ale nie działa opcja ta:
  1. <?php
  2. if($ip=='$REMOTE_ADDR') {
  3. ?>



pomoze ktos questionmark.gif
Kicok
1. http://pl.php.net/manual/pl/language.types.string.php
Tutaj znajdziesz odpowiedź, dlaczego kod:
  1. <?php
  2. if($ip == '$REMOTE_ADDR')
  3. ?>

nie działa tak jak sobie tego życzysz.


2. Powinno się stosować zapis:
  1. <?php
  2. $_SERVER['PHP_SELF'];
  3. $_SERVER['REMOTE_ADDR'];
  4. ?>

zamiast:
  1. <?php
  2. $PHP_SELF;
  3. $REMOTE_ADDR;
  4. ?>

Jeśli na serwerze, na którym umieścisz swój skrypt register_globals będzie wyłączone, to nic ci nie będzie działać.


3.
  1. <?php
  2. $check = mysql_query("SELECT * FROM $pp_conf_tbl");
  3. while($ccc = mysql_fetch_array($check)) {
  4. $ip = $ccc['ip'];
  5. }
  6. ?>

Ta pętla odczyta ci tylko ostatni adres IP z tabeli $pp_conf_tbl. Na pewno o to ci chodziło? Może przerób zmienną $ip na tablicę, a później sprawdzaj adresy IP funkcją in_array" title="Zobacz w manualu PHP" target="_manual
fredzio90
oprubowałe m zmienić i wyszło mi tkaie coś:

  1. <?php
  2. $check = mysql_query("SELECT * FROM $pp_conf_tbl");
  3. while($ccc = mysql_fetch_array($check)) {
  4. $ip = array('$ccc['ip']');
  5. }
  6.  
  7. if (in_array("$_SERVER['REMOTE_ADDR']", $cc)) {
  8. header("Location: $PHP_SELF");
  9. } else {
  10. $sqlUp = mysql_query("UPDATE $pp_tbl SET points=points+1 WHERE ident='$ppnick'");
  11. $sqlZab = mysql_query("INSERT INTO $pp_conf_tbl SET ip='$REMOTE_ADDR', data=now()");
  12. header("Location: $PHP_SELF");
  13. }
  14. ?>


i niestety błąd:

Parse error: syntax error, unexpected T_STRING, expecting ')'

w tej linijce:

$ip = array('$ccc['ip']');
UDAT
  1. <?php
  2. $ip = array( '$ccc[' ip ']' );
  3. ?>

A co to za dziwny string ip?? tongue.gif



Daj raczej tak:
  1. <?php
  2. $ip =array ();
  3. $check = mysql_query("SELECT * FROM $pp_conf_tbl");
  4. while($ccc = mysql_fetch_array($check)) {
  5. $ip[] = $ccc['ip'];
  6. }
  7.  
  8. if (in_array("$_SERVER['REMOTE_ADDR']", $cc)) {
  9. header("Location: $PHP_SELF");
  10. } else {
  11. $sqlUp = mysql_query("UPDATE $pp_tbl SET points=points+1 WHERE ident='$ppnick'");
  12. $sqlZab = mysql_query("INSERT INTO $pp_conf_tbl SET ip='$REMOTE_ADDR', data=now()");
  13. header("Location: $PHP_SELF");
  14. }
  15. ?>
fredzio90
kodzik:

  1. <?php
  2. $ip =array ();
  3. $check = mysql_query("SELECT * FROM $pp_conf_tbl");
  4. while($ccc = mysql_fetch_array($check)) {
  5. $ip[] = $ccc['ip'];
  6. }
  7.  
  8. if (in_array("{$SERVER['REMOTE_ADDR']}", $ccc)) {
  9. header("Location: $PHP_SELF");
  10. } else {
  11. $sqlUp = mysql_query("UPDATE $pp_tbl SET points=points+1 WHERE ident='$ppnick'");
  12. $sqlZab = mysql_query("INSERT INTO $pp_conf_tbl SET ip='$REMOTE_ADDR', data=now()");
  13. header("Location: $PHP_SELF");
  14. }
  15. ?>


i wciąż dodaje punkty ( points ) do bazy jeżeli ip usera odwiedzjaego jest w bazie....
pbnan
  1. <?php
  2. $ip =array ();
  3. $check = mysql_query("SELECT * FROM $pp_conf_tbl");
  4. while($ccc = mysql_fetch_array($check)) {
  5. $ip[] = $ccc['ip'];
  6. }
  7.  
  8. if (in_array("{$SERVER['REMOTE_ADDR']}", $ip)) {
  9. header("Location: $PHP_SELF");
  10. } else {
  11. $sqlUp = mysql_query("UPDATE $pp_tbl SET points=points+1 WHERE ident='$ppnick'");
  12. $sqlZab = mysql_query("INSERT INTO $pp_conf_tbl SET ip='$REMOTE_ADDR', data=now()");
  13. header("Location: $PHP_SELF");
  14. }
  15. ?>

Źle sprawdzasz warunek tongue.gif (chyba... biggrin.gif)
fredzio90
wciąz zle exclamation.gif
pbnan
  1. <?php
  2. $ip =array ();
  3. $check = mysql_query("SELECT * FROM $pp_conf_tbl");
  4. while($ccc = mysql_fetch_array($check)) {
  5. $ip[] = $ccc['ip'];
  6. }
  7.  
  8. if (in_array($_SERVER['REMOTE_ADDR'], $ip)) {
  9. header("Location: $PHP_SELF");
  10. } else {
  11. $sqlUp = mysql_query("UPDATE $pp_tbl SET points=points+1 WHERE ident='$ppnick'");
  12. $sqlZab = mysql_query("INSERT INTO $pp_conf_tbl SET ip='$REMOTE_ADDR', data=now()");
  13. header("Location: $PHP_SELF");
  14. }
  15. ?>

Teraz działać powinno bardziej, niż poprzednio smile.gif

Używaj poprawnego bbcode!! Poprawiam (sab)
//dobra, tylko jeszcze się muszę nauczyć smile.gif
fredzio90
dalej to samo! wciąż dodaje do bazy

da sie to jhakoś zrobić ?

zrobiłem tak:

  1. <?php
  2. $check = mysql_query("SELECT * FROM $pp_conf_tbl");
  3. while($ccc = mysql_fetch_array($check)) {
  4. $ip = $ccc['ip'];
  5. }
  6.  
  7. if (!$ip ==$REMOTE_ADDR) {
  8. $sqlUp = mysql_query("UPDATE $pp_tbl SET points=points+1 WHERE ident='$ppnick'");
  9. $sqlZab = mysql_query("INSERT INTO $pp_conf_tbl SET ip='$REMOTE_ADDR', data=now()");
  10. header("Location: $PHP_SELF");
  11. }
  12. ?>


i działa
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.