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?

<?php
if(!$_GET['results']) {
	$query = mysql_query("SELECT id, datum, ip FROM poll_ip WHERE ip='".$_SERVER['REMOTE_ADDR']."'") or die(mysql_error());
	if (mysql_num_rows($query) == 1) {
		while ($rows = mysql_fetch_assoc($query)) {
			$mostani_ido = time();
			$szavazas_ideje = strtotime($rows['datum']);
			if(time()-strtotime($rows['datum']) <= 86400) {
				header("Location: ".$_SERVER['PHP_SELF']."?results=1");
			}
		}
	} else {
		$query = mysql_query("SELECT id, kerdes FROM poll_questions ORDER BY id DESC LIMIT 0,1") or die(mysql_error());
		while ($rows = mysql_fetch_assoc($query)) {
			echo"{$rows['kerdes']}<br /><br />";
			$query2 = mysql_query("SELECT id, valasz, kerdes_id FROM poll_answers WHERE kerdes_id='".$rows['id']."'") or die(mysql_error());
			echo"<form id=\"form1\" name=\"form1\" method=\"post\" action=\"".$_SERVER['PHP_SELF']."?vote=1\">";
			echo"<p>";
			while ($rows2 = mysql_fetch_assoc($query2)) {
				echo"<label>";
      			echo"<input type=\"radio\" name=\"poll\" value=\"{$rows2['id']}\" />";
      			echo"{$rows2['valasz']}</label>";
    			echo"<br />";
			}
			echo"</p><input type=\"submit\" name=\"Submit\" value=\"Submit\" />";
			echo"</form>";
		}
	}
}


if($_GET['vote'] == 1) {
	$query = mysql_query("SELECT id, szavazatok FROM poll_answers WHERE id='".$_POST['poll']."'") or die(mysql_error());
	while ($rows = mysql_fetch_assoc($query)) {
		mysql_query("UPDATE poll_answers SET szavazatok = {$rows['szavazatok']}+1 WHERE id='".$_POST['poll']."'") or die(mysql_error());
		mysql_query("INSERT INTO poll_ip SET datum = NOW(), ip = '".$_SERVER['REMOTE_ADDR']."'") or die(mysql_error());
		header("Location: ".$_SERVER['PHP_SELF']."?results=1");
	}
}

if($_GET['results'] == 1) {
	$query = mysql_query("SELECT id, kerdes FROM poll_questions ORDER BY id DESC LIMIT 0,1") or die(mysql_error());
	while ($rows = mysql_fetch_assoc($query)) {
		echo"{$rows['kerdes']}<br /><br />";
		$query2 = mysql_query("SELECT id, valasz, szavazatok, kerdes_id FROM poll_answers WHERE kerdes_id='".$rows['id']."'") or die(mysql_error());;
		while ($rows2 = mysql_fetch_assoc($query2)) {
			$query3 = mysql_query("SELECT SUM(szavazatok) as szavazatok FROM poll_answers WHERE kerdes_id='".$rows['id']."'") or die(mysql_error());;
			while ($rows3 = mysql_fetch_assoc($query3)) {
			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 />";
			}
		}
	}
}
 
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.

<?php
if(!$_GET['results']) {
    $query = mysql_query("SELECT id, datum, ip FROM poll_ip WHERE ip='".$_SERVER['REMOTE_ADDR']."'") or die(mysql_error());
    // Ha a szavazni kívánó user ipje megtalálható az adatbázisban..
    if (mysql_num_rows($query) == 1) {
        while ($rows = mysql_fetch_assoc($query)) {
        	// akkor ellenőrizzük hogy nem e szavazott a mai napon, ha szavazot irány az eredmények
            if(time()-strtotime($rows['datum']) <= 86400) {
                header("Location: ".$_SERVER['PHP_SELF']."?results=1");
            }
        }
    } else {
        $query = mysql_query("SELECT id, kerdes FROM poll_questions ORDER BY id DESC LIMIT 0,1") or die(mysql_error());
        while ($rows = mysql_fetch_assoc($query)) {
            echo"{$rows['kerdes']}<br /><br />";
            $query2 = mysql_query("SELECT id, valasz, kerdes_id FROM poll_answers WHERE kerdes_id='".$rows['id']."'") or die(mysql_error());
            echo"<form id=\"form1\" name=\"form1\" method=\"post\" action=\"".$_SERVER['PHP_SELF']."?vote=1\">";
            echo"<p>";
            while ($rows2 = mysql_fetch_assoc($query2)) {
                echo"<label>";
                  echo"<input type=\"radio\" name=\"poll\" value=\"{$rows2['id']}\" />";
                  echo"{$rows2['valasz']}</label>";
                echo"<br />";
            }
            echo"</p><input type=\"submit\" name=\"Submit\" value=\"Submit\" />";
            echo"</form>";
        }
    }
}


if($_GET['vote'] == 1) {
    $query = mysql_query("SELECT id, szavazatok FROM poll_answers WHERE id='".$_POST['poll']."'") or die(mysql_error());
    while ($rows = mysql_fetch_assoc($query)) {
        mysql_query("UPDATE poll_answers SET szavazatok = {$rows['szavazatok']}+1 WHERE id='".$_POST['poll']."'") or die(mysql_error());
        mysql_query("INSERT INTO poll_ip SET datum = NOW(), ip = '".$_SERVER['REMOTE_ADDR']."'") or die(mysql_error());
        header("Location: ".$_SERVER['PHP_SELF']."?results=1");
    }
}

if($_GET['results'] == 1) {
    $query = mysql_query("SELECT id, kerdes FROM poll_questions ORDER BY id DESC LIMIT 0,1") or die(mysql_error());
    while ($rows = mysql_fetch_assoc($query)) {
        echo"{$rows['kerdes']}<br /><br />";
        $query2 = mysql_query("SELECT id, valasz, szavazatok, kerdes_id FROM poll_answers WHERE kerdes_id='".$rows['id']."'") or die(mysql_error());;
        while ($rows2 = mysql_fetch_assoc($query2)) {
            $query3 = mysql_query("SELECT SUM(szavazatok) as szavazatok FROM poll_answers WHERE kerdes_id='".$rows['id']."'") or die(mysql_error());;
            while ($rows3 = mysql_fetch_assoc($query3)) {
            	// itt rajzolom ki a csikokat, remélem jó ez a megoldás
            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 />";
            }
        }
    }
}
?>
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:

    if (mysql_num_rows($query) == 1) {
        while ($rows = mysql_fetch_assoc($query)) {
Az ellenőrzést én a query-be építeném be, valahogy így:
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:
$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:

$query = mysql_query("SELECT COUNT(*) FROM poll_ip WHERE ip='".$_SERVER['REMOTE_ADDR']."' AND datum>'".date("Y-m-d H:i:s", time() - 86400)."'");
if (mysql_num_rows($query) > 0) {
	header("Location: ".$_SERVER['PHP_SELF']."?results=1");
	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:

$query = mysql_query("SELECT COUNT(*) AS szam FROM poll_ip ...
$row = mysql_fetch_assoc($query);
if ($row['szam'] > 0) {
    ...
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:
<div height: 5px; 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..

background-image: url(poll.png); 
height: 10px; 
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.