php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 29.11.2005, 11:18  
Erfahrener Benutzer
 
Registriert seit: 12.07.2005
Beiträge: 279
max-dhom
max-dhom eine Nachricht über MSN schicken
Standard Mal wieder eine Frage zur IP-Sperre

Hallo zusammen,

möchte mir ein Umfrage-Skript mit IP-Sperre basteln. Diese Umfrage soll dann in eine Seiteincluded werden, und je nachdem, ob diese IP schonmal gevotet hat, soll entweder das ergebniss, oder das Formular zum abstimmen angezeigt werden.
Jetzt habe ich es so eingerichtet dass beim Abstimmen die IP in eine exta Tabelle namens "UmfrageIP" gespeichert wird, zusammen mit den Daten "Datum" und "UmfrageID".

Code:
<table width="130px">
<tr><td class="tablecat">

<?php
$sql = "SELECT
			ID,
			Frage,
			Ant1,
			Ant2,
			Ant3,
			Ant4,
			Ant5,
			Ant11,
			Ant22,
			Ant33,
			Ant44,
			Ant55
 	 FROM
			Umfrage
 	 ORDER BY
			ID DESC
	 LIMIT 1;            
";
    $result = mysql_query($sql) OR die(mysql_error());
 echo "";
 while($row = mysql_fetch_assoc($result)) {

echo "
<form enctype=\"multipart/form-data\" action=\"poll/auswertungpoll.php?id=".$row['ID']."\" method=\"post\">
<span class=\"normalfont\">".$row['Frage']."</td></tr>
<tr><td class=\"tableb\"><span class=\"normalfont\"><input type=\"radio\" name=\"Ant\" value=\"1\">  ".$row['Ant1']."</td></tr>
<tr><td class=\"tableb\"><span class=\"normalfont\"><input type=\"radio\" name=\"Ant\" value=\"2\">  ".$row['Ant2']."</td></tr>";

if(trim($row['Ant3']) != "") {                      
	echo "<tr><td class=\"tableb\"><span class=\"normalfont\"><input type=\"radio\" name=\"Ant\" value=\"3\"> ".$row['Ant3']."</td></tr>";        
}

if(trim($row['Ant4']) != "") {                      
	echo "<tr><td class=\"tableb\"><span class=\"normalfont\"><input type=\"radio\" name=\"Ant\" value=\"4\"> ".$row['Ant4']."</td></tr>";        
}

if(trim($row['Ant5']) != "") {                      
	echo "<tr><td class=\"tableb\"><span class=\"normalfont\"><input type=\"radio\" name=\"Ant\" value=\"5\"> ".$row['Ant5']."</td></tr>";        
}
echo "<tr><td class=\"tableb\"><input type=\"submit\" name=\"FERT\" value=\"Abstimmen\" class=\"input\">";
}
?>
Das ist die Seite an der abgestimmt wird! (vote.php)

Code:
<table width="130px">
<tr><td class="tablecat">
<?php
$sql = "SELECT
			ID,
			Frage,
			Ant1,
			Ant2,
			Ant3,
			Ant4,
			Ant5,
			Ant11,
			Ant22,
			Ant33,
			Ant44,
			Ant55
 	 FROM
			Umfrage
 	 ORDER BY
			ID DESC
	 LIMIT 1;            
";
	    $result = mysql_query($sql) OR die(mysql_error());
 echo "";
 while($row = mysql_fetch_assoc($result)) {

$pro1 = ($row['Ant11']/($row['Ant11'] + $row['Ant22'] + $row['Ant33'] + $row['Ant44'] + $row['Ant55']))*120;
$pro2 = ($row['Ant22']/($row['Ant11'] + $row['Ant22'] + $row['Ant33'] + $row['Ant44'] + $row['Ant55']))*120;
$pro3 = ($row['Ant33']/($row['Ant11'] + $row['Ant22'] + $row['Ant33'] + $row['Ant44'] + $row['Ant55']))*120;
$pro4 = ($row['Ant44']/($row['Ant11'] + $row['Ant22'] + $row['Ant33'] + $row['Ant44'] + $row['Ant55']))*120;
$pro5 = ($row['Ant55']/($row['Ant11'] + $row['Ant22'] + $row['Ant33'] + $row['Ant44'] + $row['Ant55']))*120;
 echo " <span class=\"normalfont\">".$row['Frage']."</td></tr>

<tr><td class=\"tableb\"><span class=\"normalfont\">".$row['Ant1']."</td></tr>
<tr><td class=\"tableb\"><span class=\"normalfont\">".$row['Ant11']."&nbsp<img src=\"poll/5.gif\" width=\"$pro1 px\" height=\"5px\">

<tr><td class=\"tableb\"><span class=\"normalfont\">".$row['Ant2']."</td></tr>
<tr><td class=\"tableb\"><span class=\"normalfont\">".$row['Ant22']."&nbsp<img src=\"poll/5.gif\" width=\"$pro2 px\" height=\"5px\">
";

if(trim($row['Ant3']) != "") {                      
	echo "
<tr><td class=\"tableb\"><span class=\"normalfont\">".$row['Ant3']."</td></tr>
<tr><td class=\"tableb\"><span class=\"normalfont\">".$row['Ant33']."&nbsp<img src=\"poll/5.gif\" width=\"$pro3 px\" height=\"5px\">
";        
}
if(trim($row['Ant4']) != "") {                      
	echo "
<tr><td class=\"tableb\"><span class=\"normalfont\">".$row['Ant4']."</td></tr>
<tr><td class=\"tableb\"><span class=\"normalfont\">".$row['Ant44']."&nbsp<img src=\"poll/5.gif\" width=\"$pro4 px\" height=\"5px\">
";        
}
if(trim($row['Ant5']) != "") {                      
	echo "
<tr><td class=\"tableb\"><span class=\"normalfont\">".$row['Ant5']."</td></tr>
<tr><td class=\"tableb\"><span class=\"normalfont\">".$row['Ant55']."&nbsp<img src=\"poll/5.gif\" width=\"$pro5 px\" height=\"5px\">
";        
}
echo "
</td></tr></table>";
 }
?>
Das ist die Seite poll.php, an der das bisherige Ergebnis angezeigt wird! (Zugegeben, die Lösung mit der Breite der Balken mag nicht sher profesionell sein, aber das habe ich mir halt so augedacht, und drum lass ichs jetzt mal so )

Code:
<?php
$sql = "SELECT
			ID,
			Frage,
			Ant1,
			Ant2,
			Ant3,
			Ant4,
			Ant5,
			Ant11,
			Ant22,
			Ant33,
			Ant44,
			Ant55
 	 FROM
			Umfrage
 	 ORDER BY
			ID DESC
	 LIMIT 1;            
";
	    $result = mysql_query($sql) OR die(mysql_error());
 echo "";

 while($row = mysql_fetch_assoc($result)) {

if($Ant == "1") {
	$Anteinsatz = "Ant11"; }
	else if($Ant == "2") {
		$Anteinsatz = "Ant22"; }
			else if($Ant == "3") {
				$Anteinsatz = "Ant33"; }
$UmfraID = $row['ID'];
 }
	$sql="
UPDATE 
	Umfrage
SET 
	$Anteinsatz = $Anteinsatz + 1
WHERE
	ID = $id;
";
    $result = mysql_query($sql) OR die(mysql_error());
$IP = $_SERVER['REMOTE_ADDR'];
$sql="
INSERT INTO UmfrageIP(UmfrageID,Datum,IP) VALUES('$id',NOW(),'$IP');";
    $result = mysql_query($sql) OR die(mysql_error());
?>
Und dies ist die Verarbeitungs-Seite der Abstimmung.

Und so möchte ich nun das ganze in meine Seite ienbinden:

Code:
<?php

$sql = "SELECT
			UmfrageID,
			IP
 	 FROM
			UmfrageIP          
";
	    $result = mysql_query($sql) OR die(mysql_error());
 echo "";
 while($row = mysql_fetch_assoc($result)) {

if($row['IP'] == $_SERVER['REMOTE_ADDR']) {
include ('poll/poll.php'); }
else { include ('poll/vote.php'); }
}
?>
Und hier taucht eigentlich das Problem auf: Wie kann ich überprüfen, ob die aktuelle IP ($_SERVER['REMOTE_ADDR']) ÜBERHAUPT einmal in Zeilen mit der UmfrageID nummer soweiso vorkommt? Meines Wisens überprüfe ich doch mit diesem Befehl nur eine einzige Spalte, oder?

