Ankündigung

Einklappen
Keine Ankündigung bisher.

Mal wieder eine Frage zur IP-Sperre

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • max-dhom
    hat ein Thema erstellt Mal wieder eine Frage zur IP-Sperre.

    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
    antwortet
    Ok, danke für die Tipps, jetzt hab ichs glaub ich!
    Schaut jetzt so aus:
    Code:
    <?php
    
    $sql ="	SELECT
    		ID
    	FROM
    		Umfrage
    	ORDER BY
    		ID DESC
    	LIMIT 
    		1";
     $result = mysql_query($sql) OR die(mysql_error());
            
     $row = mysql_fetch_assoc($result);
    
    echo $row['ID'];
    
    $id = $row['ID'];
    
    function hasVoted($ip,$id)
    {
        $q = mysql_query("SELECT COUNT(*) FROM UmfrageIP WHERE ip = '$ip' AND UmfrageID = '$id'");
        $row = mysql_fetch_row($q);
        return $row[0] > 0;
    }
    
    if(hasVoted($_SERVER['REMOTE_ADDR'], $id)) {
        include("poll/poll.php");
    }
    else {
        include("poll/vote.php");
    } 
    ?>

    Einen Kommentar schreiben:


  • xabbuh
    antwortet
    Du musst das Ergebnis der ersten SELECT-Abfrage mit mysql_fetch_*() in ein Array oder Objekt speichern, damit du es dann $idumfrage zuweisen kannst. Im Moment ist $row['UmfrageID'] ja gar nicht definiert.

    Einen Kommentar schreiben:


  • Zergling-new
    antwortet
    Es fehlt eine mysql_fetch_*() Funktion
    Bitte Grundlagen lernen und nicht alles vorkauen lassen.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Du musst nicht ASC sondern DESC ordnen, wenn du willst, dass immer die neueste Umfrage erscheint. Des Weiteren hast du im vorherigen Code statt UmfrageID einfach nur ID verwendet. Welcher Feldname existiert denn nun in deiner Tabelle?

    Die $idumfrage musst du der Funktion übergeben:

    Code:
    function hasVoted($ip, $umfrageId)
    {
    }
    
    // und die Anwendung:
    if(hasVoted($_SERVER..., $idumfrage))...

    Einen Kommentar schreiben:


  • max-dhom
    antwortet
    Code:
    <?php
    
    $sql ="	SELECT
    		UmfrageID
    	FROM
    		UmfrageIP
    	ORDER BY
    		UmfrageID ASC
    	LIMIT 
    		1";
    
    $result = mysql_query($sql) OR die(mysql_error());
    
    $idumfrage = $row['UmfrageID'];
    
    function hasVoted($ip)
    {
        $q = mysql_query("SELECT COUNT(*) FROM UmfrageIP WHERE ip = '$ip' AND UmfrageID = '$idumfrage'");
        $row = mysql_fetch_row($q);
        return $row[0] > 0;
    }
    
    if(hasVoted($_SERVER['REMOTE_ADDR'])) {
        include("poll/poll.php");
    }
    else {
        include("poll/vote.php");
    } 
    ?>
    So hätte ich es jetzt. Aber irgendwie funktioniert die Definition der Vriable $idumfrage noch nicht!

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Ich bin sicher, das findest du heraus

    Einen Kommentar schreiben:


  • max-dhom
    antwortet
    hmm ja da fehlts halt bei mir das verstehe ich selber nicht so genau

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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.

    Einen Kommentar schreiben:


  • max-dhom
    antwortet
    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'");
    
    .......

    Einen Kommentar schreiben:


  • max-dhom
    antwortet
    @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...

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Wieso steht denn mein Beitrag nochmal da?

    Hab wohl die Dankesseite reloadet ^^

    Einen Kommentar schreiben:


  • webbi
    antwortet
    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.

    Einen Kommentar schreiben:


  • max-dhom
    antwortet
    ah habe den fehler gefunden

    Vielen vielen Dank!
    Max

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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.

    Einen Kommentar schreiben:

Lädt...
X