PHP globale variable + post..

  • Ich bin am Verzweifeln.. das Problem: mein simple-snippet funktioniert nicht. Idee: 2 Formulare in einer PHP Seite. Jedes Formular besitzt 2 Buttons. Button1 um sich selbst aufzurufen, Button2 um das jeweils andere Formular aufzurufen. Jedes Formular hat eine TextBox. Der Inhalt der Textbox wird bei(m) POST(en) in die globale variable geschrieben. Witzigerweise wird der Wert auch mitgenommen und aus der globalen variabeln ausgeschrieben. Beim Zurück-Wechseln des Formulars auf sich selbst liest er jedoch keine Werte mehr aus..

    <?php

    global $items, $step;


    if($_POST) {

    if(isset($_POST['S1'])) {

    if(!empty($_POST['beruf'])){

    $items['beruf'] = $_POST['beruf'];

    }


    if (!empty($_POST['alter'])){
    $items['alter'] = $_POST['alter'];
    echo $items['alter'];
    }
    else{
    echo "POST[S1] empty!";
    }

    echo "alter ist: ";
    echo $items['alter'];
    $step = 1;

    }


    else if(isset($_POST['S2'])) {

    if(!empty($_POST['alter'])){

    $items['alter'] = $_POST['alter'];

    }


    if (!empty($_POST['beruf'])){
    $items['beruf'] = $_POST['beruf'];
    echo $items['beruf'];


    }
    else{
    echo "POST[S2] empty!";
    }

    $step = 2;

    }

    }


    if (empty($step)){

    $step = 1;

    }


    if ($step == 1){
    ?> S1Beruf
    <form name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <input type="text" name="beruf" value ="<?php echo $items['beruf']; ?>">
    <input type="submit" name="S1" value="Submit1">
    <input type="submit" name="S2" value="Submit2">
    </form>

    <?php
    }
    if ($step == 2){
    ?>
    S2Alter
    <form name="form2" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <input type="text" name="alter" value ="<?php echo $items['alter']; ?>">
    <input type="submit" name="S1" value="Submit1">
    <input type="submit" name="S2" value="Submit2">

    </form>

    <?php
    }

    ?>

  • was genau verstehst unter

    Zitat

    Zurück-Wechseln des Formulars auf sich selbst

    das problem ist, das natürlich nur die formularwerte übertragen werden die auch im aktuellen formular drinnen stehen. wenn also Form2 submited wird, ist nur mehr der $_POST['alter'] gesetzt.

    eventuall liegt da (ich spiele auf den post von dir wegen den globals an) ein vertändnis problem vor. "global" bedeutet nur, das die variable innerhalb einer funktion lesbar ist. wenn du variablen "weiterereichen" willst - in deinem fall "beruf" auch nach dem abschicken des 2ten formulars haben willst, muss du es auch als (verstecktes) element in das formular eintragen.


    wenn du folgendes noch ins form2 einträgst sollte das ergebnis also passen.

    PHP
    <input type="hidden" name="beruf" value ="<?php echo $items['beruf']; ?>">

    ich hoff ich war vertsändlich :)

  • hm, sicher dass das mit doppelten anführungsstrichen auch geht?

    ich verwend eigentlich immer $_POST['submit'] statt $_POST['submit'] und das global würd ich global überhaupt weglassen. macht imho keinen sinn.

    du kommst mit $_POST['varname'] ja auch auf den wert deiner variable....

    Saying that Java is nice because it works on all OS's is like saying that anal sex is nice because it works on all genders!
    http://www.chuckbronson.net/

  • Danke für die hilfreichen Infos! Jedoch drängt sich nun eine Frage auf:

    Wieso kann ich nicht POST Werte in eine globale variable schreiben, und diese dann auslesen? Wieso benötige ich hidden fields? ich lese aus meinem formular ="<?php echo $items['alter']; ?>"> aus, und nichts aus $_POST... (ich setze nur aus POST in meine globale variable)

  • ja und ich frage daraufhin: wozu?

    schau eine ganz simple geschichte:


    da brauch ich kein global.... wozu auch... was du machst ist ja von einem "array" in ein anderes hineinschreiben, ich versteh den sinn dahinter nicht ganz...

    Saying that Java is nice because it works on all OS's is like saying that anal sex is nice because it works on all genders!
    http://www.chuckbronson.net/

  • Zitat von sommeralex

    Wieso kann ich nicht POST Werte in eine globale variable schreiben, und diese dann auslesen? Wieso benötige ich hidden fields? ich lese aus meinem formular ="<?php echo $items['alter']; ?>"> aus, und nichts aus $_POST... (ich setze nur aus POST in meine globale variable)

    Bitte was? :confused:

  • ich fasse einmal mein "verständnis-problem" zusammen:

    unter der annahme, dass ich eine php datei mit mehreren Formularen habe und keine hidden fields verwende, um daten aus unterschiedlichen formularen zu behalten, ist meine logik die folgende:

    1. In einer $_POST Variable stehen immer nur alle Variablen, die im FORM auch definiert sind. inputtype="text" name =textbox1" im form1 meiner seite.php - bedeutet, bei einem SUBMIT gibts im $_POST eine Variable namens textbox1.
    2. In meiner seite.php habe ich jedoch noch ein Formular, form2, mit dem inputtype="text", name "textbox2". Wird aus diesem das SUBMIT befohlen, habe ich in meiner $_POST Variable nur eine textbox2-variable. Die textbox1 variable wäre leer. analog für form1.
    3.um meine Daten jedoch nun aber nicht zu verlieren, kopiere ich von einem array ($_POST) welches immer nur ein paar textbox-elemente enthält (nämlich die des FORMS aus dem submited wurde), in mein "rießiges" globales array, welches am schluss, nachdem ich alle Formulare submitet habe, alle variabeln enthält. - und deshalb kopiere ich von einem "kleinen" array (POST) in ein anderes (GLOBAL).
    4.meine php Seite ruft sich immer selber auf und in Abhängigkeit des submits wird entweder form1 oder form2 geladen.

    wieso stimmen meine überlegungen nicht?

    soweit, so gut..

    AHAHAHAHAH: ich glaube, ich weiß, was falsch ist, und bitte um "Bestätigung": durch jeden SUBMIT-Befehl (meine seite1.php mit mehreren formularen ruft sich immer selber auf) gehen alle DATEN (auch eine globale variable) VERLOREN. das einzige, was bleibt, sind die durch POST übermittelten Variablen. Meine Annahme war, dass "global" quasi wie eine session Variable ist!!!!!!!

  • Zitat von sommeralex

    AHAHAHAHAH: ich glaube, ich weiß, was falsch ist, und bitte um "Bestätigung": durch jeden SUBMIT-Befehl (meine seite1.php mit mehreren formularen ruft sich immer selber auf) gehen alle DATEN (auch eine globale variable) VERLOREN. das einzige, was bleibt, sind die durch POST übermittelten Variablen. Meine Annahme war, dass "global" quasi wie eine session Variable ist!!!!!!!

    So ist es. Du musst dir das so vorstellen: Irgendwo auf deinem Rechner gibt es das Programm php, das nichts anderes tut, als eine PHP-Datei einzulesen, zu verarbeiten und eine entsprechende Ausgabe zu liefern. Wenn dein Webserver eine .php-Datei findet, stellt er fest, dass er nicht den Inhalt der .php-Datei an deinen Webclient schicken soll, sondern das, was PHP daraus macht. PHP wird jedes Mal aufgerufen, wenn der Webclient eine PHP-Datei vom Server anfordert, und danach gleich wieder beendet.

    Das führt dazu, dass die Werte von Variablen nur so lange erhalten bleiben, wie PHP den Code interpretiert; sobald PHP terminiert, gehen die Variableninhalte verloren. Um Variablenwerte bei einem weiteren Aufruf von PHP wieder zu verwenden, kann man sie in Form eines POST-Requests erneut vom Client zum Server übertragen, oder man verwendet Session-Variablen, bei denen der Server die Werte speichert und weiterverwendet, sobald er den Client anhand einer übermittelten Session-ID wiedererkennt.

  • genau das hab ich vorher gemeint mit

    Zitat

    eventuall liegt da (ich spiele auf den post von dir wegen den globals an) ein vertändnis problem vor. "global" bedeutet nur, das die variable innerhalb einer funktion lesbar ist. wenn du variablen "weiterereichen" willst - in deinem fall "beruf" auch nach dem abschicken des 2ten formulars haben willst, muss du es auch als (verstecktes) element in das formular eintragen.

    Zitat

    hm, sicher dass das mit doppelten anführungsstrichen auch geht?

    ja sicher, ist egal, beides ein string.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!