Datensatz Speichern in PHP, variable übergeben?

Hallo Zusammen ,

Das Programm soll immer 2 neue Gerichte generieren,z.B. Kaffee Kuchen und je nach Bedarf soll man es speichern können oder neues generieren lassen.

Außerdem die letzten Gerichte sollen überschaubar sein.

Klappt soweit fast alles…
Problem:Nach generierung eines Gerichtes will ich es speichern aber speichert ein neu generiertes Gericht, jemand eine Lösung?oder nen Lösungsansatz??

Vielen Dank

<?php $essen=array();
$essen[]='Kaffee'; $essen[]='Trauben'; $essen[]='Kuchen'; $essen[]='Zitrone'; $essen[]='Nudeln'; $essen[]='Wassermelone'; $file='essen.txt'; echo' * * * '; if (array\_key\_exists ('action',$\_POST)){ switch ($\_POST['action']) { case 'Neuer Gericht': $button=1; break; case 'Speichern': $button=2; break; case 'Letzten Gerichte': $button=3; break; default: $button=0;}}else{$button=0;} switch ($button){ case 0: echo 'den Zufall starten oder die Liste zeigen'; break; case 1: echo 'Neues Gericht '; $nim=array\_rand($essen ,2); $text=$essen[$nim[0]].' + '.$essen[$nim[1]]; echo $text; break; case 2: echo 'Speichern '; $nim=array\_rand($essen,2); $text=$essen[$nim[0]].' + '.$essen[$nim[1]]; echo $text; //Speichern file\_put\_contents ($file,date('Y-m-d H:i:s').' '.$text."\n",FILE\_APPEND); break; case 3: echo 'Letzten Gerichte '; $fh=fopen($file,'r'); if ($fh){ while (($text=fgets($fh,1024))!==FALSE){ echo $text.' '; } } break; } echo ' '; echo ' '; echo ' '; echo ''; echo ''; ?\>

Also der Grund warum er ein neues Gericht speichert und nicht das Alte ist, dass du ja in Zeile 54 in case 2 wieder 2 neue Kombinationen erzeugst.

Du müsstest per versteckte Input Felder () beim nächsten Post dir die ursprünglichen Werte nochmal liefern lassen.

Beachte aber dass man das Editieren kann, und so theoretisch jeden beliebigen Wert speichern kann. Entweder überprüfst du also ob der gegebene Wert auch in deinem Array existiert, oder du nimmst Variante 2:

Du startest eine PHP Session und schreibt in eben die Session immer die letzten Werte, wenn Case 1 ausgeführt wird.
Führt man dann Case 2 aus, nimmst du anstatt array_rand($essen, 2) einfach die Werte aus deiner $_SESSION Variable.
Somit kannst du „garantieren“ dass der User nicht die Werte verfälschen kann.

Ich hoffe ich konnte dir so weiterhelfen.

PS: Gewöhn dir vlt. an öfters pastebin.com zu nutzen, a man hier Syntax-Highlighting direkt eingebaut hat, und auch besser auf Teile des Code’s verweisen kann.

Hallo Taner_1988,

sieht aus wie eine Hausaufgabe? :wink:

Was passiert denn genau, wenn du speichern möchtest?
Dein Programm hangelt sich auf Umwegen durch bis es hier landet:

 echo 'Speichern
'; 
 $nim=array\_rand($essen,2); 

 $text=$essen[$nim[0]].' + '.$essen[$nim[1]]; 

Was macht array_rand? Richtig, es generiert ein neues Essen…
Stattdessen möchtest du an dieser Stelle das zuletzt generierte Gericht speichern. Nur… Woher nehmen?? Du könntest jetzt mittels Session arbeiten. Oder dem Form nach jedem Aufruf input type=„hidden“-Felder hinzufügen. Oder jedes neue Gericht in einer temporären Textdatei speichern. Oder oder oder…
Wichtig ist nur, dass du an dieser Stelle wo du speichern willst, die Daten des letzten Aufrufs zur Verfügung hast. Und mindestens genau so wichtig ist, dass du diese Daten validierst. Immer wenn du Daten sichtbar machst, per Session oder hidden-Fields oder was auch immer, musst du damit rechnen, dass jemand dir Datenmüll unterschieben will. Besonders praktisch ist es deshalb, wenn du int-Werte übergibst, denn die Funktion intval arbeitet recht zuverlässig um Werte in Zahlen umzuwandeln…

Ich habe dir bewusst keine Komplettlösung sondern nur Denkanstösse geliefert. Falls du damit nicht weiterkommst, melde dich nochmal.

Viel Erfolg beim Lernen und einen schönen Ostermontagabend wünscht

frozen

Du hast über dem Speichern folgende Zeilen:

$nim=array_rand($essen,2);

$text=$essen[$nim[0]].’ + '.$essen[$nim[1]];
echo $text;

Also erzeugst du ein neues Gericht.

Außerdem wird das so nicht funktionieren; HTTP ist zustandslos. Wenn du eine Variable in einem neuen Skriptaufruf wiederverwenden willst (und das geschieht bei dir durch „Speichern“), musst du sie sichern, z.B.

  • in HIDDEN-Formularfeldern
  • in Cookies
  • in der Session

Hallo Zusammen ,

Das Programm soll immer 2 neue Gerichte generieren,z.B. Kaffee
Kuchen und je nach Bedarf soll man es speichern können oder
neues generieren lassen.

Außerdem die letzten Gerichte sollen überschaubar sein.

Klappt soweit fast alles…
Problem:Nach generierung eines Gerichtes will ich es speichern
aber speichert ein neu generiertes Gericht, jemand eine
Lösung?oder nen Lösungsansatz??

Ja, du generierst ja auch für das Speichern ein neues Gericht.
Wenn du das zuvor generierte speichern willst, gibst du das nicht nur mit Echo aus, sondern solltest es auch in einem html-Hidden-Feld speichern. Nach drücken von speichern wertest du dann den mit Post oder get übergebenen Parameter aus und speicherst den im File.
D.h. das neugenerieren bei Case 2 ersetzt du durch das auswerten des Parameters.

Soweit verständlich?

Vielen Dank

<?php :blush:essen=array();
$essen[]='Kaffee'; $essen[]='Trauben'; $essen[]='Kuchen'; $essen[]='Zitrone'; $essen[]='Nudeln'; $essen[]='Wassermelone'; $file='essen.txt'; echo' * * * '; if (array\_key\_exists ('action',$\_POST)){ switch ($\_POST['action']) { case 'Neuer Gericht': $button=1; break; case 'Speichern': $button=2; break; case 'Letzten Gerichte': $button=3; break; default: $button=0;}}else{$button=0;} switch ($button){ case 0: echo 'den Zufall starten oder die Liste zeigen'; break; case 1: echo 'Neues Gericht '; $nim=array\_rand($essen ,2); $text=$essen[$nim[0]].' + '.$essen[$nim[1]]; echo $text; break; case 2: echo 'Speichern '; $nim=array\_rand($essen,2); $text=$essen[$nim[0]].' + '.$essen[$nim[1]]; echo $text; //Speichern file\_put\_contents ($file,date('Y-m-d H:i:s').' '.$text."\n",FILE\_APPEND); break; case 3: echo 'Letzten Gerichte '; $fh=fopen($file,'r'); if ($fh){ while (($text=fgets($fh,1024))!==FALSE){ echo $text.' '; } } break; } echo ' '; echo ' '; echo ' '; echo ''; echo ''; ?\>

Danke war hilfreich, hab es jetzt mit Session gelöst

Super Vielen Dank hab mir deinen Tipp zu Herzen genommen und hab es jetzt mit Session geschafft zu lösen

Danke war seeeeehr hilfreich, hab es jetzt mit Session geschafft zu lösen.

hi,

sorry, kann dir leider im moment nicht weiterhelfen.

cu
harald
*******************

Hi Taner_1988,

dein Problem liegt darin, dass du das Gericht mit Übergeben musst, da PHP es sich nirgends merkt.

Über gib z.B. mittels

echo '';

deine generierten Gerichte und speichere sie nach Rückgabe des Formulares mittels

case 2: 
echo 'Speichern
'; 

$text=$\_POST('werte'); 
echo $text; 

ab.
cu Stefan

sorry, habe überhaupt keine Ahnung vom programmieren. Viel Erfolg bei der Lösung des Problems. Gruß Ingo