Ankündigung

Einklappen
Keine Ankündigung bisher.

Insert Problem mit IP sperre....

Einklappen

Neue Werbung 2019

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

  • Insert Problem mit IP sperre....

    Hallo,
    ich hab ein kleines Quiz gemacht aber irgendwie läuft das nicht ganz
    es werden trozdem die einträge gespeichert mit gleicher IP
    aber es sollte dann ne fehler meldung kommen diese passiert aber nicht. er tragt es ein und nach lust und laune tut er es nicht und nach wenigen minuten wenn man alles neu eingibt tut er es wieder weiß aber nicht woran das liegt

    Code:
    <html>
    
    <body>
    <?
    
    if ($submit) 
    
    {
    $punkte = 0;
    
    $dip = $_SERVER['REMOTE_ADDR'];
    
    $mysql = mysql_connect("localhost", "user", "pw");
    mysql_select_db("database", $mysql);
    
    $query = "SELECT * FROM quiz WHERE ip = $dip"; 
    $resultt = mysql_query($query, $mysql); 
    
    $rew = mysql_fetch_array($resultt);
    
    $ip = $rew['ip'];
    
    if($ip == "$dip")
    {
    echo "Sry IP vorhanden";
    }
    else
    {
    echo "OK"
    $ip = $dip;
    }
    
    if($f1 == "4") {
    $punkte = $punkte + 1;
    }
    else
    {
    $punkte = $punkte + 0;
    }
    
    if($f2 == "Essbesteck")
    {
    $punkte = $punkte + 1;
    }
    else
    {
    $punkte = $punkte + 0;
    }
    
    if(($name <> "") && ($email <> "") && ($ip <> "") && ($punkte <> ""))
    {
    $db = mysql_connect("localhost", "user", "pw");
    
    mysql_select_db("database", $db);
    
    $sql = "INSERT INTO quiz (name,email,datum,ip,punkte) 
    
    VALUES('$name', '$email', now(), '$ip', '$punkte')";
    
    $result = mysql_query($sql,$db);
    
    echo "Vielen Dank!
    ";
    echo "<a href=\"hall.php\">Hall of Fame</a>";
    }else { echo "Sie haben schon Mitgespielt"; }
    }
    else
    ?>
    
    
    <form method="post" <?php echo "action=quiz.php"; ?>>
    
    <table border="0">
    
    <tr><td>Spieler: </td><td><input type="text" name="name" value="<? echo $name ?>" size="20"></td></tr>
    
    <tr><td>E-Mail: </td><td><input type="text" name="email" value="<? echo $email ?>" size="20"></td></tr>
    
    <tr><td> Frage 1</td><tr>
    <tr><td> wie viel ist 2+2</tr></td>
    <tr><td><input type="radio" name="f1" value="4">4
    
            <input type="radio" name="f1" value="3">3
    
            <input type="radio" name="f1" value="2">2</td></tr>
    
    
    
    
    <tr><td> Frage 2</td><tr>
    <tr><td> Was ist eine Gabel</tr></td>
    <tr><td><input type="radio" name="f2" value="Essen">Essen
    
            <input type="radio" name="f2" value="Essbesteck">Essbesteck
    </td></tr>
    <input type="submit" name="submit" value="Fertig">
    
    
    </form>
    </body>
    
    </html>


  • #2
    Also als erstes würde ich nicht
    $dip = $_SERVER['REMOTE_ADDR'];

    und bei der abfrage einfach
    $query = "SELECT * FROM quiz WHERE ip = '$_SERVER[REMOTE_ADDR]'";

    und dann
    if($rew['ip'] == $_SERVER['REMOTE_ADDR'])

    Dann würde ich den Connect zur Datenbank in ne function hauen und nit jedes mal schreiben ... das ist unnötig!

    Und $punkte = $punkte + 1; kannst du auch
    $punkte++; schreiben!

    Kommentar


    • #3
      Warum benutzt du nicht die BBCode PHP-Tags?

      PHP-Code:
      <html>
      <body>
      <?php // benutz <?php und nicht nur <?
      if ($submit// siehe *1
      {
      $punkte 0;
      $dip $_SERVER['REMOTE_ADDR']; // wozu eine Variable kopieren?
      $mysql mysql_connect("localhost""user""pw"); // *2
      mysql_select_db("database"$mysql);

      $query "SELECT * FROM quiz WHERE ip = $dip"// *3
      $resultt mysql_query($query$mysql); // das 2. Argument ist optional und wenn du nicht mehrere Datenbankverbindungen geöffnet hast nicht nötig

      $rew mysql_fetch_array($resultt); // wozu (absichtlich) resultt mit doppel-T?

      $ip $rew['ip']; // wozu wieder eine Kopie anlegen?

      if($ip == "$dip"// wozu die Anführungszeichen?
      {
      echo 
      "Sry IP vorhanden";
      }
      else
      {
      echo 
      "OK"
      $ip $dip;
      }

      if(
      $f1 == "4") { // Zahlenvergleiche ohne "
      $punkte $punkte 1// $punkte++
      }
      else
      {
      $punkte $punkte 0// sinnlos, weglassen
      }

      if(
      $f2 == "Essbesteck")
      {
      $punkte $punkte 1// siehe oben
      }
      else
      {
      $punkte $punkte 0// s.o.
      }

      if((
      $name <> "") && ($email <> "") && ($ip <> "") && ($punkte <> "")) // *4
      {
      $db mysql_connect("localhost""user""pw"); // wozu das?
      mysql_select_db("database"$db); // nur zum DB wechseln brauchst du keine neue Verbindung?

      $sql "INSERT INTO quiz (name,email,datum,ip,punkte)

      VALUES('
      $name', '$email', now(), '$ip', '$punkte')"// wenn du SQL Befehle groß schreibst, dann alle, auch NOW()

      $result mysql_query($sql,$db);

      echo 
      "Vielen Dank!
      "
      // bitte
      echo "<a href=\"hall.php\">Hall of Fame</a>";
      }else { echo 
      "Sie haben schon Mitgespielt"; }
      }
      else 
      // fehlt hier nicht ne Klammer auf?
      ?>


      <form method="post" <?php echo "action=quiz.php"?>

      <table border="0">

      <tr><td>Spieler: </td><td><input type="text" name="name" value="<?php echo $name ?>" size="20"></td></tr>

      <tr><td>E-Mail: </td><td><input type="text" name="email" value="<?php echo $email ?>" size="20"></td></tr>

      <tr><td> Frage 1</td><tr>
      <tr><td> wie viel ist 2+2</tr></td>
      <tr><td><input type="radio" name="f1" value="4">4

              <input type="radio" name="f1" value="3">3

              <input type="radio" name="f1" value="2">2</td></tr>




      <tr><td> Frage 2</td><tr>
      <tr><td> Was ist eine Gabel</tr></td> 
      <tr><td><input type="radio" name="f2" value="Essen">Essen

              <input type="radio" name="f2" value="Essbesteck">Essbesteck
      </td></tr>
      <input type="submit" name="submit" value="Fertig">


      </form>
      </body>

      </html>
      *1 stelle register_globals bitte auf off und verwende statt $submit das $_POST['submit']. Warum:
      http://www.heddesheimer.de/coaching/register.html
      (weiß nicht ob die Seite gut ist, scheint aber die Problematik darzustellen)

      *2 Pack den Datenbankverbindungsaufbau in eine Funktion die du in eine
      extra Datei auslagerst, z.B. func.dbConnect.php. Diese kannst du per
      require_once einbinden. Das
      hat den Vorteil, dass du Änderungen des Passwortes oder MySQL-Servers
      zentral an einer Datei und nicht in zig Skripten ändern musst. Außerdem
      versucht ein Programmierer immer, doppelte Codeelemente zu
      vermeiden, da Änderungen sonst mehrfach vorgenommen werden
      müssen.
      Außerdem sei dir zu empfehlen, dass man üblicherweise schreibt
      PHP-Code:
      <?php
      mysql_connect
      (xyz) or die("Fehler: ".mysql_error());
      ?>
      *3 Dein SQL Befehl könnte dann so aussehen: "SELECT x FROM y WHERE
      ip = 12.34.56.78". Wo sind die Anführungszeichen?

      *4 siehe empty()

      Fazit: Dein Skript ist unsauber und daher für mich nicht wirklich
      nachzuvollziehen wo der Fehler ist. Wahrscheinlich an *3

      Kommentar


      • #4
        Das meiste hat Zergling schon gesagt. Fast noch wichtiger, als die richtigen Tags zu verwenden finde ich ein anständiges
        Einrücken des Codes. Ausserdem genügt es ja, abzufragen ob die IP schon existiert.
        Ich habe den Code mal etwas angepasst und überflüssiges auskommentiert:
        PHP-Code:
        <?
        echo "<html>
                  <body>";
        if ($submit)
        {
            $punkte = 0;
            $dip = $_SERVER['REMOTE_ADDR'];

            $mysql = mysql_connect("localhost", "user", "pw");
            mysql_select_db("database");

            $query = "SELECT ip FROM quiz WHERE ip = '$dip'";        
            $resultt = mysql_query($query) or die(mysql_error();
            $anz = mysql_num_rows($resultt);
        //    $rew = mysql_fetch_array($resultt);
        //    $ip = $rew['ip'];

        //    if($ip == "$dip")
            if($anz > 0)
            {
                echo "Sry IP vorhanden";
            }
            else
            {
                echo "OK"
                $ip = $dip;   
            }
            if($f1 == "4") {
                $punkte = $punkte + 1;
            }
        //    else
        //    {
        //        $punkte = $punkte + 0;
        //    }

            if($f2 == "Essbesteck")
            {
                $punkte = $punkte + 1;
            }
        //    else
        //    {
        //        $punkte = $punkte + 0;
        //    }
        //    if(($name <> "") && ($email <> "") && ($ip <> "") && ($punkte <> ""))
            if((!empty($_POST['name']) && !empty($_POST['email']) && !empty($ip))
            {
        //        $db = mysql_connect("localhost", "user", "pw"); // ist ja schon verbunden
        //        mysql_select_db("database", $db);
                $sql = "INSERT INTO quiz (name, email, datum, ip, punkte)
                        VALUES('$name', '$email', now(), '$ip', $punkte)";
                $result = mysql_query($sql)) or die(mysql_error();
                echo "Vielen Dank!
        ";
                echo "<a href=\"hall.php\">Hall of Fame</a>";
            }
            else 
            { 
                echo "Sie haben schon Mitgespielt";
            }
        }
        else
        {
        ?>
            <form method="post" action="quiz.php">

            <table border="0">

            <tr><td>Spieler: </td><td><input type="text" name="name" value="<? echo $name ?>" size="20"></td></tr>
            <tr><td>E-Mail: </td><td><input type="text" name="email" value="<? echo $email ?>" size="20"></td></tr>

            <tr><td> Frage 1</td><tr>
            <tr><td> wie viel ist 2+2</tr></td>
            <tr><td><input type="radio" name="f1" value="4">4

                    <input type="radio" name="f1" value="3">3

                    <input type="radio" name="f1" value="2">2</td></tr>
            

            

            <tr><td> Frage 2</td><tr>
            <tr><td> Was ist eine Gabel</tr></td>
            <tr><td><input type="radio" name="f2" value="Essen">Essen

                    <input type="radio" name="f2" value="Essbesteck">Essbesteck
        </td></tr>
            <input type="submit" name="submit" value="Fertig">


            </form>
            </body>

            </html>
        <?
        }
        ?>
        Noch zwei Bemerkungen:
        • Die Abfrage auf die IP-Adresse ist doch recht unsicher, alle die über den gleichen Router kommen haben auch die
          gleiche IP-Adresse. Ich denke, eine Überprüfung der Email-Adresse wäre zuverlässiger. Wenn du aber ganz sicher
          sein willst, dann brauchst du ein en Login.
          Woher sollen die Variablen $name und $email im unteren Teil kommen?
        Gruss
        L

        Kommentar


        • #5
          Ich danke euch sehr.
          ja ich weiß das ich funktionen in ne extra datei schreiben könnt und so aber das soll nur ein einfaches script werden ohne irgendwas anderes

          aber @lazydog
          ich hab den code von dir jetzt mal genommen da war noch ein ; und ein ) fehler aber trozdem wird ähm nichts angezeigt es bleibt alles weiß.

          warum?

          Kommentar


          • #6
            so das ist nun die version ohne den // und ohne den 3 fehlern

            aber es wird jetzt nichts mehr angezeigt nur waurm versteh ich nicht mehr.


            Code:
            <?php 
            echo "<html> 
                  <body>"; 
            
            if (submit) 
            { 
                $punkte = 0; 
                $dip = $_SERVER['REMOTE_ADDR']; 
            
                $mysql = mysql_connect("localhost", "user", "pw"); 
                mysql_select_db("db"); 
            
                $query = "SELECT ip FROM quiz WHERE ip = '$dip'";         
                $resultt = mysql_query($query) or die(mysql_error()); 
                $anz = mysql_num_rows($resultt); 
            
                if($anz > 0) 
                { 
                    echo "Sry IP vorhanden"; 
                } 
                else 
                { 
                    echo "OK"; 
                    $ip = $dip;    
                } 
            
                if($f1 == "4") { 
                    $punkte = $punkte + 1; 
                } 
            
                if($f2 == "Essbesteck") 
                { 
                    $punkte = $punkte + 1; 
                } 
                if((!empty($_POST['name']) && !empty($_POST['email']) && !empty($ip)) 
                { 
                    $sql = "INSERT INTO quiz (name, email, datum, ip, punkte) 
                            VALUES('$name', '$email', now(), '$ip', '$punkte')"; 
                    $result = mysql_query($sql) or die(mysql_error()); 
                    echo "Vielen Dank!
            "; 
                    echo "<a href=\"hall.php\">Hall of Fame</a>"; 
                } 
                else  
                {  
                    echo "Sie haben schon Mitgespielt"; 
                } 
            } 
            else 
            { 
            php?> 
                <form method="post" action="quiz.php"> 
            
                <table border="0"> 
            
                <tr><td>Spieler: </td><td><input type="text" name="name" value="<? echo $name ?>" size="20"></td></tr> 
                <tr><td>E-Mail: </td><td><input type="text" name="email" value="<? echo $email ?>" size="20"></td></tr> 
            
                <tr><td> Frage 1</td><tr> 
                <tr><td> wie viel ist 2+2</tr></td> 
                <tr><td><input type="radio" name="f1" value="4">4
             
                        <input type="radio" name="f1" value="3">3
             
                        <input type="radio" name="f1" value="2">2</td></tr> 
                
             
                
             
                <tr><td> Frage 2</td><tr> 
                <tr><td> Was ist eine Gabel</tr></td> 
                <tr><td><input type="radio" name="f2" value="Essen">Essen
             
                        <input type="radio" name="f2" value="Essbesteck">Essbesteck
            </td></tr> 
                <input type="submit" name="submit" value="Fertig"> 
            
            
                </form> 
                </body> 
            
                </html> 
            <?php
            } 
            php?>

            Kommentar


            • #7
              Zitat von Zergling
              Warum benutzt du nicht die BBCode PHP-Tags?
              [..]
              *1 stelle register_globals bitte auf off und verwende statt $submit das $_POST['submit']. Warum:
              http://www.heddesheimer.de/coaching/register.html
              (weiß nicht ob die Seite gut ist, scheint aber die Problematik darzustellen)
              Hast du mein Posting überhaupt gelesen?

              Zitat von Nosferatu
              aber es wird jetzt nichts mehr angezeigt nur waurm versteh ich nicht mehr.
              Nichts kann wohl schlecht sein, denn du fängst jeden Zustand mit deinen else-Konstrukten ab, zumindest soweit ich das jetzt gesehen habe.
              Wenn du in ein else kommst, ist logischerweise deine if-Bedingung unwahr.

              Kommentar


              • #8
                register_globals auf off macht mein hoster nicht

                und ich hab das jetzt geändert $_POST['submit'] nur es wird rein gar nichts auf der seite angezeigt der bildschirm bleibt weiß.

                Kommentar


                • #9
                  Zitat von Nosferatu
                  und ich hab das jetzt geändert $_POST['submit'] nur es wird rein gar nichts auf der seite angezeigt der bildschirm bleibt weiß.
                  Hast du dir mal den resultierenden HTML-Quelltext angesehen? Wie sieht der aus? Ist display_errors aktiviert? Steht auf error_reporting auf E_ALL?

                  Kommentar


                  • #10
                    Häng mal ein
                    Code:
                    error_reporting(E_ALL);
                    an den Anfang der Datei, und du wirst eine ganze Reihe Fehlermeldungen erhalten, z.B.
                    Code:
                    Notice: Use of undefined constant php - assumed 'php' in ...\quiz.php on line ..
                    weil PHP-Code mit
                    Code:
                    ?>
                    und nicht mit
                    Code:
                    php?>
                    beendet wird, oder über nicht definierte Variablen. Dann versuch mal diese Fehler zu eliminieren.
                    Gruss
                    L

                    Kommentar


                    • #11
                      Zitat von Nosferatu
                      register_globals auf off macht mein hoster nicht
                      Wer ist der Hoster, dein zwölfjähriger Nachbar?

                      Kommentar


                      • #12
                        muss ich einfach nur
                        <?php
                        error_reporting(E_ALL);
                        php?>

                        machen ?

                        da wird bei mir null angezeigt

                        und quelltext wenn ich ihn aufmache sieht so aus

                        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
                        <HTML><HEAD>
                        <META http-equiv=Content-Type content="text/html; charset=iso-8859-1"></HEAD>
                        <BODY></BODY></HTML>

                        und auf off macht mein hoster aus sicherheitsgründen nicht

                        PHP-Code:
                        <?php 
                        echo "<html> 
                              <body>"


                        if(
                        $_POST['submit'])  

                            
                        $punkte 0
                            
                        $dip $_SERVER['REMOTE_ADDR']; 

                            
                        $mysql mysql_connect("localhost"""""); 
                            
                        mysql_select_db(""); 

                            
                        $query "SELECT ip FROM quiz WHERE ip = '$dip'";         
                            
                        $resultt mysql_query($query) or die(mysql_error()); 
                            
                        $anz mysql_num_rows($resultt); 

                            if(
                        $anz 0
                            { 
                                echo 
                        "Sry IP vorhanden"
                            } 
                            else 
                            { 
                                echo 
                        "OK"
                                
                        $ip $dip;    
                            } 

                            if(
                        $f1 == "4") { 
                                
                        $punkte $punkte 1
                            } 

                            if(
                        $f2 == "Essbesteck"
                            { 
                                
                        $punkte $punkte 1
                            } 
                            if((!empty(
                        $_POST['name']) && !empty($_POST['email']) && !empty($ip) && !empty($punkte))  // da muss ich doch das gleiche mit punkte machen oder nicht? bis jetzt war es immer ohne !empty($punkte) oder kann ich das weg lassen ?
                            

                                
                        $sql "INSERT INTO quiz (name, email, datum, ip, punkte) 
                                        VALUES('
                        $name', '$email', now(), '$ip', '$punkte')"
                                
                        $result mysql_query($sql) or die(mysql_error()); 
                                echo 
                        "Vielen Dank!
                        "

                                echo 
                        "<a href=\"hall.php\">Hall of Fame</a>"
                            } 
                            else  
                            {  
                                echo 
                        "Sie haben schon Mitgespielt"
                            } 

                        else 

                        php?> 
                            <form method="post" action="quiz.php"> 

                            <table border="0"> 

                            <tr><td>Spieler: </td><td><input type="text" name="name" value="" size="20"></td></tr> 
                            <tr><td>E-Mail: </td><td><input type="text" name="email" value="" size="20"></td></tr> 

                            <tr><td> Frage 1</td><tr> 
                            <tr><td> wie viel ist 2+2</tr></td> 
                            <tr><td><input type="radio" name="f1" value="4">4
                         
                                    <input type="radio" name="f1" value="3">3
                         
                                    <input type="radio" name="f1" value="2">2</td></tr> 
                            
                         
                            
                         
                            <tr><td> Frage 2</td><tr> 
                            <tr><td> Was ist eine Gabel</tr></td> 
                            <tr><td><input type="radio" name="f2" value="Essen">Essen
                         
                                    <input type="radio" name="f2" value="Essbesteck">Essbesteck
                        </td></tr> 
                            <input type="submit" name="submit" value="Fertig"> 


                            </form> 
                            </body> 

                            </html> 
                        <?php

                        php?>

                        Kommentar


                        • #13
                          Zitat von Nosferatu
                          muss ich einfach nur
                          <?php
                          error_reporting(E_ALL);
                          php?>
                          Ja, an den Anfang deines Scriptes. Außerdem zusätzlich ini_set('display_errors', true).

                          Zitat von Nosferatu
                          und auf off macht mein hoster aus sicherheitsgründen nicht
                          Bei was für einem Hoster bist du denn bitte?

                          Kommentar


                          • #14
                            so es läuft nun

                            ich hab
                            if((!empty($_POST['name']) && !empty($_POST['email']) && !empty($ip) && !empty($punkte))


                            mit

                            if(($name <> "") && ($email <> "") && ($ip <> "") && ($punkte <> ""))

                            ausgetauscht

                            kann mir jemand sagen was !empty($_POST['name']) überhaupt macht und und ($name <> "")

                            bzw könnte mir jemand ne hilfe oder ne tipp seite sagen wo ich genau erklärt bekomme mit

                            if($variable == "") und <> "" und ....

                            und hilfe zum zerlegen oder was diese wie heißt das strcmp oder so macht ...

                            mein hoster kann ich euch leider nicht nennen tut mir leid

                            Kommentar


                            • #15
                              Zitat von Nosferatu
                              so es läuft nun

                              ich hab
                              if((!empty($_POST['name']) && !empty($_POST['email']) && !empty($ip) && !empty($punkte))


                              mit

                              if(($name <> "") && ($email <> "") && ($ip <> "") && ($punkte <> ""))

                              ausgetauscht
                              Welche PHP-Version läuft denn bitte auf dem Server?

                              Zitat von Nosferatu
                              kann mir jemand sagen was !empty($_POST['name']) überhaupt macht und und ($name <> "")
                              - http://www.php.net/empty
                              - http://www.php.net/manual/en/languag...comparison.php

                              Zitat von Nosferatu
                              und hilfe zum zerlegen oder was diese wie heißt das strcmp oder so macht ...
                              - http://www.php.net/strcmp

                              Kommentar

                              Lädt...
                              X