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

  • 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

  • #2
    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.

    Kommentar


    • #3
      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:
      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);

      Kommentar


      • #4
        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.

        Kommentar


        • #5
          ah habe den fehler gefunden

          Vielen vielen Dank!
          Max

          Kommentar


          • #6
            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.

            Kommentar


            • #7
              Wieso steht denn mein Beitrag nochmal da?

              Hab wohl die Dankesseite reloadet ^^

              Kommentar


              • #8
                @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...

                Kommentar


                • #9
                  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'");
                  
                  .......

                  Kommentar


                  • #10
                    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.

                    Kommentar


                    • #11
                      hmm ja da fehlts halt bei mir das verstehe ich selber nicht so genau

                      Kommentar


                      • #12
                        Ich bin sicher, das findest du heraus

                        Kommentar


                        • #13
                          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!

                          Kommentar


                          • #14
                            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))...

                            Kommentar


                            • #15
                              Es fehlt eine mysql_fetch_*() Funktion
                              Bitte Grundlagen lernen und nicht alles vorkauen lassen.

                              Kommentar

                              Lädt...
                              X