000
10.05.2005, 15:59
Sir_Killalot
|
Ich bin in PHP zwar noch nicht wirklich der pro, aber ich denk mir mal ich schaff das, was ich vorhab (irgendwie). Insofern es geht... aber momentan häng ich ein wenig. Ich hab vor mehrere Geschichten auf die HP zu stellen und da es mit PHP einfacher ist neue reinzustellen mach ich es logischerweise damit. Ich hab drei seiten. Einmal die "main" seite, dann die "umfrage" seite und die "ergebnis" seite. hier erstmal die main seite:
<?php include("zugriff.inc.php"); $sql="Select * FROM geschichten"; $result=mysql_query($sql); $zeilen=mysql_num_rows($result); echo "<table style='width: 450; text-align: left; margin-left: auto; margin-right: auto;' border='0' cellpadding='0' cellspacing='0'>\n"; echo "<tr> <td style='font-weight: bold; text-align: center;'><big>Titel<br></big></td> <td style='font-weight: bold; text-align: center;'><big>Autor<br></big></td> <td style='font-weight: bold; text-align: center;'><big>Bewertung<br></big></td> </tr>"; while ($row=mysql_fetch_assoc($result)) { echo "<tr> <td><big><a href='geschichte.php?id=$row[id]' target='main'>$row[Titel]</a></big></td> <td><big><a href='user.php?Nick=$row[Autor]' target='main'>$row[Autor]</a></big></td> <td style='text-align: center;'><big><a href='geschichte01-umfrage.php?id=$row[id]' target='gesch-umfrage'>Klick</a></big></td> </tr>"; } echo "</table>\n"; mysql_close(); ?>
hier geht ja auch alles wunderbahr. probleme hab ich in der umfrage. ich möchte das man an der umfrage nur einmal teilnehmen kann! deswegen ein cookie. nur das geht nicht so ganz, wie ich das möchte:
<?php include("zugriff.inc.php"); $sql="SELECT * FROM cookies WHERE id=$_GET[id]"; $result=mysql_query($sql); $row=@mysql_fetch_assoc($result); if (isset($_POST["ergebnis"])) { setcookie("$row[name]", "ja",time()+31104000); } mysql_close(); ?> <html> <head> <title>Geschichten Bewertung</title> </head> <body>
<h2>Wie findest du die Geschichte</h2>
<?php include("zugriff.inc.php");
$sql1="SELECT * FROM geschichten WHERE id=$_GET[id]"; $result1=mysql_query($sql1); $row1=@mysql_fetch_assoc($result1); echo "<h2>"$row1[Titel]"?</h2>"; ?>
Hier habt ihr die Möglichkeit über die Geschichte abzustimmen! Bitte seid erhlich^^ <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
<p> <input type="radio" name="ergebnis" value="0"> Super!<br> <input type="radio" name="ergebnis" value="1"> Gut<br> <input type="radio" name="ergebnis" value="2"> Ganz Okay<br> <input type="radio" name="ergebnis" value="3"> Nicht so überragend<br> <input type="radio" name="ergebnis" value="4"> Schlecht </p>
<?php if (empty($_COOKIE["$row[name]"]) && !isset($_POST["ergebnis"])) { ?> <input type="submit" value="Stimme abgeben" href='?id=$row[id]'>
<?php } else { echo "<p>Danke für deine Stimme!</p>\n"; if (empty($_COOKIE["$row[name]"]) && isset($_POST["ergebnis"])) { $datei="$row1[Titel].txt"; $fp=fopen($datei, "w+"); //datei anlegen+beschreiben
$vote=explode(",", $vote); $vote[$_POST["ergebnis"]]++; $vote=$vote[0] . "," . $vote[1] . "," . $vote[2] . "," . $vote[3] . "," . $vote[4]; rewind($fp); fputs($fp, $vote); fclose($fp); } } ?>
</form> <?php echo "<p> [ <a href='geschichte01-ergebnis.php?Titel=$row1[Titel]' target='gesch-ergebnis'>Umfrageergebnisse ansehen</a> ] </p>"; ?>
ich möchte also das PHP erstmal eine textdatei erstellt und darin die umfrage-ergebinse speichert. aber das geht nicht so ganz mit w+ mit r+ auch nicht, da die datei ja erst erstellt werden muss (wenn eine neue reingestellt wird) mit der ergebnis seite hab ich (noch) keine probleme, weil ja erstmal die umfrage seite gehen muss. ich fasse zusammen: Ich möchte, das jeder nur einmal an der Umfrage teilnehmen kann. Und ich möchte, dass die ergebnise danach auf einer seperaten seite angezeigt werden! also: wie mach ich das? und wenns geht bitte noch ne kleine erklärung dazu. ich weiß, is evtl bisl großes projekt, aber ich bin sicher das es ne relativ einfache lösung gibt. achja: MySQL is kein problem (wie ihr seht).
--
|
|
Profil || Suche
|
001
10.05.2005, 21:45
K-Putt
|
Also...vielleicht solltest du noch sagen was genau nicht funktioniert?
Welches Flag man braucht, um eine Datei zu erstellen beim Öffnen, findest du unter fopen Beschreibung @ php.net.
Falls das ganze auf einem Linux / Unix Server läuft, musst du für das Verzeichnis wo die .txt reinkommt, schreibrechte besitzen - der Einfachheit halber chmod 777 auf das Verzeichnis.
Ich frag mich allerdings, warum du das mit Cookies lösen willst, ob jemand schon abgestimmt hat?
Ich würde das Ergebnis der Umfrage in einer Datenbank speichern - Tabelle abstimmungen, für jede Abstimmung eine Zeile, die eine ID, die IP des abstimmers, und den Wert der Abstimmung enthält.
Wenn er nun erneut abstimmen will, brauchst du nur zu checken ob die IP bereits in einer Zeile vorhanden ist.
Nachteil: Proxy User sind benachteiligt. Evtl. in Verbindung mit Cookies benutzen.
Als Problem seh ich diese Sachen an:
<?php "$row[name]" #Variable in einem Text ... $datei="$row1[Titel].txt"; #Variable im Text, zusätzlich Quotes bei Array(['Titel']) vergessen ?>
Sowas sollte man meiden.
Besser so: $datei = $row['Titel'].".txt";
--
Rambo Engineer @ Drippy's 2fort - finest TFC 1.5 || Bild Upload || The world's most advanced open source database
|
|
Profil || Suche
|
002
11.05.2005, 17:49
Sir_Killalot
|
also erstmal danke. und was nicht geht: ich kann mehrere male abstimmen und das soll ja nicht so sein. das zweite ist, das die datei mit w(+) immer auf 0byte gesetzt wird und dann neu beschrieben. aber sie wird halt erstellt, das ist bei r(+) nicht macht... irgend nen zwischending gibts scheinbaar nicht. wie kann ich denn die IP mit PHP rausfinden und in der datenbank speichern? und wenn ich neu ins netz geh hab ich doch auch ne neue IP, oder?
zu den schreibrechten: das ist mir bekannt. 99% von meinem bisherigen PHP wissen hab ich aus nem PHP buch: "PHP und MySQL für Kids" von Johann-Christian Hanke.
--
|
|
Profil || Suche
|
003
11.05.2005, 20:31
scus
|
warum willste das in ne textdatei packen, wenn du doch mysql zur verfügung hast? du musst die textdatei wahrscheinlich erst auslesen, den neuen wert dran heften und dann wieder schreiben...
du kannst aber auch einfach deine cokies löschen... wenn man will, kann man immer ein zweites mal abstimmen.
--
sincères amitiés scus -- Tand, Tand ist das Gebilde von Menschenhand
|
|
Profil || Suche
|
004
12.05.2005, 22:01
theDon
|
Sir_Killalot postete das zweite ist, das die datei mit w(+) immer auf 0byte gesetzt wird und dann neu beschrieben. aber sie wird halt erstellt, das ist bei r(+) nicht macht... irgend nen zwischending gibts scheinbaar nicht. `a'
--
\o tanz den naziprau! o/
And more than ever, I hope to never fall, Where enough is not the same it was before
|
|
Profil || Suche
|
005
13.05.2005, 14:53
Sir_Killalot
|
Öffnet die Datei zum Lesen und Schreiben. Positioniert den Dateizeiger auf das Ende der Datei. Wenn die Datei nicht existiert, wird versucht sie anzulegen. da liegt das Problem. Der Dateizeiger geht ans ende, ich brauch ihn aber am Anfang. Naja, ich probiers mal mit der Datenbank version.
Aber eine Frage ist immer noch nicht ganz geklärt: Wie bekomm ich das hin, das jeder nur einmal abstimmen kann? Ich möchte das halt mit Cookies machen (ich weiß, die kann man löschen. Aber die meisten kommen nicht auf die Idee). Oder gibt es eine andere, zuverlässige Lösung? Mit der IP geht ja schlecht, weil bei der nächsten einwahl die IP ja wieder anders ist.
--
|
|
Profil || Suche
|
006
13.05.2005, 17:17
theDon
|
Sir_Killalot postete
Öffnet die Datei zum Lesen und Schreiben. Positioniert den Dateizeiger auf das Ende der Datei. Wenn die Datei nicht existiert, wird versucht sie anzulegen. da liegt das Problem. Der Dateizeiger geht ans ende, ich brauch ihn aber am Anfang. Mal etwas von fseek() gehoert?
--
\o tanz den naziprau! o/
And more than ever, I hope to never fall, Where enough is not the same it was before
|
|
Profil || Suche
|
007
13.05.2005, 19:20
Sir_Killalot
|
ah, cool^^ danke
--
|
|
Profil || Suche
|