ugrás a tartalomhoz

Szavazás kódom IP ellenőrzése hibás

Anonymous · 2006. Aug. 28. (H), 21.15
Üdvözletem!

Megpróbáltam írni egy saját szavazást, a probléma az vele hogyha ugyanarról az ipről érkezett szavazás időpontja, és a jelenlegi időpont közötti érték nagyobb mint egy nap, akkor nem jelenik meg semmi. Ezen kívül szerintetek mit kellene másképp csinálni?
  1. <?php  
  2. if(!$_GET['results']) {  
  3.     $query = mysql_query("SELECT id, datum, ip FROM poll_ip WHERE ip='".$_SERVER['REMOTE_ADDR']."'") or die(mysql_error());  
  4.     if (mysql_num_rows($query) == 1) {  
  5.         while ($rows = mysql_fetch_assoc($query)) {  
  6.             $mostani_ido = time();  
  7.             $szavazas_ideje = strtotime($rows['datum']);  
  8.             if(time()-strtotime($rows['datum']) <= 86400) {  
  9.                 header("Location: ".$_SERVER['PHP_SELF']."?results=1");  
  10.             }  
  11.         }  
  12.     } else {  
  13.         $query = mysql_query("SELECT id, kerdes FROM poll_questions ORDER BY id DESC LIMIT 0,1"or die(mysql_error());  
  14.         while ($rows = mysql_fetch_assoc($query)) {  
  15.             echo"{$rows['kerdes']}<br /><br />";  
  16.             $query2 = mysql_query("SELECT id, valasz, kerdes_id FROM poll_answers WHERE kerdes_id='".$rows['id']."'") or die(mysql_error());  
  17.             echo"<form id=\"form1\" name=\"form1\" method=\"post\" action=\"".$_SERVER['PHP_SELF']."?vote=1\">";  
  18.             echo"<p>";  
  19.             while ($rows2 = mysql_fetch_assoc($query2)) {  
  20.                 echo"<label>";  
  21.                 echo"<input type=\"radio\" name=\"poll\" value=\"{$rows2['id']}\" />";  
  22.                 echo"{$rows2['valasz']}</label>";  
  23.                 echo"<br />";  
  24.             }  
  25.             echo"</p><input type=\"submit\" name=\"Submit\" value=\"Submit\" />";  
  26.             echo"</form>";  
  27.         }  
  28.     }  
  29. }  
  30.   
  31.   
  32. if($_GET['vote'] == 1) {  
  33.     $query = mysql_query("SELECT id, szavazatok FROM poll_answers WHERE id='".$_POST['poll']."'") or die(mysql_error());  
  34.     while ($rows = mysql_fetch_assoc($query)) {  
  35.         mysql_query("UPDATE poll_answers SET szavazatok = {$rows['szavazatok']}+1 WHERE id='".$_POST['poll']."'") or die(mysql_error());  
  36.         mysql_query("INSERT INTO poll_ip SET datum = NOW(), ip = '".$_SERVER['REMOTE_ADDR']."'") or die(mysql_error());  
  37.         header("Location: ".$_SERVER['PHP_SELF']."?results=1");  
  38.     }  
  39. }  
  40.   
  41. if($_GET['results'] == 1) {  
  42.     $query = mysql_query("SELECT id, kerdes FROM poll_questions ORDER BY id DESC LIMIT 0,1"or die(mysql_error());  
  43.     while ($rows = mysql_fetch_assoc($query)) {  
  44.         echo"{$rows['kerdes']}<br /><br />";  
  45.         $query2 = mysql_query("SELECT id, valasz, szavazatok, kerdes_id FROM poll_answers WHERE kerdes_id='".$rows['id']."'") or die(mysql_error());;  
  46.         while ($rows2 = mysql_fetch_assoc($query2)) {  
  47.             $query3 = mysql_query("SELECT SUM(szavazatok) as szavazatok FROM poll_answers WHERE kerdes_id='".$rows['id']."'") or die(mysql_error());;  
  48.             while ($rows3 = mysql_fetch_assoc($query3)) {  
  49.             echo"{$rows2['valasz']} - {$rows2['szavazatok']}x<div height: 10px; style=\"background-image: url(poll.png); width: ".ceil(200/$rows3['szavazatok']*$rows2['szavazatok'])."px\"></div><br />";  
  50.             }  
  51.         }  
  52.     }  
  53. }  
 
1

hiba

Anonymous · 2006. Aug. 29. (K), 11.07
magamtól sikerült rájönnöm egy hibára, amikor megnézi hogy létezik e az az ip, akkor ha mondjuk 2x szerepel az adatábzisban akkor le se fut, ha lefut, akkor meg ugyan azt a hibát kapom, hogy nem jelenik meg a form, talán a 2. if else ágábaa kellene beirni ujra a formot?
2

Kommentek nélküli forrás :(

vbence · 2006. Aug. 29. (K), 12.52
Egykét kommentet elhelyezhettél volna, legalább hogy melyik if mit hivatott ellenőrizni. Sokan nem szánnak rá annyi időt, hogy végigbogarásszák a kódodat. Most én sem.
3

igazad van

Anonymous · 2006. Aug. 29. (K), 17.31
igazából az eleje a fontos, mert az nem működik megfelelően, ha tudnátok rá valami jó megoldást megköszönném, természetesen akkor ha ez a fajta megoldás nem jó. a vége fele is lehet hogy van olyan dolog amit másképp kellene csinálni, célszerűbb, stb.
  1. <?php  
  2. if(!$_GET['results']) {  
  3.     $query = mysql_query("SELECT id, datum, ip FROM poll_ip WHERE ip='".$_SERVER['REMOTE_ADDR']."'") or die(mysql_error());  
  4.     // Ha a szavazni kívánó user ipje megtalálható az adatbázisban..  
  5.     if (mysql_num_rows($query) == 1) {  
  6.         while ($rows = mysql_fetch_assoc($query)) {  
  7.             // akkor ellenőrizzük hogy nem e szavazott a mai napon, ha szavazot irány az eredmények  
  8.             if(time()-strtotime($rows['datum']) <= 86400) {  
  9.                 header("Location: ".$_SERVER['PHP_SELF']."?results=1");  
  10.             }  
  11.         }  
  12.     } else {  
  13.         $query = mysql_query("SELECT id, kerdes FROM poll_questions ORDER BY id DESC LIMIT 0,1"or die(mysql_error());  
  14.         while ($rows = mysql_fetch_assoc($query)) {  
  15.             echo"{$rows['kerdes']}<br /><br />";  
  16.             $query2 = mysql_query("SELECT id, valasz, kerdes_id FROM poll_answers WHERE kerdes_id='".$rows['id']."'") or die(mysql_error());  
  17.             echo"<form id=\"form1\" name=\"form1\" method=\"post\" action=\"".$_SERVER['PHP_SELF']."?vote=1\">";  
  18.             echo"<p>";  
  19.             while ($rows2 = mysql_fetch_assoc($query2)) {  
  20.                 echo"<label>";  
  21.                   echo"<input type=\"radio\" name=\"poll\" value=\"{$rows2['id']}\" />";  
  22.                   echo"{$rows2['valasz']}</label>";  
  23.                 echo"<br />";  
  24.             }  
  25.             echo"</p><input type=\"submit\" name=\"Submit\" value=\"Submit\" />";  
  26.             echo"</form>";  
  27.         }  
  28.     }  
  29. }  
  30.   
  31.   
  32. if($_GET['vote'] == 1) {  
  33.     $query = mysql_query("SELECT id, szavazatok FROM poll_answers WHERE id='".$_POST['poll']."'") or die(mysql_error());  
  34.     while ($rows = mysql_fetch_assoc($query)) {  
  35.         mysql_query("UPDATE poll_answers SET szavazatok = {$rows['szavazatok']}+1 WHERE id='".$_POST['poll']."'") or die(mysql_error());  
  36.         mysql_query("INSERT INTO poll_ip SET datum = NOW(), ip = '".$_SERVER['REMOTE_ADDR']."'") or die(mysql_error());  
  37.         header("Location: ".$_SERVER['PHP_SELF']."?results=1");  
  38.     }  
  39. }  
  40.   
  41. if($_GET['results'] == 1) {  
  42.     $query = mysql_query("SELECT id, kerdes FROM poll_questions ORDER BY id DESC LIMIT 0,1"or die(mysql_error());  
  43.     while ($rows = mysql_fetch_assoc($query)) {  
  44.         echo"{$rows['kerdes']}<br /><br />";  
  45.         $query2 = mysql_query("SELECT id, valasz, szavazatok, kerdes_id FROM poll_answers WHERE kerdes_id='".$rows['id']."'") or die(mysql_error());;  
  46.         while ($rows2 = mysql_fetch_assoc($query2)) {  
  47.             $query3 = mysql_query("SELECT SUM(szavazatok) as szavazatok FROM poll_answers WHERE kerdes_id='".$rows['id']."'") or die(mysql_error());;  
  48.             while ($rows3 = mysql_fetch_assoc($query3)) {  
  49.                 // itt rajzolom ki a csikokat, remélem jó ez a megoldás  
  50.             echo"{$rows2['valasz']} - {$rows2['szavazatok']}x<div height: 10px; style=\"background-image: url(poll.png); width: ".ceil(200/$rows3['szavazatok']*$rows2['szavazatok'])."px\"></div><br />";  
  51.             }  
  52.         }  
  53.     }  
  54. }  
  55. ?>  
4

if, while és hasonlók

vbence · 2006. Aug. 29. (K), 19.30
Mindenekelőtt nézd át, hol szeretnél IF-et és hol WHILE-t használni. Itt ugyebár csak akkor megy be az if-be ha pontosan egy eredmény van (ami eleve rossz megközelítés), ezután a while ciklussal méssz végig a pontosan egy darab eredményen:
  1. if (mysql_num_rows($query) == 1) {  
  2.     while ($rows = mysql_fetch_assoc($query)) {  
Az ellenőrzést én a query-be építeném be, valahogy így:
  1. SELECT COUNT(*) FROM poll_ip WHERE ip='1.2.3.4' AND datum > '2006-12-13 19:12:48';  
Ezt php-ben így generálhatod:
  1. $query = mysql_query("SELECT COUNT(*) FROM poll_ip WHERE ip='" . $_SERVER['REMOTE_ADDR'] . "' AND datum > '" . date ("Y-m-d H:i:s", time() - 86400) . "'");  
ez ugyebár visszaadja az adott ip-ről 24 órán belül érkezett szavazatok számát. Ha ez nagyobb, mint nulla (és nem csak akkor, ha egy) át lehet küldeni az eredmény oldalra.

Mint általános jótanács: a header("Location... után nyomjál egy exit(); függvényt neki, nehogy lefussanak nemkívánt dolgok a fájl további részén.

A szavazásnál a SET szavazatok = {$rows['szavazatok']}+1 megközelítés nem szép. Helyette: SET szavazatok = szavazatok + 1

Results rész: Mi szükség van a query3-ra? A query2 szavazatok mezője eleve tartalmazza azt a számot amit a query3 visszaad. Minek a while ciklus a query3 után? A SUM (itt) egyetlen sort ad vissza.

Azt ajánlom, hogy tisztázd le a kódot... nagyon. A problémát nem igazán látom, de ha átgondolod, és mekérded magadtól, hogy melyik sor mit csinál, és miért biztosan előbújik.
5

köszi

Anonymous · 2006. Aug. 29. (K), 19.54
Köszönöm így már jóval egyezerűbb a kód.

Valami probléma van ezzel a kóddal mert mindenféle képpen a result oldalra dob vissza:
  1. $query = mysql_query("SELECT COUNT(*) FROM poll_ip WHERE ip='".$_SERVER['REMOTE_ADDR']."' AND datum>'".date("Y-m-d H:i:s", time() - 86400)."'");  
  2. if (mysql_num_rows($query) > 0) {  
  3.     header("Location: ".$_SERVER['PHP_SELF']."?results=1");  
  4.     exit();  
6

mysql_num_rows

vbence · 2006. Aug. 29. (K), 20.02
A num_rows az eredménytáblában szereplő sorok számát adja vissza. Itt bármi is van egy sor lesz az eredmény. A kérdés csak az, hogy milyen adatot tartalmaz az a sor:

$row = mysql_fetch_row($query);
$szam = $row[0];

Vagy ha a fetch_array szimpatikusabb, adjál egy alias nevet az oszlopnak:
  1. $query = mysql_query("SELECT COUNT(*) <span style="font-weight:bold">AS szam</span> FROM poll_ip ...  
  2. $row = mysql_fetch_assoc($query);  
  3. if ($row['szam'] > 0) {  
  4.     ...  
7

Egy kis bibi

Anonymous · 2006. Aug. 30. (Sze), 08.04
Szerintem ez az egy IP-ről 24 óránként egy az sántit mert mi van akkor ha router mögött vannak és natolnak (mindenkinek ua az IP-je de más van mügütte)?
8

igaz

Anonymous · 2006. Aug. 30. (Sze), 12.56
ez igaz, de cookie-hoz nem értek, ha tudnál adni kis felvilágosítást lecserélném ezt az ip ellenőrzést:)
12

PHP doksi

Anonymous · 2006. Aug. 30. (Sze), 15.58
Üdv!

Ne IP-re csináld, sütire.

PHP doksiban:
setcookie()
$_COOKIE

http://hu.php.net/setcookie

van példa is.
9

még vmi

Anonymous · 2006. Aug. 30. (Sze), 13.05
van itt még valami
echo"{$rows2['valasz']} - {$rows2['szavazatok']}x<div height: 5px; style=\"background-image: url(poll.png); width: ".ceil(200/$rows3['szavazatok']*$rows2['szavazatok'])."px\"></div><br />";


Az itt megadott háttér, ami 5 pixel magas, igazából 10pixel körüli lehet, akármekkora méretet állítok, nem megy.

roland
10

Nem a magasság

vbence · 2006. Aug. 30. (Sze), 13.44
Pont az ilyen dolgokra mondtam, hogy nézd át:
  1. <div <span style="font-weight:bold">height: 5px;</span> style=\"background-image...  
A "height"-et nem a style-ba akartad írni véletlenül? Pontosan milyen számokat generál a php ide? A generált forrásban jól jelennek meg?
11

elnéztem

Anonymous · 2006. Aug. 30. (Sze), 15.55
de, a styleba akartam irni, de még egyse az igazi, 5pixelt adok meg és kb 20 pixel magas az oszlopom. generált phpban teljesen jó.
14

IE6?

Barkóczi Roland · 2006. Aug. 30. (Sze), 16.10
gondolom ie6 ban nezed, nos ebben az esetben a line-height -et is be kell allitanod 5 px-re. FF 1.5 alatt 5px magas a csik.

Hosszu tavon jobban jarnal a <div class='csik'> megoldassal, es az osszes formazast az .csik class-ba tartozo szabalyokkal adnad meg.
16

köszönöm

Anonymous · 2006. Aug. 30. (Sze), 16.49
köszi megcsinálom
17

:(

Anonymous · 2006. Aug. 30. (Sze), 16.52
Sajnos a helyzett így sem változott.
18

size

Barkóczi Roland · 2006. Aug. 30. (Sze), 17.17
Akkor próbáld meg még a size: 5px; is. Más ötletem sajnos nincs.
19

nemjó

Anonymous · 2006. Aug. 30. (Sze), 17.26
Sajnos ez se jött be, nem értem mi lehet ezzel a gond, elég egyszerű pedig..
  1. background-imageurl(poll.png);   
  2. height10px;   
  3. width".ceil(200/$rows3['szavazatok']*$rows2['szavazatok'])."px;  
20

font méret

Anonymous · 2006. Aug. 30. (Sze), 17.29
beraktam hogy font-size: 10px és megy
15

ie

Anonymous · 2006. Aug. 30. (Sze), 16.42
pontosítok, ie alatt nem jó a csík, firefoxban tökéletesen jeleníti meg.
13

url

Anonymous · 2006. Aug. 30. (Sze), 16.00
felraktam igy talán könnyebb: http://lerosza.hu/poll.php
22

safariban is klafa

vbence · 2006. Aug. 30. (Sze), 23.18
Safariban is jól jelenik meg a magasság. Próbáld a font-size helyett a line-height attribútumot (is) állítani.
21

include

Anonymous · 2006. Aug. 30. (Sze), 19.54
Nem akartam új témát nyitni a következő problémának remélem még visszanéznek akik eddig segítettek. A kódom egy portálba van includolva, ahogy megnyitom az oldalt átrak az index.php?results=1 oldalra, utána átkattintanék a letöltésekhez, és itt kerülök bajba, mert nem jelenik meg az oldalra tartalma. Megpróbáltam ezt a sort
if ($_GET['results']!='1'){ header ("Location: {$_SERVER['PHP_SELF']}?results=1"); exit(); }


beszúrni de nem lett eredménye.
23

nem muszáj mindent

vbence · 2006. Aug. 30. (Sze), 23.21
Nem kell mindent egy index.php fájlba pakolni.

Amúgy a sorod annyit tesz, hogy MINDENT, ami nem index.php?results=1 átküld erre az oldalra. Tehát ha valaki index.php?akarmi=napraforgo címet nyit meg, akkor is a results=1 -re dobja.
24

megoldás

Anonymous · 2006. Aug. 31. (Cs), 11.23
akkor mi a megoldás?
25

A megoldás

vbence · 2006. Aug. 31. (Cs), 12.50
Millió megoldás lézetik. A lényeg, hogy legalább a programvezérlő szerkezeteket ismerje az ember (pl. elseif). Nálad az a probléma, hogy (megbocsáss) magad sem érted, mit írsz oda, és így persze hogy nem az történik amit szeretnél.

Ahelyett, hogy különböző példákból összeollózol valamit próbáld megérteni, (php manual) hogy mit csinálnak a kódok, amiket oda bemásoltál, így át tudod alakítani saját igényeidhez.

Ha kész szavazás kódot keresel, akkor irány a gugli, biztosan találsz többszáz kész megoldást. Ha meg programozni akarsz, tanulj programozni. Esetleg vegyél egy könyvet.

B
26

:(

Anonymous · 2006. Aug. 31. (Cs), 13.14
Az oldalon lévő enginet is én csináltam, kb értem amit begépelek, de annyi mindent mondtak már nekem ezzel a szavazás dologgal kapcsolatban, hogy már tényleg nem értem miket írok le. Ezt a megoldást egy másik fórumban ajánlották (amit bemásoltam) de úgy látszik nem okés a dolog. Ezért szükségem lenne valamire ami megoldja ezt a gondot.