Nur $_POST-Variable behält sich den Wert

Hallo zusammen,

bei folgendem Code habe ich getestet, ob sich $_POST-Variablen bei einem erneuten Laden der Seite die Werte behalten, auch wenn die Werte den Variablen nicht mehr zugewiesen werden.

Bei dem Submit Button „NEU“ werden den POST-Variablen die Werte zugewiesen und bei „Speichern“ wird einfach nichts gemacht. Zuerst klicke ich auf Neu und dann auf Speichern. Die POST-Variablen behalten aber den Wert und werden korrekt in den Textfeldern angezeigt. Ändere ich aber den Namen von $_POST in $a ($_POST[‚vorname‘] in $a[‚vorname‘]) und wiederhole ich das Vorgehen, werden leere Felder angezeigt.

Woran liegt das?

Ich versuche den Quellcode in im nächsten Unterthread zu veröffentlichen, da ich ihn hier nicht reinkopieren kann.

<?php if($_POST['speichern'])<br />{

}

if($\_POST['leeren'])
{
$\_POST['vorname']="Hans";
$\_POST['name']="Meier";
$\_POST['ort']="Musterstadt";
}

?\>Cockpit Erfassung 

" method=„POST“>

Hi,

Bei dem Submit Button „NEU“ werden den POST-Variablen die
Werte zugewiesen und bei „Speichern“ wird einfach nichts
gemacht.

bei Neu bzw leeren wird das Array neu gefüllt, Speichern gibt’s nicht und für speichern ist nichts definiert.

Gruß
Ingo

<?php :
if($\_POST['speichern']) {

/* arbeiten mit $_SESSION , sonst nix speichern sondern nur neu Aufrufen .*/
/* bedenke , HTTP ist zustandslos ,

Browseranfrage -> Serverausgabe ,
(process ende )
Neue Browseranfrage -> Neue Serverantwort .
(process ende )

Wenn also was gespeichert werden soll , dann muss es irgendwie festegehalten werden auf der Server seite , das ist am einfachsten mit einer Session gemacht .
Und auch bei einer Session seite wird für die „Errinerung an den User“ eine ID verschickt um die Zustandslosigkeit zu überbrücken .
Viel Spass */

}

if($_POST[‚leeren‘])
{

/* mit Musterdaten überschreiben */

$_POST[‚vorname‘]=„Hans“;
$_POST[‚name‘]=„Meier“;
$_POST[‚ort‘]=„Musterstadt“;
}

?>

http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd“>

Cockpit

Erfassung
" method=„POST“>

Übersicht

Kunde:

Name:

Vorname:

Ort:

/* so und wo ist nun das $a ? und was soll das $a sein ?
eins weiss ich $a ist ungleich $_POST und in der Hausaufgabe steth bestimmt noch mehr als $a($_POST … lol
*/

Da haben wir vielleicht aneinander vorbei geredet.

Ausgehend vom Eröffnungsthread dreht es sich um folgende Zeilen.

<?php if($_POST['speichern'])<br />{

}

if($\_POST['leeren'])
{
$\_POST['vorname']="Hans";
$\_POST['name']="Meier";
$\_POST['ort']="Musterstadt";
}
?\>
.....

Name:



Vorname:



Ort:

Wenn ich nun den Submitbutton für leeren drücke werden die Felder gefüllt. Danach kann ich beliebig oft auf speichern klicken. Die Felder blieben mit den Werten gefüllt.

Ich ändere die obigen Zeilen wie folgt ab.

<?php if($_POST['speichern'])<br />{

}

if($\_POST['leeren'])
{
$a['vorname']="Hans";
$a['name']="Meier";
$a['ort']="Musterstadt";
}
?\>

Name:



Vorname:



Ort:

Unter diesem Code klicke ich auf leeren. Die Felder werden wieder gefüllt. Sobald ich nur einmal auf speichern klicke, werden Felder sofort geleert. Im Gegensatz dazu bleiben im obigen Code die Felder gefüllt.

Wie kann das sein?

Hallo

Da haben wir vielleicht aneinander vorbei geredet.

nein haben wir nicht

Ausgehend vom Eröffnungsthread dreht es sich um folgende
Zeilen.

nochmal gucken

<?php :if($_POST['speichern'])
{

speichern macht immer noch nix

}

if($_POST[‚leeren‘])
{

wenn also Button ‚leeren‘
dann werden die POST variablen gesetzt

$_POST[‚vorname‘]=„Hans“;
$_POST[‚name‘]=„Meier“;
$_POST[‚ort‘]=„Musterstadt“;
}
?>

hier dann die ausgabe von POST (POST werden auch durch das Absenden gesetzt, und inklusive dem Button der geklickt wurde)

Name:

Vorname:

Ort:

Wenn ich nun den Submitbutton für leeren drücke werden die
Felder gefüllt. Danach kann ich beliebig oft auf speichern
klicken. Die Felder blieben mit den Werten gefüllt.

ist klar oder ?

POST Daten kommen vom Formular beim Absenden ,
nur beim klick auf Leeren werden diese mit Musterdaten überschrieben.

