Votingscript - zählt voting nicht hoch

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

  • Votingscript - zählt voting nicht hoch

    Hallo,

    bin noch in den Anfangsschuhen von php, hab ein Votingscript, dass auch funktioniert, leider wird, wenn man seine Stimme abgibt diese nicht angezeigt, sondern es bleibt bei 1.

    PHP-Code:
    error_reporting(E_ALL);

        if(isset(
    $_POST['vote-eins']))  $vote_eins  $_POST['vote-eins'];
        if(isset(
    $_POST['vote-zwei']))  $vote_zwei  $_POST['vote-zwei'];

             
    $file "votes.txt"// Name der Textdatei in dem gleichen Ordner
             
             
    $title "Wildthinx Reunion!?! Vielleicht haben wir eine Chance.<br /> Bitte stimmt ab!"// Title
                                                          
             
    $answers = array('Ich bin daf&uuml;r!''Nein, bitte nicht!'); // Text hinter den Radiobuttons



        
    echo '<h3>'$title .'</h3>';
            echo 
    '<p>';
                echo
    ' <form name="voting" action="'.$_SERVER['PHP_SELF'].'" method="post">';
                        echo
    '<input type="radio" name="vote-eins">'.$answers[0].'<br />';
                        echo
    '<input type="radio" name="vote-zwei">'.$answers[1].'<br />';
                    echo
    '<p><input type="submit" value="eintragen" name="eintragen"></p>';
                echo
    '</form>';
      
    if (empty(
    $_POST['vote-eins']) && empty($_POST['vote-zwei']))
    {
        echo
    'Bitte auswaehlen';
    }
    else
    {

    echo
    '</p>';
    echo
    '<h3>Ergebnis</h3>';
    echo
    '<p>';

      
    //lese von der Textdatei
      
    $votes file($file);
      
    $total 0;
     

      
    //submit vote
      
    if(isset($vote_eins)){
        
    $votes[$vote_eins] = $votes[$vote_eins]+1;
      }
      
      
    //schreibe in die Textdatei
      
    $handle fopen($file,"w");

      foreach(
    $votes as $v){
        
    $total += $v;
        
    fputs($handle,chop($v)."\n");
      }

      
    fclose($handle);

      
    //print votes
      
        
    for($i=0;$i<count($answers[0]);$i++){
        echo 
    "{$votes[$i]} Besucher sagten: {$answers[0]}<br />";
      }
      
          for(
    $i=0;$i<count($answers[0]);$i++){
        echo 
    "{$votes[$i]} Besucher sagten: {$answers[1]}<br />";
      }
     

    echo
    '</p>';
    echo
    '<p> Total: '.$total.' votes.</p>';
    echo
    '</div>';

    echo
    '</div>';

    und er gibt folgende Notice: Undefined index: on, dies wär
    PHP-Code:
        $votes[$vote_eins] = $votes[$vote_eins]+1
    bitte um Hilfe, danke im voraus
    schischi

  • #2
    Hallo,

    der Code kann nicht funktionieren, da sind ganz viele Fehler und Ungereimtheiten drin.

    Zuerst müssen Radio-Buttons, die eine Alternative darstellen, das gleiche name-Attribut haben, aber unterschiedliche value-Attribute. Ansonsten könnte man nämlich beide auswählen. Ohne value-Attribut kommt immer "On" als Wert an, wenn der RB aktiv ist.

    Dann trägst du nur die positiven Stimmen in die Datei ein und zwar jeweils auf einer neuen Zeile in Form einer 1. Die negativen Stimmen werden absolut ignoriert.

    Beim Auslesen der Datei bekommst du ein Array mit sovielen Einsen drin, wie es positive Stimmen gab. Dann greifst du davon aber nur auf die Werte mit dem Index 0 und 1 zu, also die ersten beiden Zeilen in der Datei. Sobald mindestens zwei positive Stimmen abgegeben wurden, stehen dort natürlich Einsen drin, die du aber fälschlicherweise als einmal positiv und einmal negativ wertest.

    Im Prinzip kannst du das ganze Skript wegwerfen und startest besser nochmal frisch durch.

    Gruß,

    Amica
    Zuletzt geändert von AmicaNoctis; 18.10.2009, 10:39.
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      danke AmicaNoctis für dein Annehmen des Threads

      habs mal umgeschrieben:

      PHP-Code:
      if(isset($_POST['vote']))  $vote $_POST['vote'];


               
      $file "votes.txt"// Name der Textdatei in dem gleichen Ordner
               
               
      $title "Wildthinx Reunion!?! Vielleicht haben wir eine Chance.<br /> Bitte stimmt ab!"// Title
                                                            
               
      $answers = array('Ich bin daf&uuml;r!''Nein, bitte nicht!'); // Text hinter den Radiobuttons



          
      echo '<h3>'$title .'</h3>';
              echo 
      '<p>';
                  echo
      ' <form action="'.$_SERVER['PHP_SELF'].'" method="post">';
                  for(
      $i=0;$i<count($answers);$i++){
                          echo
      '<input type="radio" name="vote" value="'$i .' "> '.$answers[$i].'<br />';
                          }
                      echo
      '<p><input type="submit" value="eintragen" name="eintragen"></p>';
                  echo
      '</form>';
        
      if (empty(
      $_POST['vote']))
      {
          echo
      'Bitte auswaehlen';
      }
      else
      {

      echo
      '</p>';
      echo
      '<h3>Ergebnis</h3>';
      echo
      '<p>';

        
      //lese von der Textdatei
        
      $votes file($file);
        
      $total 0;
       

        
      //submit vote
        
      if(isset($vote)){
          
      $votes[$vote] = $votes[$vote]+1;
        }
        
        
      //schreibe in die Textdatei
        
      $handle fopen($file,"w");

        foreach(
      $votes as $v){
          
      $total += $v;
          
      fputs($handle,chop($v)."\n");
        }

        
      fclose($handle);


        
      //zeige die Stimmen
        
      for($i=0;$i<count($answers);$i++){
          echo 
      "{$votes[$i]} {$answers[$i]}<br />";
        }
       

      echo
      '</p>';
      echo
      '<p> Total: '.$total.' votes.</p>';
      echo
      '</div>';

      echo
      '</div>';

      nun kommt die Notice:
      PHP-Code:
      Notice:  Undefined index:  
      oder

      PHP-Code:
      NoticeUndefined index
      die Zeile wo das herkommt:
      PHP-Code:
       $votes[$vote] = $votes[$vote]+

      Kommentar


      • #4
        Das bringt nichts! Lösche dieses Skript, damit du darin auch nicht mehr abgucken kannst und schreib es neu. Jetzt schreibst du zwar auch negative Stimmen in die Datei, aber wieder nur als "1". Wenn dort nur Einsen drin stehen, wie willst du dann wissen, welche Eins ein "ja" und welche ein "nein" war? Das funktioniert nicht!
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          ist zwar immer noch kein schöner Code, aber so funktioniert es erstmal.

          PHP-Code:
              if(isset($_POST['vote']))  $vote $_POST['vote'];

              
          $file "votes.txt"// Name der Textdatei in dem gleichen Ordner

              
          $title "Wildthinx Reunion!?! Vielleicht haben wir eine Chance.<br /> Bitte stimmt ab!"// Title

              
          $answers = array('Ich bin daf&uuml;r!''Nein, bitte nicht!'); // Text hinter den Radiobuttons

              
          echo '<h3>'$title .'</h3>';
              echo 
          '<p>';
              echo
          ' <form action="'.$_SERVER['PHP_SELF'].'" method="post">';
              for(
          $i=0;$i<count($answers);$i++){
                  echo
          '<input type="radio" name="vote" value="'$i .' "> '.$answers[$i].'<br />';
              }
              echo
          '<p><input type="submit" value="eintragen" name="eintragen"></p>';
              echo
          '</form>';

              if (empty(
          $_POST['vote'])) {
                  echo
          'Bitte auswaehlen';
              }
              else {

                  echo
          '</p>';
                  echo
          '<h3>Ergebnis</h3>';
                  echo
          '<p>';

                  
          //lese von der Textdatei
                  
          $votes array_map("trim"file($file));
                  

                  
          //submit vote
                  
          if(isset($vote)){
                      
          $votes[(int) $vote]++;
                  }

                  
          file_put_contents($fileimplode("\n"$votes));

                  
          //zeige die Stimmen
                  
          for($i=0;$i<count($answers);$i++){
                      echo 
          "{$votes[$i]} {$answers[$i]}<br />";
                  }
                  
          $total $votes[0] + $votes[1];

                  echo
          '</p>';
                  echo
          '<p> Total: '.$total.' votes.</p>';
                  echo
          '</div>';

                  echo
          '</div>';
              } 
          [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
          Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
          Super, danke!
          [/COLOR]

          Kommentar


          • #6
            Hallo AmicaNoctis,

            ich muss echt den Hut ziehen, Respekt!

            du schreibst dies kurz um und es klappt wunderbar, ich hoffe ich kann das auch mal so aus dem Ärmel wie du!

            array_map noch nie von gesehen

            vielen vielen dank
            MFG
            schöne Zeit
            schischi

            Kommentar

            Lädt...
            X