PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [PHP]-Umfrage Script



Bloodyroar
05.12.2003, 02:37
So, das wäre das erste Problem im neuen Forum, hoffe Ihr könnt mir dabei helfen. Folgendes Script:

<?PHP

function schreiben($datei,$mode) {
global $REMOTE_ADDR;
$fp = @fopen($datei,$mode);
flock($fp,2);
fwrite($fp,$REMOTE_ADDR."|".time()."\n");
flock($fp,3);
fclose($fp);
}

function ip_sperre() {
global $REMOTE_ADDR;
$reloadlogdatei = "ips.txt";
$anzahleintraege = 50; // nach sovielen ip´s werden die alten gelöscht
$zeitlimit = 3600; // solange bleibt eine ip gesperrt

// prüfen ob datei existiert wenn nicht erstellen
if(!file_exists($reloadlogdatei)) {
$datei = fopen($reloadlogdatei,"w+");
fclose($datei);
}
$fp = file($reloadlogdatei);
$size = sizeof($fp);

// beschreibt die Datei, wenn Liste voll
if($size >= $anzahleintraege){
schreiben($reloadlogdatei,"w");
// Prüft, ob eine IP in der Liste steht
}
else {
$ausgabe=false;
for ($i=0;$i<$size;$i++) {
$zeile = explode("|",$fp[$i]);
if ($zeile[0] == $REMOTE_ADDR AND $zeile[1] > (time()-$zeitlimit)){
// ip wird gefunden
$ausgabe = true;
}
}
// protokolliert die ip
schreiben($reloadlogdatei,"a+");
}
return $ausgabe;
}

$frage = "Wie findet Ihr meine Seite ?"; // Thema der Abfrage

$anzahl = 5; // Anzahl der Auswahloptionen

$option[0] = "Sehr Gut"; // Option 1
$option[1] = "Gut"; // Option 2
$option[2] = "Mittelmaessig"; // usw.
$option[3] = "Schlecht";
$option[4] = "Sehr Schlecht";

$farbe[0]="#0000FF"; // Farbe des 1. Balkens
$farbe[1]="#00FF00"; // Farbe des 2. Balkens
$farbe[2]="#FF0000"; // usw.
$farbe[3]="#FFFF00";
$farbe[4]="#00FFFF";

$datei = "ergebnis.txt"; // Ergebnisdatei


//////////////////////////////////////////////////////////////////////////////////////////
// so, und hier das Script: //
// //
// zuerst oeffnen wir die Ergebnisdatei, bzw. legen diese neu an, falls nicht vorhanden //
//////////////////////////////////////////////////////////////////////////////////////////

if (file_exists($datei)) { //existiert die Datei?
$votes=file($datei); //dann in Array "$votes" einlesen
}
else { //wenn nicht
$handle = fopen($datei, "w+"); //Datei anlegen
$i=0;
for ($i; $i<$anzahl; $i++) { //fuer jede Option
fputs($handle,"0\n"); //"0" in Datei schreiben (mit Zeilenvorschub)
}
fclose($handle); //Datei wieder schliessen
$votes=file($datei); //Datei in Array "$votes" einlesen
}


//////////////////////////////////////////////////////////////////////////////////////////////////
// wurde abgestimmt? wenn ja, dann muessen wir das Ergebnis anpassen und in die Datei schreiben //
//////////////////////////////////////////////////////////////////////////////////////////////////

if (($submitvote) && (ip_sperre()==false)) {
settype($votes[$radio],"integer");
$votes[$radio]++; //entsprechende Option um eins erhoehen
$handle = fopen($datei, "w+"); //Datei oeffnen
$i=0;
for ($i; $i<$anzahl; $i++) { //fuer jede Option
settype($votes[$i],"integer");
fputs($handle,"$votes[$i]\n"); //Anzahl in Datei schreiben (mit Zeilenvorschub)
}
fclose($handle); //Datei wieder schliessen
}