Vielen Dank,
Max Dhom
max-dhom ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 29.11.2005, 11:25  
Gast
 
Beiträge: n/a
Standard

Lösung:

Du speicherst die IP des Benutzers nach der Abstimmung in der Tabelle. Bei jedem Aufruf der Seite suchst du in der Tabelle nach der IP des Benutzers. Wenn vorhanden, inkludiere die Ergebnisseite. Wenn nicht vorhanden, inkludiere die Abstimmungsseite.

Mehr ist es nicht.

Die Suche der IP in der Tabelle:

Code:
function hasVoted($ip)
{
    $q = mysql_query("SELECT COUNT(*) FROM tabelle WHERE ip = '$ip'");
    $row = mysql_fetch_row($q);
    return $row[0] > 0;
}

if(hasVoted($_SERVER['REMOTE_ADDR'])) {
    include("ergebnis.php");
}
else {
    include("abstimmung.php");
}
Das Abstimmungsformular kann auf dieselbe Seite wiederkehren.
 
Alt 29.11.2005, 11:31  
Erfahrener Benutzer
 
Registriert seit: 12.07.2005
Beiträge: 279
max-dhom
max-dhom eine Nachricht über MSN schicken
Standard

hmm ich habe es jetzt so eingebunden:

Code:
<?php
$sql = "SELECT
			UmfrageID,
			IP
 	 FROM
			UmfrageIP          
";
	    $result = mysql_query($sql) OR die(mysql_error());
 echo "";
 while($row = mysql_fetch_assoc($result)) {


function hasVoted($ip)
{
    $q = mysql_query("SELECT COUNT(*) FROM tabelle WHERE IP = '$ip'");
    $row = mysql_fetch_row($q);
    return $row[0] > 0;
}

if(hasVoted($_SERVER['REMOTE_ADDR'])) {
    include("poll/poll.php");
}
else {
    include("poll/vote.php");
} 
}
?>
Aber es kommt folgende Fehlermeldung:
Zitat:
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /www/htdocs/w005fc20/frame.php on line 64
line 64 ist folgende:
Code:
    $row = mysql_fetch_row($q);
max-dhom ist offline  
Alt 29.11.2005, 11:37  
Gast
 
Beiträge: n/a
Standard

Lösung:

Du speicherst die IP des Benutzers nach der Abstimmung in der Tabelle. Bei jedem Aufruf der Seite suchst du in der Tabelle nach der IP des Benutzers. Wenn vorhanden, inkludiere die Ergebnisseite. Wenn nicht vorhanden, inkludiere die Abstimmungsseite.

Mehr ist es nicht.

Die Suche der IP in der Tabelle:

Code:
function hasVoted($ip)
{
    $q = mysql_query("SELECT COUNT(*) FROM tabelle WHERE ip = '$ip'");
    $row = mysql_fetch_row($q);
    return $row[0] > 0;
}

if(hasVoted($_SERVER['REMOTE_ADDR'])) {
    include("ergebnis.php");
}
else {
    include("abstimmung.php");
}
Das Abstimmungsformular kann auf dieselbe Seite wiederkehren.
 
Alt 29.11.2005, 11:37  
Erfahrener Benutzer
 
Registriert seit: 12.07.2005
Beiträge: 279
max-dhom
max-dhom eine Nachricht über MSN schicken
Standard

ah habe den fehler gefunden

Vielen vielen Dank!
Max
max-dhom ist offline  
Alt 29.11.2005, 11:39  
Erfahrener Benutzer
 
Registriert seit: 09.03.2005
Beiträge: 219
webbi
Standard

würde mir für dieses Problem keine unnötige Arbeit machen, da eine IP Sperre viel zu leicht umgangen werden kann.

Eine Umfrage ohne Anmeldung der Teilnehmer kann nie genau sein und wird mit einer IP Sperre, Cookie Sperre oder was auch immer genauso ungenau sein wie ohne.
webbi ist offline  
Alt 29.11.2005, 11:39  
Gast
 
Beiträge: n/a
Standard

Wieso steht denn mein Beitrag nochmal da?

Hab wohl die Dankesseite reloadet ^^
 
