• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Problem mit Umfrage

Status
Für weitere Antworten geschlossen.

Maggus

Neues Mitglied
Hallo zusammen.
Ich hät ein Problem mit meinem Umfragenscript welches ich aus dem Internet habe. Ich weiß nicht wo das Problem liegt.

PHP:
<?php
if (isset($_POST["ergebnis"])) {
    // Aktuelle Sperre 1 Minute
    // 30 Tage Sperre time()+60*60*24*30
    setcookie("abgestimmt","ja",time()+60);
}

$thema = "Atomic-Umfrage 2004";
$auswahl = array("Super","Sehr Gut","Gut","Naja","Schlecht");
$anzahl = count($auswahl);

?>
<html> 
<head>
<title>Atomic-Umfrage</title>
<link rel='stylesheet' type='text/css' href='css/umfrage.css'>
</head>
<body>
<img src='bild/umfragelogo.gif' width='506' height='62'><br>
<h3><?php echo $thema ?></h3>
<form method='post' action='<?php echo $PHP_SELF; ?>'>
<p>
<?php

foreach ($auswahl as $key=>$eintrag) {
    echo "<input type='radio' name='ergebnis' value='$key'> $eintrag<br>\n";
}

?>
</p>
<?php
if (empty($_COOKIE["abgestimmt"]) && !isset($_POST["ergebnis"])) {

// Submit nur zeigen, wenn Formular noch nicht abgeschickt wurde
echo "<input type='submit' value='Daten senden'>";

} else {
echo "<p>Danke für die Übermittlung der Daten!</p>\n";

// Formular abgeschickt? Aber bisher noch nicht abgestimmt?
if (empty($_COOKIE["abgestimmt"]) && isset($_POST["ergebnis"])) {

// Dateiname in Variable speichern
$datei="daten/stimmen.txt";

// Datei vorhanden?
if (file_exists($datei)) {
    $fp=fopen($datei,"r+");
} else {
    $fp=fopen($datei,"w");
}

// Datei einlesen
$stimmen=fread($fp,filesize($datei));

// String aus Datei in Array zerlegen
$stimmen=explode(",",$stimmen);

// Der gewählte Punkt wird um 1 erhöht!
$stimmen[$_POST["ergebnis"]]++;

// Stimmen in einem String zusammensetzen
for ($i=0;$i<$anzahl;$i++) {
    $total .= $stimmen[$i] .",";
}

// Neuen String in Datei schreiben
rewind($fp);
fputs($fp,$total);
fclose($fp);
}
}
?>
</form>
<p> 
[ <a href='ergebnis.php' target='_blank'>Umfrageergebnisse betrachten</a> ]
</p>
</body>
</html>

So gehts ja erst, aber wenn man dann z.b. "Super" auswählt und auf abstimmen klickt, kommt das:
Warning: fopen(daten/stimmen.txt) [function.fopen]: failed to open stream: No such file or directory in /home/Maggus/public_html/polls/umfrage.php on line 50

Warning: filesize() [function.filesize]: stat failed for daten/stimmen.txt in /home/Maggus/public_html/polls/umfrage.php on line 54

Warning: fread(): supplied argument is not a valid stream resource in /home/Maggus/public_html/polls/umfrage.php on line 54

Warning: rewind(): supplied argument is not a valid stream resource in /home/Maggus/public_html/polls/umfrage.php on line 68

Warning: fputs(): supplied argument is not a valid stream resource in /home/Maggus/public_html/polls/umfrage.php on line 69

Warning: fclose(): supplied argument is not a valid stream resource in /home/Maggus/public_html/polls/umfrage.php on line 70

Ihr könnt das auch selbst anschauen auf:
www.maggus.byto.de/polls/umfrage.php

Danke schonmal
MFG Maggus

Mod-Edit: Code-Tags verwenden! (Prophet)
 
Zuletzt bearbeitet von einem Moderator:
Werbung:
1. Bitte PHP-Code-Tags benutzen:

[noparse]
PHP:
hier dein code...
[/noparse]

2. Bitte angeben, welche Zeilen die Nummern haben, die da stehen.

Beides in den ersten Eintrag reineditieren ;)

/E: OK, das hat Prophet schon gemacht.

Für die anderen zur Orientierung: Zeile 54 ist
PHP:
$stimmen=fread($fp,filesize($datei));
 
Zuletzt bearbeitet von einem Moderator:
/home/Maggus/public_html/polls/daten/stimmen.txt anlegen. Vermutlich hat da jemand die Readme net gelesen? .p
 
Werbung:
Werbung:
Dann lerne lesen und lies dann nochmal den Pfad den ich geschrieben hab.
 
Ok, dafür muss ich mich entschuldigen!
Jetzt funktioniert es, allerdings kommt jetzt die Meldung:

Warning: fread() [function.fread]: Length parameter must be greater than 0 in /home/Maggus/public_html/polls/umfrage.php on line 54

???
 