////////////////////////////////////////////////////////////
// jetzt startet die Ausgabe! zuerst mal die Ueberschrift //
////////////////////////////////////////////////////////////

echo "<H1>".$frage."</H1>\n\n"; //Ueberschrift schreiben

////////////////////////////////////////
// dann das Ergebnis als Balkengrafik //
////////////////////////////////////////

$i=0;
for ($i; $i<$anzahl; $i++) { //fuer jede Option
$j=0;
echo $option[$i]."&nbsp;&nbsp;&nbsp;<FONT COLOR=\"".$farbe[$i]."\">"; //Option ausgeben und Farbe setzen
for($j; $j<$votes[$i]; $j++) { //fuer Anzahl der Votes
echo "|"; //je einen Strich ausgeben
}
echo "&nbsp;&nbsp;&nbsp;".$votes[$i]."</FONT><BR>\n"; //Balken zu ende, also Zeilenumbruch
}

////////////////////////////////////
// am Schluss das Auswahlformular //
////////////////////////////////////

echo "<FORM ACTION=\"".$PHP_SELF."\" METHOD=\"Post\">\n"; //Formular anfangen
$i=0;
for ($i; $i<$anzahl; $i++) { //fuer jede Option
echo "<INPUT TYPE=\"radio\" NAME=\"radio\" VALUE=\"".$i."\">".$option[$i]."<BR>\n"; //Radiobutton anzeigen
}

echo "<INPUT TYPE=\"Submit\" VALUE=\"Umfragen\" NAME=\"submitvote\"></FORM>"; //Formularende


?>

möchte ich so anpassen, dass zuerst nur die Fragen stehen:

Frage
- Antwort1
- Antwort2
- usw
[Vote]

und wenn man auf Vote geklickt hat, erscheint das Resultat. Aber die Fragen sollen nun nicht mehr angezeigt werden. Jetzt ist es ja so, dass immer beides angezeigt wird... ich habe es mal raufgeladen:

http://mitglied.lycos.de/bloodyroar66/umfrage/umfrage.php

Vielen Dank! Gruss Peti

GSandSDS
05.12.2003, 02:52
Gehört jetzt PHP eigentlich zum Programmieren? Ich frag deshalb weil ich den PC-Forum ja nicht unnötig zu viele Themen abgragen will.

Ynnus
05.12.2003, 02:57
na ja, PHP muss ja auch erst mal Programmiert werden, denke schon das es dann ins Programmierer-Forum gehört.

Dingsi
05.12.2003, 03:41
Ich schaus mir in diesem Moment an und habe auch schon eine Idee. ^^
Muss sie nurnoch realisieren.
Also nur einen kleinen Moment noch. ^^

Klick mich. :D (http://home.arcor.de/dthorm/umfrage.txt)
Ich hab jetz nicht lange Zeit zu erklären.
Falls du fragen hast, frag mich. ^^

BTW: Dein Codestil, soweit ich sehen kann, gefällt mir nicht. :P

Bloodyroar
05.12.2003, 14:30
Also wenn ich das richtig sehe, dann fragst du damit

if (!$ausgabe && !$submitvote) {
echo "<FORM ACTION=\"".$PHP_SELF."\" METHOD=\"Post\">\n"; //Formular anfangen
$i=0;
for ($i; $i<$anzahl; $i++) { //fuer jede Option
echo "<INPUT TYPE=\"radio\" NAME=\"radio\" VALUE=\"".$i."\">".$option[$i]."<BR>\n"; //Radiobutton anzeigen
}

echo "<INPUT TYPE=\"Submit\" VALUE=\"Umfragen\" NAME=\"submitvote\"></FORM>"; //Formularende
}




ab, ob schon gevotet wurde, oder nicht. und wenn schon gevotet wurde, dann steht die frage nicht mehr. habe ich das richtig verstanden??

ps. ist nicht mein Stil :-)

