Benutzerdefinierte Datei mit PHP öffnen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anpassen
antwort
antworten
array
bedienung
code
datei
datum
direkt start
eingabefeld
ergebnis
fehlende daten
fehler
file
form
frage
meter
re
url
video
-
Guten Mittag liebe Community,
ich habe in einer ref="/tag/datei">Datei ein Eingabefeld mit dem man eine Datei mit dem Namen erstellt, den man in dem Eingabefeld eingegeben hat.
Nun habe ich eine andere Datei und möchte die erstellte Datei öffnen, also so in der art:
$datei = fopen("mueller","r+");
Hier habe ich jetzt als Dateinamen "mueller" eingegeben, ich möchte aber die Datei öffnen, die man zuvor als Namen eingegeben hat.
Der Code von der anderen Datei lautet (Danke an hemiolos für diesen Code!) :
<?php error_reporting(E_ALL | E_STRICT); session_start(); $_SESSION['counter_ip'] = false; $a==1; if((!empty($_POST['action']) && $_POST['action'] === 'write') && !empty($_POST['name'])) { // alle daten vorhanden if(is_file($_POST['name']) && is_writable($_POST['name'])) { echo 'Okey'; } else { // file existiert noch nicht if(file_put_contents($_POST['name'], 1)) { // alles bestens $_SESSION['counter_ip'] = true; $res = "{$_POST['name']} 1 - mal da!"; } else { // du kannst in file nicht schreiben unset($_SESSION['counter_ip']); session_close(); exit('lasse dir was einfallen'); } } } else { // entweder direkt start oder fehlende daten $res = <<< EOT <form action="" method="post"> name: <input type="text" name="name" /> <input type="submit" name="action" value="write" /> </form> EOT; } echo $res; ?>
Wie mache ich das am besten? Freue mich auf hilfreiche Antworten.
mfg -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
kleine (aber wichtige!) änderung zum vorigen prog (file: write.php):
dieses prog braucht jetzt einen unterordner, also './files', wo die dateien hineingeschrieben werden!<?php error_reporting(E_ALL | E_STRICT); session_start(); $_SESSION['counter_ip'] = false; if((!empty($_POST['action']) && $_POST['action'] === 'write') && !empty($_POST['name'])) { // path: $path = './files/' . $_POST['name']; // alle daten vorhanden if(is_file($path) && is_writable($path)) { // file vorhanden, also increment counter $count = file_get_contents($path); file_put_contents($path, ++$count); $_SESSION['counter_ip'] = true; $res = "{$_POST['name']} $count - mal da!"; } else { // file existiert noch nicht if(file_put_contents($path, 1)) { // alles bestens $_SESSION['counter_ip'] = true; $res = "{$_POST['name']} 1 - mal da!"; } else { // du kannst in file nicht schreiben unset($_SESSION['counter_ip']); session_close(); exit('lasse dir was einfallen'); } } } else { // entweder direkt start oder fehlende daten $res = <<< EOT <form action="" method="post"> name: <input type="text" name="name" /> <input type="submit" name="action" value="write" /> </form> EOT; } echo $res;
und dann das öffnen (file: read.php):<?php error_reporting(E_ALL | E_STRICT); if((!empty($_POST['action']) && $_POST['action'] === 'open') && !empty($_POST['name'])) { // open file $name = basename($_POST['name']); $res = "count for $name: " . file_get_contents($_POST['name']); } else { // create form $ls = glob('./files/*'); foreach($ls as $file) { $files[] = realpath($file); } $select = "<select name=\"name\">\n"; foreach($files as $file) { $f = basename($file); $select .= "<option value=\"$file\">$f</option>"; } $select .= "</select>"; $res = <<< EOT <form action="" method="post"> $select<input type="submit" name="action" value="open" /> </form> EOT; } echo $res;
-
hemiolos schrieb:
kleine (aber wichtige!) änderung zum vorigen prog (file: write.php):
dieses prog braucht jetzt einen unterordner, also './files', wo die dateien hineingeschrieben werden!<?php error_reporting(E_ALL | E_STRICT); session_start(); $_SESSION['counter_ip'] = false; if((!empty($_POST['action']) && $_POST['action'] === 'write') && !empty($_POST['name'])) { // path: $path = './files/' . $_POST['name']; // alle daten vorhanden if(is_file($path) && is_writable($path)) { // file vorhanden, also increment counter $count = file_get_contents($path); file_put_contents($path, ++$count); $_SESSION['counter_ip'] = true; $res = "{$_POST['name']} $count - mal da!"; } else { // file existiert noch nicht if(file_put_contents($path, 1)) { // alles bestens $_SESSION['counter_ip'] = true; $res = "{$_POST['name']} 1 - mal da!"; } else { // du kannst in file nicht schreiben unset($_SESSION['counter_ip']); session_close(); exit('lasse dir was einfallen'); } } } else { // entweder direkt start oder fehlende daten $res = <<< EOT <form action="" method="post"> name: <input type="text" name="name" /> <input type="submit" name="action" value="write" /> </form> EOT; } echo $res;
und dann das öffnen (file: read.php):<?php error_reporting(E_ALL | E_STRICT); if((!empty($_POST['action']) && $_POST['action'] === 'open') && !empty($_POST['name'])) { // open file $name = basename($_POST['name']); $res = "count for $name: " . file_get_contents($_POST['name']); } else { // create form $ls = glob('./files/*'); foreach($ls as $file) { $files[] = realpath($file); } $select = "<select name=\"name\">\n"; foreach($files as $file) { $f = basename($file); $select .= "<option value=\"$file\">$f</option>"; } $select .= "</select>"; $res = <<< EOT <form action="" method="post"> $select<input type="submit" name="action" value="open" /> </form> EOT; } echo $res;
Danke, nun versuche ich, den Counter an eine andere Bedienung anzuknüpfen, nämlich ob die Frage beantwortet wurde.
Hier mal ein Ausschnitt aus meinen bisherigen versuchen:
//Frage1 $a=$_GET['eingabefeld1']; $text[1]='Wie heisst Obama mit Vornamen? <br /> <br /> 1: Barack <br /> 2: Klaus <br /> 3: Hubertus <br /> 4: Ole <br /> <br /> <form action="code.php" method="get"> <input type="text" name="eingabefeld1"> </input> <input type="submit"> </input> </form>'; if($a==1) { echo 'Die Antwort ist...RICHTIG! <a href="http://schinkenmedia.de/punktekoenig/code.php">Klicke hier für die nächste Frage!</a>'; } if($a==2) { echo 'Die Antwort ist....leider Falsch!! <a href="http://schinkenmedia.de/punktekoenig/code.php">Klicke hier um noch einmal zu spielen</a>'; } if($a==3) { echo 'Die Antwort ist....leider Falsch!! <a href="http://schinkenmedia.de/punktekoenig/code.php">Klicke hier um noch einmal zu spielen</a>'; } if($a==4) { echo 'Die Antwort ist....leider Falsch!! <a href="http://schinkenmedia.de/punktekoenig/code.php">Klicke hier um noch einmal zu spielen</a>'; } error_reporting(E_ALL | E_STRICT); if((!empty($_POST['action']) && $_POST['action'] === 'open') && !empty($_POST['name']) && ($a==1)) { // open file $name = basename($_POST['name']); $res = "count for $name: " . file_get_contents($_POST['name']); } else { // create form $ls = glob('./files/*'); foreach($ls as $file) { $files[] = realpath($file); } $select = "<select name=\"name\">\n"; foreach($files as $file) { $f = basename($file); $select .= "<option value=\"$file\">$f</option>"; } $select .= "</select>"; $res = <<< EOT <form action="" method="post"> $select<input type="submit" name="action" value="open" /> </form> EOT; } echo $res; if($a==1) { exit; } if($a==2) { exit; } if($a==3) { exit; } if($a==4) { exit; }
Bloß jetzt muss ich mich einerseits nach jeder Eingabe neu einloggen und andererseits wird der Counter durch meine Bedienung ($a==1) nicht hochgesetzt.
Wie kann ich das ändern/anpassen.
Ich bin noch relativ neu in Sachen programmieren / webbasiertes programmieren.
mfg
Beitrag zuletzt geändert: 16.1.2012 15:27:03 von schinkenmedia -
schinkenmedia schrieb:
in dem du uns sagst, was du mit dem ding eigentlich betreiben willst!
Wie kann ich das ändern/anpassen.
ich habe bisher - mehr oder minder - richtig geraten!! aber das wollen wir nun hinter uns lassen und du möchtest dich in diesem sinne outen! was hast du eigentlich vor?
es hat - wie wir es gesehen haben - mehrere (unterschiedliche) postings gegeben, die alle in die selbe richtung gedeutet haben. wir sind trotzdem keine griechen, die orakeln deuten. also klartext!?
ich bitte trotzdem um geduld, ich bin gerade dabei: Tribute in Concert (Full Video) ;)
(es dauert ~01:30:00 stunden!)
p.s.: den letzten kode von dir sehe ich mir noch an.
Beitrag zuletzt geändert: 16.1.2012 17:03:21 von hemiolos -
hemiolos schrieb:
schinkenmedia schrieb:
in dem du uns sagst, was du mit dem ding eigentlich betreiben willst!
Wie kann ich das ändern/anpassen.
ich habe bisher - mehr oder minder - richtig geraten!! aber das wollen wir nun hinter uns lassen und du möchtest dich in diesem sinne auten! was hast du eigentlich vor?
es hat - wie wir es gesehen haben - mehrere (unterschiedliche) postings gegeben, die alle in die selbe richtung gedeutet haben. wir sind trotdem keine griechen, die orakeln deuten. also klartext!?
ich bitte trotzdem um geduld, ich bin gerade dabei: Tribute in Concert (Full Video) ;)
(es dauert ~01:30:00 stunden!)
p.s.: den letzten kode von dir sehe ich mir noch an.
Okey, dann will ich das mal beschreiben:
Ich möchte, teilweise um PHP zu üben, teilweise um ein bisschen Spielspaß hervorzurufen, ein Spiel (webbasiert) machen, dass mit "Wer wird Millionär" vergleichbar ist. er Benutzer bekommt eine von mehreren Fragen zufällig zugewiesen und hat 4 Antwortmöglichkeiten, die mit jeweils einer Nummer bestückt sind. Je nachdem, welche Antwort er eingeben möchte gibt er die Zahl, die vor der Antwort steht, in ein Eingabefeld ein. Daraufhin wird überprüft, ob das Ergebnis richtig oder falsch ist. Wenn es richtig ist bekommt er die Meldung das er gewonnen hat und durch das klicken auf den Link bekommt er eine weitere Frage.
Soviel zum ersten Teil
Dann soll noch eine Überprüfung stattfinden. Wenn er richtig geantwortet hat, soll ein Counter hochgesetzt werden. Das habe ich früher ganz einfach mit einem simplen Script gelöst:
if($b==2) { $counterstand++; rewind($datei); fwrite($datei, $counterstand); $_SESSION['counter_ip'] = true; }
In diesem Falle war die Antwort 2 die richtige.
Nun möchte ich aber eine Highscoreliste erstellen, d.h. beginnt der start des Spieles in einer anderen Datei, wo der Spieler seinen Namen eingeben soll. Hat er das getan soll für ihn eine Datei mit seinem angegebenen Namen erstellt werden und er soll entweder manuell oder automatisch auf die nächste Seite, die mit den Fragen, weitergeleitet werden. Jetzt soll, wenn eine Bedienung erfüllt ist (z.B. $b==2) die Zahl in der Datei mit dem angegebenen Namen um eins erhöht werden. Wenn er dann verloren hat wird er entweder manuell oder automatisch auf eine dritte Seite weitergeleitet, wo er seinen Highscore sehen kann.
Ich hoffe ich konnte es ausführlich genug beschreiben.
mfg
Beitrag zuletzt geändert: 16.1.2012 15:56:59 von schinkenmedia -
Hi
hier mal ein ganz dreckiger php code
<?php if (!empty($_POST['name'])) { $go_name = trim(chop($_POST['name'])); // ----- Eingabe von Steuer- und Sonderzeichen befreien ----- $go_name = preg_replace('/[^0-9a-zA-ZäöüÄÖÜß_\- ]/', '', $go_name); $umlaute1 = array( 'ä', 'ö', 'ü', 'ß', 'Ä', 'Ö', 'Ü' ); $umlaute2 = array( 'ae', 'oe', 'ue', 'ss', 'Ae', 'Oe', 'Ue' ); $save_name = str_replace($umlaute1, $umlaute2, $go_name); $file_name = '_user_'.$save_name.'.txt'; if (!file_exists($file_name)) { $user_infos = "0|0|0"; $handle = fopen($file_name,"w", 0666); fwrite($handle,$user_infos); fclose($handle); } else { $user_infos = file_get_contents($file_name); } // --------------------------------------- $fragen = array(); $fragen[0] = 'Fragen und Antworten'; $fragen[1] = array(); $fragen[1][0] = 'Was hat hat eine Elefant ?'; $fragen[1][1] = 'Schnabel'; $fragen[1][2] = 'Rüssel'; $fragen[1][3] = 'Flügel'; $fragen[1][4] = 'Federn'; $fragen[1][5] = 2; $fragen[2] = array(); $fragen[2][0] = 'Wie hoch ist der Eifelturm in Paris ?'; $fragen[2][1] = '113 Meter'; $fragen[2][2] = '241 Meter'; $fragen[2][3] = '324 Meter'; $fragen[2][4] = '537 Meter'; $fragen[2][5] = 3; $fragen[3] = array(); $fragen[3][0] = 'Wie heisst die Hauptstadt von Italien ?'; $fragen[3][1] = 'Neapel'; $fragen[3][2] = 'Venedig'; $fragen[3][3] = 'Rom'; $fragen[3][4] = 'Palermo'; $fragen[3][5] = 3; $fragen[4] = array(); $fragen[4][0] = 'Wo findet das Dschungle-Camp statt ?'; $fragen[4][1] = 'Brasilien'; $fragen[4][2] = 'Iran'; $fragen[4][3] = 'Deutschland'; $fragen[4][4] = 'Australien'; $fragen[4][5] = 4; $anzahlfragen = (count($fragen) - 1); // --------------------------------------- $user_data = explode('|',$user_infos); $last_frage = $user_data[0]; $antw_richtig = $user_data[1]; $antw_falsch = $user_data[2]; if (!empty($_POST['zumergebnis']) && $_POST['zumergebnis'] == 'ja') { echo "<h2>ERGEBNIS</h2>\r\n"; echo "<p>Name: $go_name </p>\r\n"; echo "<p>Anzahl Fragen: $last_frage</p>\r\n"; echo "<p>Rischtige Antworten: $antw_richtig </p>\r\n"; echo "<p>Falsche Antworten: $antw_falsch </p>\r\n"; } else { $fragenr = ($last_frage + 1); $ausgabe1 = $fragen[$fragenr]; if (!empty($_POST['fnum'])) { $go_fnum = trim(chop($_POST['fnum'])); if ($_POST['antwort'] == $ausgabe1[5]) { echo "<p>Deine Antwort war richtig.</p>\r\n"; $antw_richtig++; } else { echo "<p>Deine Antwort war falsch.</p>\r\n"; $antw_falsch++; } $fragenext = ($fragenr+1); $user_infos_neu = "$fragenr|$antw_richtig|$antw_falsch"; $handle = fopen($file_name,"w", 0666); fwrite($handle,$user_infos_neu); fclose($handle); if ($fragenr == $anzahlfragen) { echo "<form name=\"form3\" method=\"post\" action=\"\">\r\n"; echo "<p>Weiter zum ERGEBNIS</p>\r\n"; echo "<input type=\"hidden\" name=\"name\" value=\"$go_name\">\r\n"; echo "<input type=\"hidden\" name=\"zumergebnis\" value=\"ja\">\r\n"; echo "<p> OK <input type=\"submit\" name=\"go\" value=\"weiter\"> </p>\r\n"; echo "</form>\r\n"; } else { echo "<form name=\"form3\" method=\"post\" action=\"\">\r\n"; echo "<p>Weiter zur FRAGE: $fragenext</p>\r\n"; echo "<input type=\"hidden\" name=\"name\" value=\"$go_name\">\r\n"; echo "<p> OK <input type=\"submit\" name=\"go\" value=\"weiter\"> </p>\r\n"; echo "</form>\r\n"; } } else { echo "<h2>FRAGE: $fragenr von $anzahlfragen</h2>\r\n"; echo "<form name=\"form2\" method=\"post\" action=\"\">\r\n"; echo "<p>FRAGE: $ausgabe1[0]</p>\r\n"; echo "<p> </p>\r\n"; echo "<p>ANTWORTEN:</p>\r\n"; echo "<ol>\r\n"; echo "<li> <input type=\"radio\" name=\"antwort\" value=\"1\"> $ausgabe1[1] </li>\r\n"; echo "<li> <input type=\"radio\" name=\"antwort\" value=\"2\"> $ausgabe1[2] </li>\r\n"; echo "<li> <input type=\"radio\" name=\"antwort\" value=\"3\"> $ausgabe1[3] </li>\r\n"; echo "<li> <input type=\"radio\" name=\"antwort\" value=\"4\"> $ausgabe1[4] </li>\r\n"; echo "</ul>\r\n"; echo "<input type=\"hidden\" name=\"name\" value=\"$go_name\">\r\n"; echo "<input type=\"hidden\" name=\"fnum\" value=\"$fragenr\">\r\n"; echo "<p> OK <input type=\"submit\" name=\"go\" value=\"weiter\"> </p>\r\n"; echo "</form>\r\n"; } } } else { ?> <br> <form name="form1" method="post" action=""> Dein Name: <input type="text" name="name" size="24" maxlength="100"> OK <input type="submit" name="go" value="weiter"> </form> <br> <?php } // --------------------------------------- ?>
problem dabei ist vorallem, wenn der User im Browser zurück geht,
dann kommt Fehler, weil Fragen-Nr weiter hoch gezählt wird.
eigentlich so völlig unbrauchbar der Code, Fehler sind so garantiert !!!
aber ist halt einfach mal ein Denk-Anstoß ... zu Fragen in Array
geht der User aber brav nur über die Formular Buttons, sollte es klappen
aber so ist das keine gute Lösung
besser wäre wohl alles in MySQl zu machen
und auch mit einer Tabelle, welche Fragen welcher User schon beantwortet hat
dann kann er evtl auch mal eine überspringen bzw. man kann Fehler abfangen,
indem man prüft, ob diese Frage schon beantwortet wurde, wenn ja , nicht nochmal
auch würde ich für jeden User (Name) einen Account machen, mit Passwort und Login
so, dass nicht 2 verschiedene Personen mit dem gleicnen Name rumhantieren
Nochmal ... der Code oben ist eigentlich ein NEGATIV Beispiel und sollte NICHT verwendet werden
aber vielleicht kann man daraus ja weitere Ideen ableiten
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage