Poll ignoriert die 1. Abstimmung, erst der 2. Versuch funktioniert - wieso?

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

  • Poll ignoriert die 1. Abstimmung, erst der 2. Versuch funktioniert - wieso?

    Hallo!
    Habe in den letzten Tagen schon gute Hilfe von euch bekommen. Jetzt habe ich es fast geschafft, komme beim vermutlich letzten Problem aber nicht weiter:
    Bei folgendem Poll muss ich immer 2x abstimmen, bevor die Wertung gezaehlt wird:
    http://www.mkschubert.de/umfrage1/

    Aus irgendwelchen Gruenden wird der Versuch komplett ignoriert.

    Bei diesem Poll funktioniert es hingegen einwandfrei schon beim ersten Versuch:
    http://www.mkschubert.de/umfrageusa/
    Warum?
    Ich habe immer und immer wieder geschaut. Ich kann keinen Fehler feststellen.

    Hier ist der Quelltext der fehlerhaften php-Datei (umfrage1.php):

    <?php
    // Datei, in der die Bewertungen gespeichert werden:
    $fname = "umfrage1.dat";

    if (isset($_POST['r1'])) { $r1 = $_POST['r1']; }

    $data = file($fname);
    $entry_count = count($data);
    $ip = $_SERVER["REMOTE_ADDR"];

    $datum = date("d.m.Y");
    $zeit = date("H:i");

    // überprüfen, ob der User heute schon bewertet hat:
    for ($i = 0; $i < $entry_count; $i++) {
    $part = explode("|", $data[$i]);
    if ($ip == $part[2] && $datum == $part[0]) { $schon="ja"; }
    }
    // ... wenn nicht, dann Bewertung speichern (falls Formulardaten gesendet wurden):
    if (empty($schon) && isset($r1)) {
    $eintrag = "$datum|$zeit|$ip|$r1|\n";
    $fp = fopen($fname, 'a');
    flock($fp, 2);
    fwrite($fp, $eintrag);
    flock($fp, 3);
    fclose($fp);
    }
    // Auswertung der Bewertungs-Datei:
    $data = file($fname);
    $entry_count = count($data);
    $spd_c = 0; $cdu_c = 0; $gruene_c = 0; $fdp_c = 0; $pds_c = 0; $sonst_c = 0; $dkp_c = 0; $csu_c = 0; $dvu_c = 0; $npd_c = 0;

    for ($i = 0; $i < $entry_count; $i++) {
    $part = explode("|", $data[$i]);
    // zusammenzähen:
    if ($part[3] == "spd") { $spd_c++; }
    if ($part[3] == "cdu") { $cdu_c++; }
    if ($part[3] == "gruene") { $gruene_c++; }
    if ($part[3] == "fdp") { $fdp_c++; }
    if ($part[3] == "pds") { $pds_c++; }
    if ($part[3] == "sonst") { $sonst_c++; }
    if ($part[3] == "dkp") { $dkp_c++; }
    if ($part[3] == "csu") { $csu_c++; }
    if ($part[3] == "dvu") { $dvu_c++; }
    if ($part[3] == "npd") { $npd_c++; }
    }
    // Prozente berechnen:
    if ($entry_count != 0) {
    $spd = number_format(($spd_c / $entry_count) * 100, 1);
    $cdu = number_format(($cdu_c / $entry_count) * 100, 1);
    $gruene = number_format(($gruene_c / $entry_count) * 100, 1);
    $fdp = number_format(($fdp_c / $entry_count) * 100, 1);
    $pds = number_format(($pds_c / $entry_count) * 100, 1);
    $sonst = number_format(($sonst_c / $entry_count) * 100, 1);
    $dkp = number_format(($dkp_c / $entry_count) * 100, 1);
    $csu = number_format(($csu_c / $entry_count) * 100, 1);
    $dvu = number_format(($dvu_c / $entry_count) * 100, 1);
    $npd = number_format(($npd_c / $entry_count) * 100, 1);
    }
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <meta http-equiv="Content-Language" content="de">
    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
    <meta name="robots" content="noindex, nofollow">
    <title>Umfrage</title>
    <style type="text/css">
    <!--
    body { color: #000000; background: #ffffff; margin: 20px; padding: 0px; }
    .normal { font-family: verdana, arial, sans-serif; font-size: 13px; }
    td { height: 20px; color: #000000; background: #ffffff; font-family: verdana, arial, helvetica, sans-serif; font-size: 10pt; }
    .hinw { font-family: verdana, arial, sans-serif; font-size: 10pt; color: #ffffff; background: #ff0000; font-weight: bold; }
    .gr { font-family: verdana, arial, sans-serif; font-size: 18px; font-weight: bold; }
    -->
    </style>
    </head>
    <body>
    <?php if (isset($schon) && isset($r1)) {echo "<p><span class=\"hinw\">Es wurde bereits eine Bewertung aufgenommen!</span></p>"; } ?>
    <?php if ($entry_count > 0) { ?>
    <p class="normal">Auf welche Art reist Du am liebsten?<br>
    (<?php echo $entry_count; ?> Stimmen insgesamt)</p>
    <table border="0" cellpadding="0" cellspacing="0">
    <tr>
    <td><b>Flugzeug:&nbsp;</b></td>
    <td><?php echo $spd; ?> %&nbsp;</td>
    <td><img src="spd.gif" width="<?php echo number_format($spd,0)*2+2; ?>" height="10" alt="" border="0"></td>
    </tr>
    <tr>
    <td><b>Auto:&nbsp;</b></td>
    <td><?php echo $cdu; ?> %&nbsp;</td>
    <td><img src="cdu.gif" width="<?php echo number_format($cdu,0)*2+2; ?>" height="10" alt="" border="0"></td>
    </tr>
    <tr>
    <td><b>Bus:&nbsp;</b></td>
    <td><?php echo $gruene; ?> %&nbsp;</td>
    <td><img src="gruene.gif" width="<?php echo number_format($gruene,0)*2+2; ?>" height="10" alt="" border="0"></td>
    </tr>
    <tr>
    <td><b>Bahn:&nbsp;</b></td>
    <td><?php echo $fdp; ?> %&nbsp;</td>
    <td><img src="fdp.gif" width="<?php echo number_format($fdp,0)*2+2; ?>" height="10" alt="" border="0"></td>
    </tr>
    <tr>
    <td><b>Fahrrad:&nbsp;</b></td>
    <td><?php echo $pds; ?> %&nbsp;</td>
    <td><img src="pds.gif" width="<?php echo number_format($pds,0)*2+2; ?>" height="10" alt="" border="0"></td>
    </tr>
    <tr>
    <td><b>zu Fuß:&nbsp;</b></td>
    <td><?php echo $sonst; ?> %&nbsp;</td>
    <td><img src="sonst.gif" width="<?php echo number_format($sonst,0)*2+2; ?>" height="10" alt="" border="0"></td>
    </tr>
    <tr>
    <td><b>Schiff:&nbsp;</b></td>
    <td><?php echo $dkp; ?> %&nbsp;</td>
    <td><img src="dkp.gif" width="<?php echo number_format($dkp,0)*2+2; ?>" height="10" alt="" border="0"></td>
    </tr>
    <tr>
    <td><b>Motorrad:&nbsp;</b></td>
    <td><?php echo $csu; ?> %&nbsp;</td>
    <td><img src="csu.gif" width="<?php echo number_format($csu,0)*2+2; ?>" height="10" alt="" border="0"></td>
    </tr>
    <tr>
    <td><b>Wohnmobil/Caravan:&nbsp;</b></td>
    <td><?php echo $dvu; ?> %&nbsp;</td>
    <td><img src="dvu.gif" width="<?php echo number_format($dvu,0)*2+2; ?>" height="10" alt="" border="0"></td>
    </tr>
    <tr>
    <td><b>Andere:&nbsp;</b></td>
    <td><?php echo $npd; ?> %&nbsp;</td>
    <td><img src="npd.gif" width="<?php echo number_format($npd,0)*2+2; ?>" height="10" alt="" border="0"></td>
    </tr>
    </table>
    <?php } else { ?><p class="normal">Es wurde noch keine Stimme abgegeben</p><?php } ?>
    </body>
    </html>

    Meine Augen sind wohl nicht mehr gut genug, den Fehler zu entdecken.

    Danke fuer euren Tipp!
    Michael

  • #2
    Puhh... ne Menge Code... hier die stelle is aber interessant:


    Code:
    if ($ip == $part[2] && $datum == $part[0]) { $schon="ja"; }
    }
    if (empty($schon) && isset($r1)) {
    probier mal:
    Code:
    if ($ip == $part[2] && $datum == $part[0]) { $schon=true; }
    }
    if ($schon && isset($r1)) {
    wie gesagt nur so ein tipp ... aber ich schaue nochmal etwas genauer drüber =)

    Kommentar


    • #3
      bitte beachten:
      http://www.php-resource.de/forum/sho...threadid=50454

      Kommentar


      • #4
        Hmm... habe mal die Pools ausprobiert.
        Wo war genau der Fehler? Also ich kann nur einmal abstimmten und zwar beide beiden.

        Kommentar


        • #5
          Hallo Ueps,

          habe deinen Vorschlag auf einer Testseite probiert. Der Unterschied: Die erste Abstimmung funktioniert immer noch nicht, doch danach kann ich unbegrenzt abstimmen (die Sperre ist danach aufgehoben).

          Falls es keine Loesung gibt:
          Welchen Teil des Codes muss ich genau streichen, damit User unbegrenzt abstimmen koennen?
          Ich habe den folgenden Teil geloescht...

          // überprüfen, ob der User heute schon bewertet hat:
          for ($i = 0; $i < $entry_count; $i++) {
          $part = explode("|", $data[$i]);
          if ($ip == $part[2] && $datum == $part[0]) { $schon=true; }
          }
          // ... wenn nicht, dann Bewertung speichern (falls Formulardaten gesendet wurden):
          if ($schon && isset($r1)) {
          $eintrag = "$datum|$zeit|$ip|$r1|\n";
          $fp = fopen($fname, 'a');
          flock($fp, 2);
          fwrite($fp, $eintrag);
          flock($fp, 3);
          fclose($fp);
          }

          ... aber danach wurde ueberhaupt keine Stimme mehr gezaehlt.

          Es muss doch eine Loesung geben... oder?

          Gruss
          Michael

          Kommentar


          • #6
            Original geschrieben von penizillin
            bitte beachten:
            http://www.php-resource.de/forum/sho...threadid=50454
            Bitte die [ PHP] [/ PHP] Tags benutzen.... sonst schauen sich den Code hier ne menge Leute net an..!
            Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
            var_dump(), print_r(), debug_backtrace und echo.
            Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
            Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
            Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

            Kommentar

            Lädt...
            X