Dingsi
05.12.2003, 14:35
Also mit !$ausgabe guckt er ob die ip in der ips.txt vorhanden ist.
Mit !$submitvote guckt er ob in diesem moment gevotet wird. Nur wenn beides false ist wird die frage angezeigt, ja.

Bloodyroar
05.12.2003, 18:16
ich habe es getestet: http://mitglied.lycos.de/bloodyroar66/index.php und es funktioniert. viele dank.

kannst mir auch sagen, wie man machen kann, dass am Anfang nur die Fragen stehen. Ich möchte die Umfrage aufteilen, dass am Anfang nur die Fragen stehen und nachher, falls der User gevotet hat!, nur noch das Ergebnis steht. vielleicht so???:

index.php:


...
////////////////////////////////////
// am Schluss das Auswahlformular //
////////////////////////////////////
if (!$ausgabe && !$submitvote) {
echo "<FORM ACTION="index2.php" METHOD=\"Post\">\n"; //Formular anfangen
$i=0;
for ($i; $i<$anzahl; $i++) { //fuer jede Option
echo "<INPUT TYPE=\"radio\" NAME=\"radio\" VALUE=\"".$i."\">".$option[$i]."<BR>\n"; //Radiobutton anzeigen
}

echo "<INPUT TYPE=\"Submit\" VALUE=\"Umfragen\" NAME=\"submitvote\"></FORM>"; //Formularende
}
?>

index2.php:


<?PHP

////////////////////////////////////////////////////////////
// jetzt startet die Ausgabe! zuerst mal die Ueberschrift //
////////////////////////////////////////////////////////////

if (!$ausgabe && !$submitvote) echo "<H1>".$frage."</H1>\n\n"; //Ueberschrift schreiben

////////////////////////////////////////
// dann das Ergebnis als Balkengrafik //
////////////////////////////////////////

$i=0;
for ($i; $i<$anzahl; $i++) { //fuer jede Option
$j=0;
echo $option[$i]." <FONT COLOR=\"".$farbe[$i]."\">"; //Option ausgeben und Farbe setzen
for($j; $j<$votes[$i]; $j++) { //fuer Anzahl der Votes
echo "|"; //je einen Strich ausgeben
}
echo " ".$votes[$i]."</FONT><BR>\n"; //Balken zu ende, also Zeilenumbruch
}

?>



??????

Freezy
05.12.2003, 18:30
Für PHP gibbet doch diese wunderschöne Highlight Funktion im Board



if (!$ausgabe && !$submitvote) {
echo "<FORM ACTION=\"".$PHP_SELF."\" METHOD=\"Post\">\n"; //Formular anfangen
$i=0;
for ($i; $i<$anzahl; $i++) { //fuer jede Option
echo "<INPUT TYPE=\"radio\" NAME=\"radio\" VALUE=\"".$i."\">".$option[$i]."<BR>\n"; //Radiobutton anzeigen
}

echo "<INPUT TYPE=\"Submit\" VALUE=\"Umfragen\" NAME=\"submitvote\"></FORM>"; //Formularende
}


Nur so als anmerkung :D

Bloodyroar
05.12.2003, 19:52
merci für den hinweis http://www.multimediaxis.de/images/smilies/old/sm_12.gif

Dingsi
06.12.2003, 03:22
Uhm.... warum in mehrere Files aufteilen? o_O
Naja.. ich setz mich mal davor. ^^

Klick mich wieder. (http://home.arcor.de/dthorm/umfrage.txt)
Ich hab im Grunde einfach nur das If, was ich vorher auch benutzt hab um die Frage nicht anzuzeigen, umgekehrt und um die Balken-Ausgabe gepackt.

Bloodyroar
06.12.2003, 21:47
http://www.multimediaxis.de/images/smilies/old/sm_12.gif hey, vielen Dank für die Hilfe! Funktioniert Tip Top!
Werde mich mal hinters Script setzten, vielleicht lern ich ja was davon!

Gruss Bloodyroar