Eine einfache Umfrage erstellen ....

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

  • Eine einfache Umfrage erstellen ....

    Irgendwie komme ich nicht mehr weiter. Bitte um Hilfe:

    Ich möchte eine einfache Umfrage erstellen, was so erst einmal kein Problem darstellt. Allerdings möchte ich, das
    man nur die Möglichkeit hat, 1x die Stunde wählen zu können, um ein Missbrauch ein wenig zu dämpfen.

    Dafür habe ich mir eine Tabelle angelegt mit den Feldern: ID, Choice, IP, Date

    Unter "Date" $date=date("Y-m-d H:i:s"); wird das aktuelle Datum in die Tabelle eingefügt: 2001-11-28 19:20:02
    Mit der variable "newvote" habe ich die Zeit festgelegt, wann der User mit der gleichen IP wieder wählen darf: 20:20:02
    Die IP-Adresse wird durch $ip=$REMOTE_ADDR; ermittelt.

    Wie kann ich jetzt aber erreichen, das man die User-IP-Adresse mit der Datenbank vergleicht und somit feststellt, ob die Wartezeit für die Neuwahl abgelaufen ist oder nicht?

  • #2
    Poste mal dein Script, damit wir das vernünftig einbauen können... Ich möcht keine Pauschallösung bringen.

    CAT Music Files

    Kommentar


    • #3
      OK, hier ist es:
      PS: Die Tabelle heißt: vote_christmas
      Thx!

      <?php

      $mysqlhost='xxxxx';
      $mysqluser='xxxxx';
      $mysqlpasswd='xxxxx';
      $mysqldbname='xxxxx';

      //IP-Adresse ermitteln:
      $ip=$REMOTE_ADDR;

      //Neues Voting in genau einer Stunde möglich:
      $date=date("Y-m-d H:i:s");
      $zeit=date("U")+3600;
      $newvote=date("H:i",$zeit);


      //Datenbank aufrufen und IP-Adresse und Datum vergleichen:
      //ABER WIE???
      $ergebnis = mysql_query("SELECT ip, date FROM vote_christmas WHERE id LIKE $ip");
      // ... ????
      if ($date < $newvote) {
      echo"<p><b> Du hast schon vor kurzem gewählt. \nEine Neuwahl ist erst
      nach einer Stunde möglich. Genau um: $newvote";
      exit();
      }


      // Verbindung zur Datenbank herstellen
      $link = @mysql_pconnect($mysqlhost, $mysqluser, $mysqlpasswd);
      if ($link == FALSE) {
      echo "<p><b>Leider kann keine Verbindung zur Datenbank
      hergestellt werden. Daher können die Ergebnisse
      zur Zeit nicht angezeigt werden. Bitte versuchen
      Sie es später noch einmal.
      </body></html>\n";
      exit();
      }
      mysql_select_db($mysqldbname);


      // falls Formulardaten zur Verfügung stehen: auswerten + speichern

      if($submitbutton=="Stimme abgeben") {
      if($vote>=1 && $vote<=2) {
      mysql_query("INSERT INTO vote_christmas (choice,ip, ort,date) VALUES ('$vote','$ip','$ort','$date')");
      }
      else {
      echo "<p>Keine gültige Wahl. Bitte wählen Sie
      noch einmal. Zurück zum
      <a href=\"./vote.html\">Wahlformular</a>.
      </body></html>\n";
      exit();
      }
      }

      // Ergebnisse anzeigen
      echo "<P><B>Gibt es in diesem Jahr eine ''weiße Weihnacht''?</B>\n";

      // Anzahl der abgegebenen Stimmen
      $result = mysql_query("SELECT COUNT(choice) FROM vote_christmas");
      $choice_count = mysql_result($result, 0, 0);

      // Prozentzahlen für die einzelnen Ergebnisse
      if($choice_count == 0) {
      echo "<p>Es hat noch keiner gewählt.\n";
      }
      else {
      echo "<p>$choice_count Personen haben bisher an dieser
      Umfrage teilgenommen:<br>\n";
      $choicetext = array("", "Ja, natürlich.", "Nein, ich glaube nicht.");
      for($i=1; $i<=2; $i++) {
      $result = mysql_query(
      "SELECT COUNT(choice) FROM vote_christmas " .
      "WHERE choice = $i");
      $choice[$i] = mysql_result($result, 0, 0);
      $percent = round($choice[$i]/$choice_count*10000)/100;
      print("<br>$percent % - $choicetext[$i]\n");
      }
      }

      ?>

      Kommentar


      • #4
        Mach ein timestamp-Feld draus, da tust du dich viel leichter (oder besser gesagt ich). Unter dieser Voraussetzung:

        //Neues Voting in genau einer Stunde möglich:
        $timediff = 60*60;

        //Datenbank aufrufen und IP-Adresse und Datum vergleichen:
        //ABER WIE???
        $ergebnis = mysql_query("SELECT date FROM vote_christmas WHERE id='$ip' AND NOW()<date+$timediff");
        if (mysql_num_rows($ergebnis)>=1) {
        $date = mysql_result($ergebnis,0);
        echo"<p><b> Du hast schon vor kurzem gewählt. \nEine Neuwahl ist erst
        nach einer Stunde möglich. Genau um: ".date("H:i:s",$date+$timediff);
        exit();
        }

        CAT Music Files

        Kommentar


        • #5
          Danke für deine schnelle Hilfe! :-))
          Bekomme aber leider noch beim Voting eine Fehlermeldung:
          Warning: Supplied argument is not a valid MySQL result resource in z:\www\php\voting\results.php on line 29

          Das wäre diese Zeile: if (mysql_num_rows($ergebnis)>=1) {

          Kommentar


          • #6
            dann bitte

            $ergebnis = mysql_query("SELECT date FROM vote_christmas WHERE id='$ip' AND NOW()<date+$timediff");

            ersetzen durch

            $sql = "SELECT date FROM vote_christmas WHERE id='$ip' AND NOW()<date+$timediff";
            $ergebnis = mysql_query($sql) or die($sql.'<br><br>'.mysql_error());

            CAT Music Files

            Kommentar


            • #7
              Mhhhh, ich will ja nicht nerven, aber jetzt kommt nach dem Voting folgende Meldung:

              Umfrageergebnis

              SELECT date FROM vote_christmas WHERE id='127.0.0.1' AND NOW()
              You have an error in your SQL syntax near '+3600' at line 1


              Die Ergebnisse werden jetzt erst gar nicht angezeigt.
              Da ich mich erst seit Anfang dieser Woche mit PHP beschäftige, kann ich mit dieser Meldung wenig anfangen ...

              Kommentar


              • #8
                Schon in Ordnung...

                $sql = "SELECT date FROM vote_christmas WHERE id='$ip' AND NOW()<DATE_ADD(date,INTERVAL $timediff SECOND)";
                $ergebnis = mysql_query($sql) or die($sql.'<br><br>'.mysql_error());

                CAT Music Files

                Kommentar


                • #9
                  Jetzt kommt diese Meldung:

                  Umfrageergebnis

                  SELECT date FROM vote_christmas WHERE ip='127.0.0.1' AND NOW()
                  No Database Selected

                  Kommentar


                  • #10
                    $mysqlhost='xxxxx';
                    $mysqluser='xxxxx';
                    $mysqlpasswd='xxxxx';
                    $mysqldbname='xxxxx';

                    $db = mysql_connect($mysqlhost,$mysqluser,$mysqlpasswd);
                    mysql_select_db($mysqldbname,$db);

                    CAT Music Files

                    Kommentar


                    • #11
                      Sieht eigentlich ganz gut aus:

                      Umfrageergebnis

                      Gibt es in diesem Jahr eine ''weiße Weihnacht''?

                      77 Personen haben bisher an dieser Umfrage teilgenommen:

                      51.95 % - Ja, natürlich.
                      48.05 % - Nein, ich glaube nicht.

                      Doch ich kann so oft hintereinander wählen wie ich möchte.
                      Eine Meldung kommt da nicht, leider.

                      Kommentar


                      • #12
                        Wohl ein logischer Fehler, try:

                        $sql = "SELECT date FROM vote_christmas WHERE id='$ip' AND NOW()>DATE_ADD(date,INTERVAL $timediff SECOND)";

                        CAT Music Files

                        Kommentar


                        • #13
                          Neh, immer noch nicht.
                          Meine Tabelle "date" habe ich als timestamp-Feld definiert.
                          Dort sehen die Einträge nun so aus: 20011128222450 Diese wurde mit dem Befehl $date=date("Y-m-d H:i:s"); erreicht.

                          Wenn du willst, kannst du das auch auf morgen verschieben...

                          Kommentar


                          • #14
                            So nicht, du gehst mit dem timestamp-Feld völlig falsch um! Du solltest es mit date=NOW() oder date=$time setzen, wobei $time = time().

                            CAT Music Files

                            Kommentar


                            • #15
                              timestamp-Felder werden doch eh automatisch gesetzt ...
                              mein Sport: mein Frühstück: meine Arbeit:

                              Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                              Kommentar

                              Lädt...
                              X