Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] GET funktioniert nur beim zweiten mal

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] GET funktioniert nur beim zweiten mal

    Hallo,

    Ich bin schon echt am verzweifeln. Mein Script funktioniert, aber nur wenn ich 2 mal auf Submit klicke:

    PHP-Code:
    <?php

    $MEINSERVER 
    "SERVER1";

    require 
    "/http/htdocs/server/connect_server.inc";

    $AllValidNodes = array ();

    $conn ConnectDB("$MEINSERVER");

    $sql "select VORNAME,NACHNAME from LISTE";

    $AllValidNodes QueryDB ($conn,$sql);

    DisConnectDB ($conn);

    $NodeName $_GET['NodeName'];
    $ja $_GET['richtig'];

    if (
    $AllValidNodes[$NodeName] == 'VERGLEICH') {
         
    $Korrekt "Korrekt";
    }
    else {
         
    $Unsinn "Unsinn";
    }


    if (
    $Unsinn == "Unsinn"){
    $nein "ungueltig";}
    else {
    $ja "gueltig";}

    echo 
    '<form action="'.$_SERVER['PHP_SELF'].'" method="get">';


    echo 
    '<input type="submit" value="Go " >';

    echo 
    '<input type="hidden" name="richtig" value="'.$ja.'" >';

    echo 
    '<input type="text" name="NodeName" class="input" value="'.$NodeName.'" />';

    echo 
    '</form>';

    ?><?php echo $NodeName?>

    Folgendes passiert: In der Datenbank wird verglichen, ob das was ich in der Textbox eingebe, auch in der Datenbank steht oder nicht.

    Wenn es richtig ist soll in der URL das hier stehen:

    localhost/test.html?richtig=gueltig&NodeName=Hans

    Wenn falsch kann das so bleiben:

    localhost/test.html?hi=&NodeName=blabla


    Schön und gut das funktioniert ja, aber es setzt sich erst um wenn ich ein zweites mal auf den Submit button klicke. Das heißt, wenn ich einmal auf Submit drücke sieht das erst einmal so aus:

    localhost/test.html?hi=&NodeName=Hans

    Beim zweiten Klick mal so:

    localhost/test.html?richtig=gueltig&NodeName=Hans

    Habe schon rumgeforscht, es ändert sich immer erst wenn man das script zweimal aufruft.

    Ich kriege einfach keine Lösung dazu...

    Kopfkratzen

    Kann wer helfen bitte?


  • #2
    Meine Güte, du solltest echt nochmal an der Formatierung arbeiten.
    Generell hast du da teils sehr seltsame Dinge im Code.

    PHP-Code:
    require "/http/htdocs/server/connect_server.inc"
    http://www.ermshaus.org/2012/09/php-...emals-ohne-dir

    PHP-Code:
    if ($AllValidNodes[$NodeName] == 'VERGLEICH') {
         
    $Korrekt "Korrekt";
    }
    else {
         
    $Unsinn "Unsinn";

    Hä?
    Ich weiß zwar nicht, was für Werte du in dein Formular eingibst, aber in $AllValidNodes hast du ja Vor- und Nachnamen drin, gibt es da wirklich Namen die "VERGLEICH" lauten?
    Dann die Variablen die du im if-else setzt, warum 2 verschiedene? Mit folgendem könnte man doch z.B. viel einfacher weiter arbeiten
    PHP-Code:
    if(true){
        
    $result true;
    } else {
        
    $result false;

    PHP-Code:
    if ($Unsinn == "Unsinn"){
    $nein "ungueltig";}
    else {
    $ja "gueltig";} 
    Das ist auch Unsinn. Das wirft mindestens eine notice. Der Vergleichsoperator "==" ist unnötig, du müsstest nur Abfragen ob die entsprechende Variable gesetzt ist... bzw. um obiges Beispiel fortzuführen
    PHP-Code:
    if ($result){
        
    $ja 'gueltig';
    }else{
        
    $nein 'ungueltig';


    Also, ich versteh überhaupt nicht, was du da versuchst. Und warum überträgst du die Daten per GET?

    edit:
    Ratschlag: schreib das Script nochmal neu. Irgendwo hast du da wohl einen Denkfehler eingebaut.
    Falls du es nicht neu schreiben willst, hau ein paar Dumps rein, dann siehst du was für Inhalte deine Variablen an welchen Stellen haben und kannst es mit deiner Erwartungshaltung vergleichen.
    Relax, you're doing fine.
    RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

    Kommentar


    • #3
      Variablen sind nicht dazu da, für jeden Wert eine neue davon anzulegen. Variablen, schon im Wort liegt der Sinn: sie können unterschiedliche Werte annehmen.
      Du solltest definitiv Grundlagen lernen, Ansätze sind da, allerdings auch sehr viel Kuddelmuddel.
      Mach ein paar Tutorials im Bereich Formverarbeitung und Datenbanken, ich denke du wirst den ein oder anderen "Aha" Effekt erleben.
      Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

      Kommentar


      • #4
        PHP-Code:
        require "/http/htdocs/server/connect_server.inc"
        Davon ist abzuraten weil die Datei im zweifel eines Direktaufrufs ohne besondere Server-Einstellungen NICHT durch den PHP-Interpreter geparsed wird sondern ausgegeben / zum Download angeboten wird! Am besten stehen da noch MySQL-Zugangsdaten drinnen dann heißt es "happy hacking!
        Gruß,
        SebTM

        Kommentar


        • #5
          Und gemeint ist dabei wohl die Dateiendung *.inc, die eben nicht *.php lautet.

          Bei *.php-Dateien stehen die Chancen natürlich gut, dass der Server so konfiguriert ist, dass die durch den PHP-Interpreter geschickt werden, wenn sie direkt per URL über die Adressleiste aufgerufen werden. (Das ist ja normal.) Ob das bei *.inc-Dateien auch so ist, ist dann eben eine andere Frage.

          Idealerweise sollten Dateien, auf die kein öffentlicher Direktzugriff über den Webserver bestehen muss, außerhalb des Document-Root-Verzeichnisses des Webservers platziert werden. Inkludiert werden können sie von dort problemlos, aber niemand kommt mehr über HTTP per URL ran.

          Kommentar


          • #6
            Hab mich Stunden lang damit befasst.

            Kommentar


            • #7
              Hi,

              der Datenbank connect läuft ja, (hab ich getestet mit var_dump) in der einen Spalte steht nur VERGLEICH und in der anderen Vornamen. Ich weiß es ist doof gemacht aber es geht erst mal nur um das eigentliche Script.

              Also diesen Teil hier:

              PHP-Code:
              $Richtig $_GET['Korrekt'];
              $NodeName $_GET['NodeName'];

              if (
              $AllValidNodes[$NodeName] == 'WINOSREP') {
                   
              $Richtig "OK";
              }
              else {
                   
              $Richtig "Falsch";
              }

              echo 
              '<form action="'.$_SERVER['PHP_SELF'].'" method="get">';

              echo 
              '<input type="submit" value="Go " >';

              echo 
              '<input type="hidden" name="Korrekt" value="'.$Richtig.'" >';

              echo 
              '<input type="text" maxlength="20" name="NodeName" class="input" style="width:120px;" size="40" value="'.$NodeName.'" />';

              echo 
              '</form>'
              Mein Freund hat sich das auch angeschaut, aber blickt nicht drüber.

              Das Ding ist: es funktioniert, aber immer nur beim zweiten Aufruf.

              EDIT:

              Habe etwas entdeckt: Wenn ich zuerst etwas richtiges eingebe gibt er "Falsch" aus. Beim zweiten klick auf Submit sagt er "OK". Beim dritten Klick wieder "OK" und alle weiteren klicks auch.

              Wenn ich was falsches eingebe gibt es seltsamerweise "OK" aus. Beim zweiten Klick erst "Falsch".

              Fakt ist: Es wird zuerst "Falsch" gesetz. Unabhängig davon ob das erste was ich eingebe richtig oder falsch ist.

              Woran liegt das?!

              PS: Hab mal alles etwas verständlicher umgeschrieben.

              Kommentar


              • #8
                In deinem Codeausschnitt gibt er garnichts aus.
                Zitat von nikosch
                Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

                Kommentar


                • #9
                  Zitat von tkausl Beitrag anzeigen
                  In deinem Codeausschnitt gibt er garnichts aus.
                  Doch. in der URL via GET.

                  ---> /test.html?Korrekt=Falsch&NodeName=test

                  "Korrekt" ist ja das "type=hidden". Und in der $Korrekt Variable steht entweder "OK" oder "Falsch" drinne.

                  In "NodeName" erscheint das was man eintippt von der Textbox.

                  Kommentar


                  • #10
                    Vieleicht liegt es daran, dass du erst nach dem Request das neue Formular aufbaust und das "Korrekt" ins hidden-Feld schreibst. Erst beim 2. Absenden wird das Ergebnis im Hidden-Feld dann mitgeschickt.

                    Ist aber auch eine Seltsame art zu programmieren, indem man Ausgaben in der URL erwartet und nicht auf der Seite.
                    Zitat von nikosch
                    Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

                    Kommentar


                    • #11
                      Zitat von tkausl Beitrag anzeigen
                      Vieleicht liegt es daran, dass du erst nach dem Request das neue Formular aufbaust und das "Korrekt" ins hidden-Feld schreibst. Erst beim 2. Absenden wird das Ergebnis im Hidden-Feld dann mitgeschickt.

                      Ist aber auch eine Seltsame art zu programmieren, indem man Ausgaben in der URL erwartet und nicht auf der Seite.
                      Hat sich nichts verändert:

                      PHP-Code:
                      $Richtig $_GET['Korrekt'];
                      $NodeName $_GET['NodeName'];

                      if (
                      $AllValidNodes[$NodeName] == 'WINOSREP') {
                           
                      $Richtig "OK";
                      }
                      else {
                           
                      $Richtig "Falsch";
                      }

                      echo 
                      '<form action="'.$_SERVER['PHP_SELF'].'" method="get">';

                      echo 
                      '<input type="hidden" name="Korrekt" value="'.$Richtig.'" >';

                      echo 
                      '<input type="text" maxlength="20" name="NodeName" class="input" style="width:120px;" size="40" value="'.$NodeName.'" />';

                      echo 
                      '<input type="submit" value="Go " >';

                      echo 
                      '</form>'
                      Wieso wird es beim 2.ten mal mitgeschickt? Das ist ja gerade dass was ich nicht verstehe.

                      Kommentar


                      • #12
                        Hab mal das "hidden" in "text" umgeändert.

                        PHP-Code:
                        echo '<form action="'.$_SERVER['PHP_SELF'].'" method="get">';

                        echo 
                        '<input type="text" name="Korrekt" value="'.$Richtig.'" >';

                        echo 
                        '<input type="text" maxlength="20" name="NodeName" class="input" style="width:120px;" size="40" value="'.$NodeName.'" />';

                        echo 
                        '<input type="submit" value="Go " >';

                        echo 
                        '</form>'
                        Folgendes passiert:

                        Links hab ich eine Textbox da steht: "Falsch" drinne
                        Rechts kann ich was eingeben. Gebe ich etwas richtiges ein steht da schon beim ERSTEN Aufruf links in der Textbox "OK" drinne.

                        ABER in der URL steht weiterhin "Falsch" drinne, erst beim zweiten klick auf submit steht da "OK" drin.

                        Seltsam was?

                        Kommentar


                        • #13
                          Zitat von 199708897 Beitrag anzeigen
                          Links hab ich eine Textbox da steht: "Falsch" drinne
                          Rechts kann ich was eingeben. Gebe ich etwas richtiges ein steht da schon beim ERSTEN Aufruf links in der Textbox "OK" drinne.
                          Wie erwartet.

                          Zitat von 199708897 Beitrag anzeigen
                          ABER in der URL steht weiterhin "Falsch" drinne, erst beim zweiten klick auf submit steht da "OK" drin.

                          Seltsam was?
                          Nicht seltsam. Du 'errechnest' doch erst das Ergebnis nach dem ersten Request und setzt es dann in die Textbox, sodass es beim zweiten mitgesendet wird. Wäre ja lustig, wenn du Ergebnisse schon in der URL sehen würdest, bevor der Request überhaupt durch ist.

                          Wenn dich das Verwirrt: Lass es. Ignoriere die URL. Die ist unwichtig. Programmiere so, dass du dein erwartetes Ergebnis auf der Seite ausgibst und lass dich nicht von der URL verwirren.
                          Zitat von nikosch
                          Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

                          Kommentar


                          • #14
                            Danke dir

                            Hast es mir jetzt viel verständlicher gemacht!!

                            Gut dann werde ich es mal auf eine andere Weise probieren!

                            Kommentar


                            • #15
                              Zitat von tkausl Beitrag anzeigen
                              Wie erwartet.



                              Nicht seltsam. Du 'errechnest' doch erst das Ergebnis nach dem ersten Request und setzt es dann in die Textbox, sodass es beim zweiten mitgesendet wird. Wäre ja lustig, wenn du Ergebnisse schon in der URL sehen würdest, bevor der Request überhaupt durch ist.

                              Wenn dich das Verwirrt: Lass es. Ignoriere die URL. Die ist unwichtig. Programmiere so, dass du dein erwartetes Ergebnis auf der Seite ausgibst und lass dich nicht von der URL verwirren.
                              Ja Danke,

                              Ich kann das Ergebnis direkt auf der Seite ausgeben, mit einem echo auf die Variable.

                              ABER:

                              Da ich ja ein Modul baue, will ich diese Variable auf eine andere Datei übergeben. Und mit POST, GET und SESSIONS passiert natürlich wie erwartet dasselbe.

                              Wie kriege ich das gelöst?

                              Kommentar

                              Lädt...
                              X