Werbung:
so, jetzt muss ich aber auch nochmal was sagen..
Wie du villeciht schon bemerkt hast konnte ich ohne Probleme 5 mal hintereinander abstimmen, nur weil ich Cookies nicht akzeptiert habe.. speichere sowas immer in einer db mit IP..
Gruß, Fredmonster!
 
Nur leider hab ich keine Ahnung wie man sowas programmiert!!!
Wenn du mir helfen kannst, mach ich es gerne drauf!

MFG Maggus
 
Werbung:
brauchst ne Datnebank, wie mysql oä.. Hast du sowas? Wenn ja, kann ich dir helfen, wenn nicht würde es nichts bringen^^
Gruß, Fredmonster!
 
Soll jetzt nicht als dumme Anmache klingen, ganz und gar nicht, aber mal gesehen das da noch ein Forum drauf ist, welches wie die meisten mit Datenbanken arbeiten.

Aber wenn mir helfen würdest wär echt nett!

MFG Maggus
 
jo.. hatte mir deine Seite nich angeguckt.. sry! So schwer isses gar nicht... du schreibst in deine db die ip des abgestimmten Users mit:
PHP:
$_SERVER['REMOTE_ADDR']
Dann machst du eine if-else-Abfrage, nach diesem Muster:
PHP:
if(mysql_num_rows($bla)==1){die('Hast schon abgestimmt.. kannst nur einmal teilnehmen!');}
Und das wars auch schon.. ;)
Gruß, Fredmonster!
 
Werbung:
Was davon muss jetzt in die Datenbank eingegeben werden und was nicht???
Sry, damit hab ich mich noch nicht wirklich beschäftigt!!!

MFG Maggus
 
ich gehe mal davon aus, dass du eine MySQL Datenbank hast.
Ich versuche mich hier mal an einer art kleinem tutorial.

Öffne dein PHPMyAdmin auf deinem Webspace
Liegt meistens im Verzeichnis http://www.deineadresse.de/phpmyadmin

Wähle links eine Datenbank aus (da ist eine dropdownliste aus der du auswählen kannst).
Sollte es noch keine Datenbank geben, erstell eine und wähle sie dann aus.

Dort findest du nun eine Registerkarte die sich 'SQL' nennt.
Klick dort hin und gebe in das Textfeld folgenden code ein:
Code:
CREATE TABLE `umfrage_ip` (
`ip` BIGINT NOT NULL 
) ENGINE = MYISAM ;

Nun hast du in der Datenbank deine Tabelle angelegt und das ist auch schon alles was du in der Datenbank machen musst.

Nun zum PHP-Teil
Jedes mal, wenn jemand abstimmt, läuft bei dir eine bestimmte funktion durch.
Bei dieser Funktion musst du nur noch hineinschreiben, dass überprüft wird, ob sich eine ip in der datenbank befindet.
Das könnte so aussehen
PHP:
function funktionsname()
{
    //Verbindungsaufbau zum MySQL Server
    mysql_connect('servername','benutzername','passwort') 
        or die (mysql_error());
    //Datenbank auswählen
    mysql_select_db('datenbank') 
        or die (mysql_error());

    //Anfrage an Datenbank senden
    $res = mysql_query('SELECT ip FROM umfrage_ip WHERE ip = "'.$_SERVER['REMOTE_ADDR'] .'"')
        or die (mysql_error());

    //Überprüfen Datensätze mit der Ip gefunden wurden und entsprechend
    //weiter verfahren
    if (mysql_num_rows($res)>= 1)
    {
    //Der Benutzer hat bereits teilgenommen und das script wird abgebrochen
        echo('Du hast bereits an der Umfrage teilgenommen');
        exit();
    }
    else
    {
    //Der Benutzer hat noch nicht teilgenommen, benutzer eintragen und stimme akzeptieren
        $add = mysql_query('INSERT INTO umfrage_ip (ip) VALUES ("'.$_SERVER['REMOTE_ADDR'] .'")')
            or die (mysql_error());
    }
/* 
    Hier ist der Rest deiner Funktion
    Die Funktion wird hier nun die Stimme 
    in dein System eintragen.
*/
}
 
Also erstmal danke, jetzt will ich aber praktisch nochmal nachfragen.

Ich erstelle die Tabelle so wie du es gesagt hast. Dann hab ich ja die stimmen.txt datei, die kann ja auch so bleiben. Dann hier die umfrage.php:
PHP:
<?php
if (isset($_POST["ergebnis"])) {
    // Aktuelle Sperre 1 Minute
    // 30 Tage Sperre time()+60*60*24*30
    setcookie("abgestimmt","ja",time()+60);
}

$thema = "Atomic-Umfrage 2004";
$auswahl = array("Super","Sehr Gut","Gut","Naja","Schlecht");
$anzahl = count($auswahl);

