Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
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-Quellcode:<?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-Quellcode:<?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).

--

zum Seitenanfang zum Seitenende 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-Quellcode:<?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

zum Seitenanfang zum Seitenende 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.

--

zum Seitenanfang zum Seitenende 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

zum Seitenanfang zum Seitenende Profil || Suche
004
12.05.2005, 22:01
theDon



Zitat:
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

zum Seitenanfang zum Seitenende Profil || Suche
005
13.05.2005, 14:53
Sir_Killalot



Zitat:
Ö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.

--

zum Seitenanfang zum Seitenende Profil || Suche
006
13.05.2005, 17:17
theDon



Zitat:
Sir_Killalot postete
Zitat:
Ö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

zum Seitenanfang zum Seitenende Profil || Suche
007
13.05.2005, 19:20
Sir_Killalot



ah, cool^^
danke

--

zum Seitenanfang zum Seitenende Profil || Suche