Hallo,
ich bastle gerade an einem Skript (auf der Grundlage von "fremden" Codeschnippseln), mit dem ich Formulareingaben in eine Textdatei oder besser CSV-Datei schreiben kann. Da vorrausichtlich mehrere Hundert Leute in kürzester Zeit auf das Formular zugreifen werden, möchte ich dass die erstellte Text/CSV-Datei während eines Zugriffes für Andere gesperrt ist. Aber zuerstmal der Code:
Hier das Formular mit sechs Variablen:
Dann das PHP-Skript (liste.php):
Nun habe ich mehrere Fragen:
1) Stimmt mein flock() Befehl so ? Kann die Datei daten.txt nicht aus Versehen "verhunzt" werden weil 2 oder mehr Benutzer gleichzeitig darin schreiben? Muss ich mit flock() auch wieder schliessen, oder reicht der fclose() Befehl ?
2) im Moment benutze ich $_GET, weil das in dem Codeschnippsel so stand. Habe aber gelesen dass man lieber $_POST benutzen sollte. Wie sieht mein Code aus wenn ich das auf POST umstelle ?
3) Mir wäre eine Ausgabe in eine (formatierte) CSV-Datei lieber, um sie später bequem in Excel verwalten zu können. Krieg das aber leider mit der Formatierung nicht hin bzw. habe überhaupt keinen Plan wie das gehen soll...
4) Wie sicher ist dieser Form der "Datensammlung" ? Es soll eine reine Anmeldung sein, daher geht es nicht um sensible Daten. Aber ein "Ausspähen" anderer Benutzer sollte wenn möglich schon verhindert werden. Am wichtigsten aber ist mir der "Über-Schreibschutz" der erstellten Datei !
P.S: Ein Eintrag in eine Datenbank kommt leider aus technischen Gründen nicht in Frage, obwohl ich - Dank des Tutorials-Forums - inzwischen einigermassen damit zurechtkäme
ich bastle gerade an einem Skript (auf der Grundlage von "fremden" Codeschnippseln), mit dem ich Formulareingaben in eine Textdatei oder besser CSV-Datei schreiben kann. Da vorrausichtlich mehrere Hundert Leute in kürzester Zeit auf das Formular zugreifen werden, möchte ich dass die erstellte Text/CSV-Datei während eines Zugriffes für Andere gesperrt ist. Aber zuerstmal der Code:
Hier das Formular mit sechs Variablen:
Code:
<form name="form1" method="GET" action="liste.php">
<input name="nachname" type="text" id="nachname" size="40" maxlength="40">
Name<br /><br />
<input name="vorname" type="text" id="vorname" size="40" maxlength="40">
Vorname<br /><br />
<input name="mailadresse" type="text" id="mailadresse" size="40" maxlength="40">
E-Mail<br /><br />
<input name="semester" type="text" id="semester" size="40" maxlength="40">
Semester<br /><br />
<input name="kurs" type="text" id="kurs" size="40" maxlength="40">
Kurs<br /><br />
<br />
<select name="fach" id ="fach">
<option>Biologie Diplom</option>
<option>Biologie Bachelor</option>
<option>Biologie Lehramt Gym.</option>
<option>Lebensmittelchemie</option>
<option>Sonstiges</option>
</select>
<br /><br /><br />
<input type="submit" name="Submit" value="Abschicken">
</p>
</form>
Dann das PHP-Skript (liste.php):
PHP:
<?php
$nachname = $_GET["nachname"];
$vorname = $_GET["vorname"];
$mailadresse = $_GET["mailadresse"];
$semester = $_GET["semester"];
$kurs = $_GET["kurs"];
$fach = $_GET["fach"];
if( isset($nachname)&& isset($vorname)&& isset($mailadresse)&& isset($semester)&& isset($kurs)&& isset($fach) && $nachname!="" && $vorname!="" && $mailadresse!="" && $semester!="" && $kurs!="" && $fach!=""){
$datei="daten.txt";
$danke="danke.txt";
flock($datei, LOCK_EX); //Ist das hier so richtig ?
$zeiger=fopen($datei,"r+");
$alt=fread($zeiger,filesize($datei));
$meinung="$vorname $nachname \n $mailadresse \n $semester \n $kurs \n $fach";
rewind($zeiger);
fputs($zeiger,"$meinung \n \n $alt");
fclose($zeiger);
// readfile($datei); //Ist im Moment auskommentiert, werde ich aber ganz löschen, da ich die Formulareingabe nicht ausgeben will, sondern die $danke (siehe oben)
readfile($danke);
}
else{
echo "Eingabefelder wurden nicht komplett ausgefüllt.";
}
?>
Nun habe ich mehrere Fragen:
1) Stimmt mein flock() Befehl so ? Kann die Datei daten.txt nicht aus Versehen "verhunzt" werden weil 2 oder mehr Benutzer gleichzeitig darin schreiben? Muss ich mit flock() auch wieder schliessen, oder reicht der fclose() Befehl ?
2) im Moment benutze ich $_GET, weil das in dem Codeschnippsel so stand. Habe aber gelesen dass man lieber $_POST benutzen sollte. Wie sieht mein Code aus wenn ich das auf POST umstelle ?
3) Mir wäre eine Ausgabe in eine (formatierte) CSV-Datei lieber, um sie später bequem in Excel verwalten zu können. Krieg das aber leider mit der Formatierung nicht hin bzw. habe überhaupt keinen Plan wie das gehen soll...
4) Wie sicher ist dieser Form der "Datensammlung" ? Es soll eine reine Anmeldung sein, daher geht es nicht um sensible Daten. Aber ein "Ausspähen" anderer Benutzer sollte wenn möglich schon verhindert werden. Am wichtigsten aber ist mir der "Über-Schreibschutz" der erstellten Datei !
P.S: Ein Eintrag in eine Datenbank kommt leider aus technischen Gründen nicht in Frage, obwohl ich - Dank des Tutorials-Forums - inzwischen einigermassen damit zurechtkäme