Ankündigung

Einklappen
Keine Ankündigung bisher.

Probleme mit dem isset-Befehl.

Einklappen

Neue Werbung 2019

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

  • Probleme mit dem isset-Befehl.

    Hallo liebes Forum,
    ich bin PHP-Anfänger und komme zur Zeit mit einer Sache nicht weiter. Ich würde gerne ein Radio-Butten auswerten und auf entweder die Seite oder eine Fehlermeldung verweisen. Die Auswertung erfolgt jetzt über den isset-Befehl in der " = achtion"-Zeile der Form. Die Weiterführung an sich Funktioniert ( wenn ich 1 == 1 als bedingung einsetzte, wird die Seite geladen), jedoch springt das Programm bei der Abfrage "if (isset($_GET['Plattenwahl'] ==TRUE)){" nicht in die if-schleife, auch wenn etwas ausgewählt ist...... wo ist mein Fehler??

    Würde mich über eure mithilfe sehr freuen, der komplette Code im Anhang.


    viele Grüße
    Code:
    <?php require_once "config.php"; ?>
    <?php require_once "functions.php"; ?>
    
    
    
    
    
    
    <!doctype html>
    <html>
    
    <head>
        <title> <?php echo $website_title ?> </title>
        <meta charset = "UTF-8"/>
    
    </head>
    
    <body>
    
        <img src="tbz_logo.gif" alt=" Wilkommen am TBZ ">
        <H4> Dies ist die Labormittelverwaltung des TBZ. Bitte gebt euren Namen an und ordnet euch einer Pneumatikplatte zu (zwei Leute pro Platte). </H4>
        <br/>
    
    
    
    
    
        <form action =     <?php
    
        if(isset($_GET['Plattenwahl']) == TRUE ) {
                                echo("seite1.php");
                                }    
        else{
        echo("fehler1.php");}
        ?>     method = "get">
        <label for="S1"> <b> Schüler 1: </b> <input id="S1" name="S1"> </label>
        <p></p>
        <label for="S2"> <b> Schüler 2: </b> <input id="S2" name="S2"> </label>
        </br>
        </br>
    
    
        <input type="radio" id="1" name="Plattenwahl" value="1"> <label for="1"> <b> Platte 1
        </br>
        </br>    
        <input type="radio" id="2" name="Plattenwahl" value="2"> <label for="2">Platte 2
        </br>
        </br>
        <input type="radio" id="3" name="Plattenwahl" value="3"> <label for="3"> Platte 3
        </br>
        </br>
        <input type="radio" id="4" name="Plattenwahl" value="4"> <label for="4"> Platte 4
        </br>
        </br>
        <input type="radio" id="5" name="Plattenwahl" value="5"> <label for="5"> Platte 5
        </br>
        </br>
        <input type="radio" id="6" name="Plattenwahl" value="6"> <label for="6"> Platte 6
        </br>
        </br>
        <input type="radio" id="7" name="Plattenwahl" value="7"> <label for="7"> Platte 7
        </br>
        </br>
        <input type="radio" id="8" name="Plattenwahl" value="8"> <label for="8"> Platte 8
        </br>
        </br>
        <input type="radio" id="9" name="Plattenwahl" value="9"> <label for="9"> Platte 9 </b>
        </br>
        </br>
        <input type="submit" name = "absenden" value="Senden">
    
        </form>
    
    
    </body>
    </html>

  • #2
    Das Problem ist, beim ersten Aufruf der Seite lädt PHP in das Formular bei Action schon die Fehlerseite rein, da ja $_GET noch nicht gesetzt ist. Drückt man nun auf absenden wird die Fehlerseite geladen egal ob etwas ausgewählt ist oder nicht.

    Was mir jetzt spontan einfallen würde wäre die Weiterleitung auf eine Seite wo dann geprüft wird welche Bedingungen erfüllt sind. Aber ich glaube das ist hier nicht Zielführend.

    Kommentar


    • #3
      Mir ist da gerade noch eine Idee gekommen. Wieso setzt du die Radio Button nicht auf required? So bräuchtest du garnicht erst eine Fehler-Seite da das Formular erst abgeschickt werden kann wenn eine Auswahl stattfand. Damit würdest du dir auch das ganze PHP da drin sparen, da nur die Seite1 dort reingeschrieben werden muss.

      Kommentar


      • #4
        Du hast einen Submitbutton:
        HTML-Code:
              <input type="submit" name = "absenden" value="Senden">
        Wenn du prüfst ob das Feld "absenden" gesetzt ist, weißt du ob das Formular abgeschickt wurde. Dann kannst du entsprechend weiterleiten und hast auch keine Probleme mit dem ersten Aufruf.

        Mir ist da gerade noch eine Idee gekommen. Wieso setzt du die Radio Button nicht auf required? So bräuchtest du garnicht erst eine Fehler-Seite da das Formular erst abgeschickt werden kann wenn eine Auswahl stattfand. Damit würdest du dir auch das ganze PHP da drin sparen, da nur die Seite1 dort reingeschrieben werden muss.
        Äußerst schlechte Idee. Das required in HTML erspart keine serverseitige Prüfung. Alles was du zum Client schickst kann geändert werden. In dem Fall z.B. einfach Quellcode im Browser öffnen "required" löschen und voila das Formular lässt sich absenden.

        Anbei noch:fürs "Styling" der Seite ist CSS das Mittel der Wahl, dazu gehören auch Abstände. Das mit <br>'s zu lösen ist keine besonders saubere Lösung.

        Kommentar


        • #5
          Hallo Dante, Hallo Ludwig,
          danke für die Erklärung, jetzt habe ich zumindestens schonmal verstande wo der Fehler liegt. So ganz löst das aber mein Problem immer noch nicht. Ich habe jetzt mehrere Versuche gestartet die von LudwigBr empfohlende Abfrage des "Submit-Burrons" mit in meine Abfrage "einzubacken".

          Möglichkeit 1: Ich packe die Bedingung mit in die "Action-Zeile" der Form hinein:

          Code:
          <form action =     <?php
          
                  if(isset($_GET['Plattenwahl']) == TRUE && isset($_GET['absenden']) == "senden"  ) {
                                      echo("seite1.php");
                          }    
                  else if(isset($_GET['Plattenwahl']) == FALSE && isset($_GET['absenden']) == "senden"  ){
                                      echo("fehler1.php");
                          }
          
              ?>     method = "get">
          Problem: Wie ich ja jetzt gelernt habe sind die Werte (also auch "senden") nicht existent wenn die Seite geladen wird. Folglich sind die Bedingungen (beim ersten Laden) nie erfüllt und ich bekomme eine Fehlermeldung.


          Möglichkeit 2: Ich packe die Abfrage hinter die Form.


          Code:
          <form action = "index.php"         method = "get">
              <label for="S1"> <b> Schüler 1: </b> <input id="S1" name="S1"> </label>
              <p></p>
              <label for="S2"> <b> Schüler 2: </b> <input id="S2" name="S2"> </label>
              </br>
              </br>
          
          
              <input type="radio" id="1" name="Plattenwahl" value="1"> <label for="1"> <b> Platte 1
              </br>
              </br>    
              <input type="radio" id="2" name="Plattenwahl" value="2"> <label for="2">Platte 2
              </br>
              </br>
              <input type="radio" id="3" name="Plattenwahl" value="3"> <label for="3"> Platte 3
              </br>
              </br>
              <input type="radio" id="4" name="Plattenwahl" value="4"> <label for="4"> Platte 4
              </br>
              </br>
              <input type="radio" id="5" name="Plattenwahl" value="5"> <label for="5"> Platte 5
              </br>
              </br>
              <input type="radio" id="6" name="Plattenwahl" value="6"> <label for="6"> Platte 6
              </br>
              </br>
              <input type="radio" id="7" name="Plattenwahl" value="7"> <label for="7"> Platte 7
              </br>
              </br>
              <input type="radio" id="8" name="Plattenwahl" value="8"> <label for="8"> Platte 8
              </br>
              </br>
              <input type="radio" id="9" name="Plattenwahl" value="9"> <label for="9"> Platte 9 </b>
              </br>
              </br>
              <input type="submit" name = "absenden" value="Senden">
          
              </form>
          <?php
          
                  if(isset($_GET['Plattenwahl']) == TRUE && isset($_GET['absenden']) == "senden"  ) {
                                      $seite1="seite1.php";
                                      fopen($seite1, "r");
                          }    
                  if(isset($_GET['Plattenwahl']) == FALSE && isset($_GET['absenden']) == "senden"  ){
                                      $file2="fehler1.php";
                                      fopen($file2, "r");
                          }
          
              ?>
          Problem: Sobald der Submit-Button gedrückt wird, wird die indexseite neu geladen, aber keine andere Seite.

          Eventuell gehe ich das auch falsch an. Eigentlich will ich nur, dass sich die -in meinen Fall- Schüler einer Platte zuordnen. Es soll zumeinen geprüft werden, ob die Schüler sich überhaupt einer Platte zugeortnet haben und zum anderren soll die entsprechende Siete der Platte geladen weden. Sollten Sie sich nicht zugeortnet haben, so soll die selbe eingabemaskt mit einen Fehlerhinweis erscheinen.

          Kann (und sollte) man das so realisieren wie ich das gemacht habe oder gibt es da andere und bessere Wege?

          P.S. Um das Styling werde ich mich noch kümmern wenn die Seite an sich läuft (aber auch danke für den Hinweis )

          Kommentar


          • #6
            Hallo Zacken,

            mal abgesehen davon, dass man das auch mit einer einzigen PHP-Seite realisieren kann, ist fopen sicher nicht das Mittel der Wahl.
            Die Weiterleitung würdest du eher mit header machen oder das jeweilige Script mit include einbinden.

            Das isset kannst du dir an der Stelle auch sparen, du prüfst ja schon konkret auf Werte.

            Gruß

            Kommentar


            • #7
              Vllt. hilft dir dies hier: https://php-de.github.io/jumpto/affenformular/

              Grüße.

              Kommentar


              • #8
                So einfach kann's sein:

                PHP-Code:
                <?php
                $messages 
                = [];
                if (isset(
                $_GET['absenden']) ){
                    if (!isset(
                $_GET['Plattenwahl']) ) {
                      
                $messages[] = 'Keine Platte ausgewählt';
                    }

                    if (empty(
                $_GET['S1']) ) {
                      
                $messages[] = 'Schüler 1 fehlt';
                    }

                    if (empty(
                $_GET['S2']) ) {
                      
                $messages[] = 'Schüler 2 fehlt';
                    }

                    if (
                count($messages) == 0) {
                      echo 
                'Vielen Dank - Alles okay!';
                      exit;
                    } 
                }
                ?>

                <html>
                <head>

                <style type="text/css">
                label, input {
                  float: left;
                  margin: 0 0 20px 5px;
                  font-weight: bold;
                }
                input:not([type='text']) {
                  clear: left;
                }
                .messages {
                  color: red;
                  font-weight: bold;
                  margin-bottom: 20px;
                }
                </style>
                </head>

                <body>

                <div class="messages">
                  <?=implode('<br>'$messages)?>
                </div>

                <form action = "test2.php" method = "get">
                    <label for="S1">Schüler 1:</label><input type="text" id="S1" name="S1" value="<?= isset($_GET['S1']) ? $_GET['S1'] : ''?>" /> 
                    <label for="S1">Schüler 2:</label><input type="text" id="S2" name="S2" value="<?= isset($_GET['S2']) ? $_GET['S2'] : ''?>"/> 

                    <?php FOR($i 1$i<10$i++):?>
                    <input type="radio" id="<?=$i?>" name="Plattenwahl" value="<?=$i?>" /> <label for="<?=$i?>"> Platte <?=$i?></label>
                    <?php ENDFOR;?>

                    <input type="submit" name = "absenden" value="Senden" />
                </form>
                </body>
                </html>

                Kommentar


                • #9
                  Zitat von Meister1900 Beitrag anzeigen
                  PHP-Code:
                      if (!isset($_GET['Plattenwahl']) ) {
                        
                  $messages[] = 'Keine Platte ausgewählt';
                      }

                      if (empty(
                  $_GET['S1']) ) {
                        
                  $messages[] = 'Schüler 1 fehlt';
                      } 
                  Warum wird das eine nur auf Existenz überprüft und die anderen beiden, ob diese auch nicht leer sind? Und weiter unten wird dann für beide nur die Existenz mit isset() überprüft?

                  Kommentar


                  • #10
                    Zitat von JaMa Beitrag anzeigen

                    Warum wird das eine nur auf Existenz überprüft und die anderen beiden, ob diese auch nicht leer sind? Und weiter unten wird dann für beide nur die Existenz mit isset() überprüft?
                    Weil die Radiobuttons (Plattenwahl) nur submitted werden, wenn man einen ausgewählt hat. Daher reicht hier die Prüfung mit isset. Die Textfelder werden hingegen immer submitted, daher die Prüfung mit empty.

                    Weiter unten die Prüfung ist nur dafür da, ob das Form abgeschickt wurde. (Könnte man aber auch mit empty machen oder so wie ganz oben das erste IF, viele Wege führen nach Rom )

                    Kommentar


                    • #11
                      Zitat von Meister1900 Beitrag anzeigen

                      Weil die Radiobuttons (Plattenwahl) nur submitted werden, wenn man einen ausgewählt hat. Daher reicht hier die Prüfung mit isset. Die Textfelder werden hingegen immer submitted, daher die Prüfung mit empty.

                      Weiter unten die Prüfung ist nur dafür da, ob das Form abgeschickt wurde. (Könnte man aber auch mit empty machen oder so wie ganz oben das erste IF, viele Wege führen nach Rom )
                      Und wenn ich den Request entsprechend änder, sodass ein leerer Wert dafür kommt?
                      Ja ich weiß Erbsenzählerei, aber das ist doch immer unschön zu sehen, wie empty und isset wild gemischt werden.

                      Kommentar


                      • #12
                        Vielen Dank euch allen,
                        mit den Tip die Header-Funktion zubenutzen und mit dem Artikel zum "Affenformular" habe ich es dann gestern hinbekommen....... es sieht allerdings etwas anders aus als bei dir (Meiter1900), aber das mit Rom und seiner hervorragenden Anbindung wurde ja schon erwähnt .


                        so sieht es bei mir jetzt aus:
                        Code:
                        <?php require_once "config.php"; ?>
                        <?php require_once "functions.php"; ?>
                        
                        <?php
                                $keineplatte = null;
                                $keinsus     = null;
                            if(($_GET['S1'] != "" || $_GET['S2'] != "") && $_GET['Plattenwahl'] != "" && $_GET['absenden'] != "" ){
                                switch($_GET['Plattenwahl']){
                                    case 1:
                                        header('Location: platte1.php');
                                        break;
                                    case 2:
                                        header('Location: platte2.php');
                                        break;
                                    case 3:
                                        header('Location: platte3.php');
                                        break;
                                    case 4:
                                        header('Location: platte4.php');
                                        break;
                                    case 5:
                                        header('Location: platte5.php');
                                        break;
                                    case 6:
                                        header('Location: platte6.php');
                                        break;
                                    case 7:
                                        header('Location: platte7.php');
                                        break;
                                    case 8:
                                        header('Location: platte8.php');
                                        break;
                                    case 9:
                                        header('Location: platte9.php');
                                        break;
                                }
                        
                        
                            }
                            elseif($_GET['absenden'] != "" && $_GET['Plattenwahl'] == "" ){
                                $keineplatte = "FEHLER: Ihr habt keine Pneumatikplatte ausgewählt!";
                            }
                            elseif($_GET['absenden'] != "" && $_GET['S1'] == "" && $_GET['S2'] == ""){
                                $keinsus = "FEHLER: Ihr müsst eure Namen eintragen!";
                            }
                            $Schlueler1 = $_GET['S1'];
                        
                        ?>
                        <!doctype html>
                        <html>
                        
                        <head>
                            <title> <?php echo $website_title ?> </title>
                            <meta charset = "UTF-8"/>
                        
                        </head>
                        
                        
                        
                        <body>
                            <span style="color:#FF0000"> <H3> <?php echo($keineplatte);echo($keinsus); ?>  </H3> </span>
                            <img src="tbz_logo.gif" alt=" Wilkommen am TBZ ">
                            <H4> Dies ist die Labormittelverwaltung des TBZ. Bitte gebt euren Namen an und ordnet euch einer Pneumatikplatte zu (zwei Leute pro Platte). </H4>
                            <br/>
                        
                        
                        
                        
                        
                        
                        
                            <form action = "index.php"         method = "get">
                            <input id="S1" name="S1" placeholder = "Schüler 1" >
                            <P></P>
                            <input id="S2" name="S2" placeholder="Schüler 2" >
                        
                            <P></P>
                        
                            <input type="radio" id="1" name="Plattenwahl" value="1"> <label for="1"> <b> Platte 1
                            </br>
                            </br>    
                            <input type="radio" id="2" name="Plattenwahl" value="2"> <label for="2">Platte 2
                            </br>
                            </br>
                            <input type="radio" id="3" name="Plattenwahl" value="3"> <label for="3"> Platte 3
                            </br>
                            </br>
                            <input type="radio" id="4" name="Plattenwahl" value="4"> <label for="4"> Platte 4
                            </br>
                            </br>
                            <input type="radio" id="5" name="Plattenwahl" value="5"> <label for="5"> Platte 5
                            </br>
                            </br>
                            <input type="radio" id="6" name="Plattenwahl" value="6"> <label for="6"> Platte 6
                            </br>
                            </br>
                            <input type="radio" id="7" name="Plattenwahl" value="7"> <label for="7"> Platte 7
                            </br>
                            </br>
                            <input type="radio" id="8" name="Plattenwahl" value="8"> <label for="8"> Platte 8
                            </br>
                            </br>
                            <input type="radio" id="9" name="Plattenwahl" value="9"> <label for="9"> Platte 9 </b>
                            </br>
                            </br>
                            <input type="submit" name = "absenden" value="Senden">
                        
                            </form>
                        
                        </body>
                        </html>

                        Kommentar


                        • #13
                          Copy-Paste-Programmierer. Du solltest dich dringend mal mit den Schleifen-Grundlagen beschäftigen.

                          Kommentar


                          • #14
                            Copy-Paste-Programmierer. Du solltest dich dringend mal mit den Schleifen-Grundlagen beschäftigen.
                            So laufen Lernprozesse nun einmal in der Regel ab. Man versucht das gesehende/erlebte zu adaptiern und wiederzugeben. Ich kann jetzt nicht wirklich was mit deiner Aussagen anfangen. Was hast du denn an meiner Schleifenstruktur auszusetzten?

                            Kommentar


                            • #15
                              Zitat von Zacken386 Beitrag anzeigen

                              So laufen Lernprozesse nun einmal in der Regel ab. Man versucht das gesehende/erlebte zu adaptiern und wiederzugeben. Ich kann jetzt nicht wirklich was mit deiner Aussagen anfangen. Was hast du denn an meiner Schleifenstruktur auszusetzten?
                              Dass du keine verwendest

                              Kommentar

                              Lädt...
                              X