Ich ändere die obigen Zeilen wie folgt ab.

<?php :if($_POST['speichern'])
{

passiert beim speichern immer noch nix (ausser das die daten die in POST sind immer noch da sind (oder beim ersten aufruf nicht da sind)

}

if($_POST[‚leeren‘])
{

ok hier sagst du wenn der Button ‚leeren‘ geklickt wurde
dann soll $a[…] mit Musterdaten belegt werden.

$a[‚vorname‘]=„Hans“;
$a[‚name‘]=„Meier“;
$a[‚ort‘]=„Musterstadt“;
}
?>

Hier gibts Du $a aus , wenn also nicht ‚leeren‘ gedrückt wurde , ist und bleibt
$a komplett leer , bzw existiert gar nicht (immer vorher definieren bitte)

Name:

Vorname:

Ort:

Unter diesem Code klicke ich auf leeren. Die Felder werden
wieder gefüllt. Sobald ich nur einmal auf speichern klicke,
werden Felder sofort geleert. Im Gegensatz dazu bleiben im
obigen Code die Felder gefüllt.

$_POST Daten werden durch das Formular erzeugt , beim klicken
auf die sende buttons werden also immer diese $_POST Daten gefüllt.

Du gibst aber nicht $_POST aus sondern $a
und $a ist leer , den bei jedem Aufruf (zustandslos) weiss der PHP process nix von $a
, von $_POST weiss PHP nur was weil es in den Felder in der Form so eingetragen wurde und so vom Browser verschickt wurde.

Du kannst nicht einfach $a nehmen und glauben da zwischen zwei aufrufen diese
Daten transportiert werden.

Das PHP läuft genau einmal ab , bis zur ausgabe , danach wird der speicher gelöscht .

es macht also überhaupt keinen sinn $a zu belegen bzw auszugeben
denn $a ist immer leer ausser wenn der ‚leeren‘ button gedrückt wurde .

willst du $_POST Informationen auf den Server speichern
muss du dich mti zustandslosigkeit auseinander setzen.

stell dir php also kommando zeile vor.

cli-php meinprogramm.php

das wird dann einmal ausgeführt , etwas wird ausgegeben und dann beendet.

will ich das programm nochmal ausführen starte ich es neu

cli-php meinprogramm.php

zwischen den beiden aufrufen ist keine verbindung , das erste mal ist genauso wie das zweite mal , am ende ist der speicher wieder frei .

will ich eine verbindung , bräuchte ich eine kennung die dem programm mitteilt das ich gerade ich bin und nciht wer anders .

cli-php meinprogramm.php?techpech

z.b. mit techpech als url parameter

ruf ich das immer wieder auf , kann das php anhand der parameter nahcgucken was
für techpech gespeichert wurde .

if ($_GET[‚techpech‘]) {

/* speichern */

}

so nur wie speicher ich ? , mit variablen geht nicht, die sind ja am ende des programms wieder leer .

also nehm ich eine textdatei nenne sie techpech.txt und schreib da alle $_POST Daten rein . wenn es schon eine techpech.txt gibt, dann lese ich am anfang des PHP die Daten ein und überschreibe (bzw hinzufühgen) sie gegebenenfalls mit neuen $_POST Daten.
So kannst man auch Eingaben etc über mehrere Aufrufe deselben programms sammeln.

Wie kann das sein?

Zustandslosigkeit solltest Du dir mal auf wikipedia angucken,

http Server programme laufen nicht ewig , sie sterben so schnell es geht , das macht auch sinn :smile:

Danke für deine Geduld!
Hallo und danke!

Also das Formular erzeugt die $_POST Variablen. Deshalb bleiben die erhalten und $a nicht.

Gruß

Alex

Hallo,

Hallo und danke!

Also das Formular erzeugt die $_POST Variablen. Deshalb

Jup das absenden erzeugt ein POST mit allen belegten formfeldern
php fängt diese Daten ab und bereitet sie schön übersichtlich in
assoziativen arrays auf.

bleiben die erhalten und $a nicht.

$a ist von dir erzeugter speicher der nur wärend des programmablauf genutzt werden kann.
nach der ausgabe durch das PHP an den Browser , gibt es diesen Speicher nicht mehr und das Programm endet auch.

Gruß

Alex

TechPech

Hallo Alex,

Du musst dir bewusst machen, dass das Web zustandslos ist, es unterscheidet sich von Softwareentwicklung, bei der man Variablen beliebig speichern kann und über die Aufrufe hinaus, abrufbar sind.

Angenommen du hast dein Script a.php, sobald das Ende des Scriptes erreicht wird, ruft php automatischen den Destruktor auf und zerstört alle aufgerufenen Objekte in deinem Script (bzw. Speicher).

Lösung wäre, entweder du speicherst Objekte über eine Session, also $_SESSION[‚id‘] = $id oder handlest das ganze über hidden-Felder, also

oder du lässt das script sich selbst aufrufen (Affenformular) und setzt die Parameter wieder über den $_REQUEST[‚id‘], z.B.

Gruß XXD