function funktionsname()
{
    //Verbindungsaufbau zum MySQL Server
    mysql_connect('servername','benutzername','passwort')
        or die (mysql_error());
    //Datenbank auswählen
    mysql_select_db('datenbank')
        or die (mysql_error());

    //Anfrage an Datenbank senden
    $res = mysql_query('SELECT ip FROM umfrage_ip WHERE ip = "'.$_SERVER['REMOTE_ADDR'] .'"')
        or die (mysql_error());

    //Überprüfen Datensätze mit der Ip gefunden wurden und entsprechend
    //weiter verfahren
    if (mysql_num_rows($res)>= 1)
    {
    //Der Benutzer hat bereits teilgenommen und das script wird abgebrochen
        echo('Du hast bereits an der Umfrage teilgenommen');
        exit();
    }
    else
    {
    //Der Benutzer hat noch nicht teilgenommen, benutzer eintragen und stimme akzeptieren
        $add = mysql_query('INSERT INTO umfrage_ip (ip) VALUES ("'.$_SERVER['REMOTE_ADDR'] .'")')
            or die (mysql_error());
    }
/*
    Hier ist der Rest deiner Funktion
    Die Funktion wird hier nun die Stimme
    in dein System eintragen.
*/
} 
?>
<html> 
<head>
<title>Atomic-Umfrage</title>
<link rel='stylesheet' type='text/css' href='css/umfrage.css'>
</head>
<body>
<img src='bild/umfragelogo.gif' width='506' height='62'><br>
<h3><?php echo $thema ?></h3>
<form method='post' action='<?php echo $PHP_SELF; ?>'>
<p>
<?php

foreach ($auswahl as $key=>$eintrag) {
    echo "<input type='radio' name='ergebnis' value='$key'> $eintrag<br>\n";
}

?>
</p>
<?php
if (empty($_COOKIE["abgestimmt"]) && !isset($_POST["ergebnis"])) {

// Submit nur zeigen, wenn Formular noch nicht abgeschickt wurde
echo "<input type='submit' value='Daten senden'>";

} else {
echo "<p>Danke für die Übermittlung der Daten!</p>\n";

// Formular abgeschickt? Aber bisher noch nicht abgestimmt?
if (empty($_COOKIE["abgestimmt"]) && isset($_POST["ergebnis"])) {

// Dateiname in Variable speichern
$datei="daten/stimmen.txt";

// Datei vorhanden?
if (file_exists($datei)) {
    $fp=fopen($datei,"r+");
} else {
    $fp=fopen($datei,"w");
}

// Datei einlesen
$stimmen=fread($fp,filesize($datei));

// String aus Datei in Array zerlegen
$stimmen=explode(",",$stimmen);

// Der gewählte Punkt wird um 1 erhöht!
$stimmen[$_POST["ergebnis"]]++;

// Stimmen in einem String zusammensetzen
for ($i=0;$i<$anzahl;$i++) {
    $total .= $stimmen[$i] .",";
}

// Neuen String in Datei schreiben
rewind($fp);
fputs($fp,$total);
fclose($fp);
}
}
?>
</form>
<p> 
[ <a href='ergebnis.php' target='_blank'>Umfrageergebnisse betrachten</a> ]
</p>
</body>
</html>

An der ergebnis.php muss ich ja nichts ändern, oder???
PHP:
<?php

$thema = "Atomic-Umfrage 2004";
$auswahl = array("Super","Sehr Gut","Gut","Naja","Schlecht");
$farben = array("9999FF","8888FF","7777FF","6666FF","5555FF");
$anzahl = count($auswahl);

?>
<html>
<head>
<title>Atomic-Umfrage - Ergebnis</title>
<link rel="stylesheet" type="text/css" href="css/umfrage.css">
</head>
<body>
<img src='bild/umfragelogo.gif' width='506' height='62'><br>
<h3><?php echo $thema; ?> - Ergebnisse</h3>
<?php
$datei="daten/stimmen.txt";
@$fp=fopen($datei,"r");
@$stimmen=fread($fp,filesize($datei));
@fclose($fp);
// String zerlegen, Array entsteht
$stimmen=explode(",",$stimmen);

for ($i=0;$i<$anzahl;$i++) {
    $gesamt += $stimmen[$i];
}

if ($gesamt>0) {
// Höchstlänge der Balken angeben
$laenge=400;

for ($i=0;$i<$anzahl;$i++) {
// Anteil der Balken
$blaenge=$stimmen[$i]*$laenge/$gesamt;

// Werte auf ganze Zahlen runden
$blaenge= round($blaenge);

// Prozentwert ermitteln und ausgaben
$prozent = sprintf('%1.1f', 100*$stimmen[$i]/$gesamt);

echo "
<table border='0'>
<tr>
<td width='100'>$auswahl[$i]</td>
<td>&nbsp;</td><td width='$blaenge' bgcolor='$farben[$i]'>&nbsp;</td>
<td>&nbsp;<i>$prozent% ($stimmen[$i])</i></td>
</tr>
</table>
";
}

echo "<p>Anzahl der Stimmen: <b>$gesamt</b></p>";
} else {
echo "<p>Bisher wurden noch keine Stimmen abgegeben!</p>";
}
?>
</body>
</html>
Achja, wenn da noch was falsch sein sollte, könnt ihr das sagen???

Danke MFG Maggus
 
Werbung:
Status
Für weitere Antworten geschlossen.
Zurück
Oben