Alt 29.11.2005, 11:41  
Erfahrener Benutzer
 
Registriert seit: 12.07.2005
Beiträge: 279
max-dhom
max-dhom eine Nachricht über MSN schicken
Standard

@webbi: Ja, das habe ich auch shcon öfters gelesen. Aber bei meiner Umfrage ist es eigentlich nicht wirklich schlimm wenn da jemand bescheisst, aber halt nicht schön. Ich glaube auch kaum dass da jemand interesse daran hätte...
max-dhom ist offline  
Alt 29.11.2005, 11:57  
Erfahrener Benutzer
 
Registriert seit: 12.07.2005
Beiträge: 279
max-dhom
max-dhom eine Nachricht über MSN schicken
Standard

hmm ich habe doch noch ein Problem:

und zwar möchte ich ja jetzt auch nur die Zeilen überprüfen die auch noch die höchste UmfrageID haben! Denn wenn jetzt jemand bei der Umfrage 1 schonmal abgestimmt hat, dann soll er ja bei Umfrage 2 wieder abtimmen können!
Folgender Befehl klappt aber irgendwie nicht:
Code:
<?php
$sql = "SELECT
			ID
 	 FROM
			Umfrage
 	 ORDER BY
			ID DESC
	 LIMIT 1;            
";
	    $result = mysql_query($sql) OR die(mysql_error());
 echo "";

 while($row = mysql_fetch_assoc($result)) {


function hasVoted($ip)
{
    $q = mysql_query("SELECT COUNT(*) FROM UmfrageIP WHERE IP = '$ip' AND UmfrageID = 'ID'");

.......
max-dhom ist offline  
Alt 29.11.2005, 12:03  
Gast
 
Beiträge: n/a
Standard

Da dir die UmfrageId ja zur Zeit der Umfrage bekannt ist, kannst du sie der Funktion übergeben.

Bring aber erstmal obigen Code in Ordnung. Eine Funktion deklariert man nicht in einer Schleife und den Zweck der SQL-Abfrage oberhalb versteh ich auch nicht.
 
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Frage zur dauerhaften voting sperre! litterauspirna PHP Tipps 2008 19 29.05.2008 16:19
Frage zu spam bots und captcha litterauspirna PHP Tipps 2008 6 20.05.2008 23:56
DNS Problem / Frage b++ Server, Hosting und Workstations 3 12.10.2006 13:27
Frage zu einem mySQL/php/html Konstrukt &lt;Daniel&gt; PHP Tipps 2006 5 11.07.2006 16:07
Reload - Sperre bei Datenübermittlung an MySQL? Stümper PHP Tipps 2006 3 12.06.2006 02:11
Frage zu Counter PHP Tipps 2006 1 17.02.2006 21:45
Frage zu grafiken JohnRambo PHP Tipps 2005-2 23 16.08.2005 20:57
[Erledigt] frage PHP Tipps 2005-2 9 15.06.2005 13:22
Performence Frage PHP-Fortgeschrittene 10 06.05.2005 19:00
Frage zu einem Editformular PHP Tipps 2005 3 25.04.2005 14:58
Technische Frage zur Realisation einer Online-Umfrage Stefano PHP Tipps 2005 5 16.03.2005 17:39
kleine frage zu ip sperre PHP Tipps 2004-2 5 15.12.2004 19:01
[Erledigt] Frage zur Funkrionen? PHP Tipps 2004-2 10 01.12.2004 09:42
Kurze Frage an die Php Profis PHP Tipps 2004-2 11 24.11.2004 17:38
[Erledigt] Frage! PHP Tipps 2004 4 27.07.2004 11:25

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
abstimmung ip, abstimmungsformular php, ip sperre umgehen abstimmung, php ip sperre abstimmung, ip-sperre php umfrage, abstimmung ip sperre umgehen, poll ip-voting sperre aufheben, pollvote ip sperre umgehen, vote ip sperre, votingsperre umgehen, counter ipsperre sql, http://www.php.de/php-tipps-2007/34280-mal-wieder-eine-frage-zur-ip-sperre.html, voting umgehen der ip sperre, ip sperre nach submit, html abstimmung ip sperre, poll php ohne anmeldung, formular ip sperren

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:49 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.