| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

18-10-2009, 10:13
|
|
schischi
Registrierter Benutzer
|
|
Registriert seit: Oct 2009
Beiträge: 66
|
|
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ü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
|

18-10-2009, 10:37
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
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
Geändert von AmicaNoctis (18-10-2009 um 10:39 Uhr)
|

18-10-2009, 10:48
|
|
schischi
Registrierter Benutzer
|
|
Registriert seit: Oct 2009
Beiträge: 66
|
|
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ü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: 1
oder
PHP-Code:
Notice: Undefined index: 0
die Zeile wo das herkommt:
PHP-Code:
$votes[$vote] = $votes[$vote]+1
|

18-10-2009, 10:51
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
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!
|

18-10-2009, 11:04
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
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ü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($file, implode("\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>'; }
|

18-10-2009, 11:17
|
|
schischi
Registrierter Benutzer
|
|
Registriert seit: Oct 2009
Beiträge: 66
|
|
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
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|