einfache Auswahlliste $_POST wird nicht gespeichert

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

  • einfache Auswahlliste $_POST wird nicht gespeichert

    Moin moin! Ich bin neu in diesem Forum, genauso wie ich neu in PHP bin!
    Also erstmal Hallo und ich freue mich Teil der Community zu werden und euch mit diversen Anfängerfragen auf den Keks zu gehen

    Also folgendes:

    Ich möchte - wie ja schließlich üblich - dass nach dem Absenden des Formulars der zuvor gewählte Wert via selected="selected" vorausgewählt wird, falls das Formular nicht gesendet werden konnte. Eigentlich ja ganz simpel, dachte ich... Aber es funktioniert einfach nicht!


    Hier der Code von der Listengenerierung:
    (die Variable $land ist entweder ein leerer String, oder $_POST['land'])

    Code:
      <select name="land"> 
      <option value="">--Bitte waehlen!--</option>
      <?php
          $dateiname = "laender.txt";
          $datei = @fopen($dateiname, "r");
          if($datei) {
          
                $laender_arr = array();
    
              while(!feof($datei)) {
              $zeile = fgets($datei);    
              echo '<option value="' . $zeile . '" ';
              if ($zeile == $land) echo "selected='selected' ";
              echo '>' . $zeile . "</option>";
    
              }
              
          }else{
          echo "Datei konnte nicht geoeffnet werden!";
          }
          fclose($datei);
      ?>
      </select>
    Also, ich wähle also mein Land aus, Deutschland also und schicke das Formular ab. Im Array steht dann auch:

    Array ( [anrede] => Herr [name] => ghj [email] => ghgj [tel] => ghjg [land] => Deutschland [geburtstag] => [geburtsmonat] => [geburtsjahr] => 1994 [nachricht] => )


    Also ich raff einfach nicht, warum das nicht funktioniert. Im Internet finde ich auch keine Lösungen, die völlig anders sind.

    Wo ist mein Denkfehler?

    Gruß,
    mjh

  • #2
    Wo wird $land definiert?

    Mal testausgaben gemacht?

    BTW: Was macht $laender_arr = array(); da?

    Kommentar


    • #3
      register_globals

      Peter

      EDIT:
      im if(isset($_POST[])-block der Wert $_POST['land']
      dann vergiß meinen Post.

      Zuletzt geändert von Kropff; 07.05.2012, 10:57.
      Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
      Meine Seite

      Kommentar


      • #4
        Hallo TobiaZ,
        danke für die schnelle Antwort.

        $land wird ganz oben als leere Variable deklariert und dann später (allerdings noch vor der select-generierung) im if(isset($_POST[])-block der Wert $_POST['land'] zugewiesen.

        das Array ist übriggeblieben von nem Versuch mit while und for was zu machen

        Kommentar


        • #5
          Dann poste doch mal den entsprechenden code

          a) auf das wesentliche reduziert,
          b) so dass er den fehler enthält.

          Kommentar


          • #6
            Naja ich poste einfach mal den ganzen Code, is ja eh nur nen lern-Projekt und so umfassend is es ja auch noch nicht:

            Code:
            <?php
            $land = '';
            $aktuelles_jahr = intval(date("Y"));
            
              function txtToList($dateiname) {
              
                    $datei = @fopen($dateiname, "r");
                  if($datei) {
            
                      while(!feof($datei)) {
                      $zeile = fgets($datei);
                      echo "<option value='{$zeile}'>{$zeile}</option>"; 
                      }
                      
                  }else{
                  echo "Datei konnte nicht geoeffnet werden!";
                  }
                  fclose($datei);
              }
            
            
            print_r($_POST);
            echo "<br/>";
            
            ?>
            
            <html>
              <head>
                <title>JavaScript</title>
                <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
                
                <style type="text/css">
                
                html, body {font-family: "Arial"}
                form label, form span {display:inline-block;font-size:13px;padding:4px 4px 4px 0px;}
                form label {width: 150px;}
                form span {width: auto;}
                form input, form label {margin: 5px;}
                form input, form textarea {padding:3px;}
                form input, form textarea {border:1px solid #ccc;}
                form input:hover, form input:focus, form textarea:hover, form textarea:focus {border:1px solid #444}
                
                form {background: #eeeeee;border:1px solid #ccc;padding:20px;width:400px;margin: 0 auto;}
                
                </style>
                
                <script type="text/javascript">
                
                    function checkdate (m, d, y) {
                    return m > 0 && m < 13 && y > 0 && y < 32768 && d > 0 && d <= (new Date(y, m, 0)).getDate();
                    }
                    function trim(stringToTrim) {
                    return stringToTrim.replace(/^\s+|\s+$/g,"");
                    }
                
                    function formChecker(f) {
                    
                        var meldungen = '';
                        
                            if(trim(f.elements["name"].value) == '') {
                            meldungen += "Bitte geben Sie Ihren Namen an!\n";
                            }
                            if(trim(f.elements["email"].value) == '') {
                            meldungen += "Bitte geben Sie Ihre e-Mail Adresse an!\n";
                            }
                            if(trim(f.elements["tel"].value) == '') {
                            meldungen += "Bitte geben Sie Ihre Telefonnummer an!\n";
                            }
                            
                            if(f.elements['geburtstag'].value == '' || f.elements['geburtsmonat'].value == '') {
                            meldungen += "Bitte geben Sie ihr vollstaendiges Geburtsdatum an\n";
                            
                            
                            if(checkdate(f.elements['geburtsmonat'].value, f.elements['geburtstag'].value, f.elements['geburtsjahr'].value)) {
                            meldungen += "Das angegebene Geburtsdatum ist ungueltig!\n";        
                            }
                            
                            
                            
                            }
                            
                        if(meldungen == '') {
                            return true;
                        }else{
                            alert(meldungen);
                            return false;
                        }
                        
                    }
            
                </script>
              
              </head>
              
              
              
              
              
              
              
              <body>
              
              <?php
                  $meldungen = "";
            
            if(isset($_POST['name'])) {
                
                // POST-Inhalte
                $anrede = $_POST["anrede"];
                $name = $_POST['name'];
                $email = $_POST['email'];
                $telefon = $_POST['tel'];
                $land = $_POST['land'];
                
                
                // Prüfungen PHP
            
                    // geburtstagscheck
                    if(($_POST['geburtsmonat'] != '') || ($_POST['geburtstag'] != '')) {
                    
                        $geburtstag = intval($_POST['geburtstag']);
                        $geburtsjahr = intval($_POST['geburtsjahr']);
                        $geburtsmonat = intval($_POST['geburtsmonat']);
                        $geburtstag_timestamp = mktime(0, 0, 0, $geburtsmonat, $geburtstag, $geburtstag);
                        $geburtstagsdatum = date("d.m.Y", $geburtstag_timestamp);
                    
                    
                        // prüfen, ob das Datum korrekt ist (wg Schlatjahr, Monatslänge und co)
                        if(!checkdate($geburtsmonat, $geburtstag, $geburtsjahr)) {
                        $meldungen .= "Das angegebene Datum ist ungueltig!<br/>";
                        }
                    
                    }else{
                        $meldungen .= "Bitte geben Sie ein vollstaendiges Geburtsdatum an!<br/>";
                    }
                    
                    // andere
                    
                    if(trim($name) == '') {
                    $meldungen .= "Bitte geben Sie Ihren Namen an!<br/>";
                    }
                    if(trim($email) == '') {
                    $meldungen .= "Bitte geben Sie Ihre e-mail Adresse an!<br/>";
                    }
                    if(trim($telefon) == '') {
                    $meldungen .= "Bitte geben Sie Ihre Telefonnummer an<br/>";
                    }
                    if($land == '') {
                    $meldungen .= "Bitte geben Sie ein Land an!<br/>";
                    }        
                    if(!isset($_POST['agb'])) {
                    $meldungen .= "Bitte akzeptieren Sie die AGB!<br/>";        
                    }
                    if(!isset($_POST['interessen'])) {
                    $meldungen .= "Bitte geben Sie Interessen an!<br/>";        
                    }
                
                if($meldungen != '') {
                    echo $meldungen;
                }else{
                
                    // senden
                
                    $mail_komplett = "
                    Name: {$anrede} {$name} \n
                    e-Mail: {$email} \n
                    Telefon: {$telefon} \n
                    Land: {$land}  \n
                    Geburtstag: {$geburtstagsdatum} \n
                    ";
                    
                    $senden = mail("mein@emjail.de", "Kontakformular", $mail_komplett, "From: " . $email);
                    
                    if($senden) {
                    
                    echo "Mail wurde erfolgreich gesendet!";
                    
                    }else{
                    
                    echo "Fehler beim versenden der e-Mail!";
                    }
                    
                    // in Datenbank speichern?
                
                }
            }
              ?>
              
              
              
              <form method="post" onsubmit="return formChecker(this)">
              
              <label>Anrede</label>
              <input type="radio" name="anrede" value="Herr" <?php if(!isset($_POST["anrede"]) || (isset($_POST['anrede']) && $_POST['anrede'] == "Herr")) echo "checked='checked'" ?> /><span>Herr</span> <input type="radio" name="anrede" value="Frau" <?php if(isset($_POST['anrede']) && $_POST['anrede'] == "Frau") echo "checked='checked'" ?> /><span>Frau</span><br/> 
              
              <label>Name</label><input type="text" name="name" maxlenght="40" value="<?php if($meldungen != '') echo $_POST['name'] ?>" /><br/>
              <label>e-Mail</label><input type="text" name="email" value="<?php if($meldungen != '') echo $_POST['email'] ?>" /><br/>
              <label>Telefon</label><input type="text" name="tel" maxlenght="40" value="<?php if($meldungen != '') echo $_POST['tel'] ?>" /><br/>
              
              <label>Land</label>
              <select name="land"> 
              <option value="">--Bitte waehlen!--</option>
              <?php
                  $dateiname = "laender.txt";
                  $datei = @fopen($dateiname, "r");
                  if($datei) {
                  
                        $laender_arr = array();
            
                      while(!feof($datei)) {
                      $zeile = fgets($datei);    
                      echo '<option value="' . $zeile . '" ';
                      if ($zeile == $land) echo "selected='selected' ";
                      echo '>' . $zeile . "</option>";
            
                      }
                      
                  }else{
                  echo "Datei konnte nicht geoeffnet werden!";
                  }
                  fclose($datei);
              ?>
              </select><br/>
              
              <label>Geburtstag</label>
              
              <select name="geburtstag">
              <option value="" selected='selected'>Tag</option>
               <?php
              for($t = 1;$t < 32;$t++) {
                  echo "<option value='{$t}'>{$t}</option>";
              }
              ?> 
              </select>
              <select name="geburtsmonat">
              <option value="" selected='selected'>Monat</option>
               <?php
              for($t = 1;$t < 13;$t++) {
                  echo "<option value='{$t}'>{$t}</option>";
              }
              ?> 
              </select>
            
              
                <select name="geburtsjahr">
              <?php
              for($j = 1900;$j < $aktuelles_jahr + 1;$j++) {
            
                  if($j == ($aktuelles_jahr - 18)) {
                  echo "<option value='{$j}' selected='selected'>{$j}</option>";
                  }else{
                  echo "<option value='{$j}'>{$j}</option>";
                  }
              }
              ?>
              </select>
              <br/>
              
              <label>Interessen</label>
              <select multiple="multiple" name="interessen">
              <?php txtToList("interessen.txt") ?>
              </select>
              <br/>
              <input type="checkbox" value="newsletter" name="newsletter" /> <span>Ich moechte den Newsletter zugeschickt bekommen.</span><br/>
              <input type="checkbox" value="agb" name="agb" /> <span>Ich habe die agb gelesen und akzeptiere sie.</span><br/>
                <label>Nachricht:</label>
              <textarea rows="10" cols="20" name="nachricht"></textarea><br/>
              <input type="submit" vakue="absenden" /><br/>
              </form>
              </body>
            </html>

            Kommentar


            • #7
              Naja ich poste einfach mal den ganzen Code, is ja eh nur nen lern-Projekt und so umfassend is es ja auch noch nicht:
              NEIN! Du sollst doch Mitdenken! Niemand will hier deine Arbeit machen, wir wollen dir helfen.

              Im übrigen erledigen sich Probleme beim strukturierten Debuggen oft ganz alleine. Daher beim nächsten mal, das Problem bitte schon vor dem Posten auf das wesentliche reduzieren.

              PS: Und noch mal, mach Testausgaben, dann wirst du schon sehen, dass die Variablen nicht ganz das enthalten, was du erwartest. Auch mal auf Zeilenumbrüche und Leerzeichen achten.
              Zuletzt geändert von TobiaZ; 07.05.2012, 11:07.

              Kommentar


              • #8
                Also, ich hab das ganze nochmla auf's wesentliche reduziert, ich komm aber bisher immer noch nicht drauf, was schief läüft:

                Code:
                <?php
                $land = '';
                
                print_r($_POST);
                echo "<br/>";
                
                ?>
                
                <html>
                  <head>
                    <title>JavaScript</title>
                    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
                  
                  </head>
                
                  <body>
                  
                  <?php
                      $meldungen = "";
                
                if(isset($_POST['name'])) {
                
                    $land = $_POST['land'];
                    
                    }
                
                  ?>
                
                  <form method="post">
                
                  <label>Land</label>
                  <select name="land"> 
                  <option value="">--Bitte waehlen!--</option>
                  <?php
                      $dateiname = "laender.txt";
                      $datei = @fopen($dateiname, "r");
                      if($datei) {
                
                          while(!feof($datei)) {
                          $zeile = fgets($datei);    
                          echo '<option value="' . $zeile . '" ';
                          if ($zeile == $land) echo "selected='selected' ";
                          echo '>' . $zeile . "</option>";
                
                          }
                          
                      }else{
                      echo "Datei konnte nicht geoeffnet werden!";
                      }
                      fclose($datei);
                  ?>
                  </select><br/>
                  
                
                  <input type="submit" vakue="absenden" /><br/>
                  </form>
                  </body>
                </html>

                Kommentar


                • #9
                  Ich hatte meinen Beitrag noch mal editiert:
                  Zitat von TobiaZ Beitrag anzeigen
                  PS: Und noch mal, mach Testausgaben, dann wirst du schon sehen, dass die Variablen nicht ganz das enthalten, was du erwartest. Auch mal auf Zeilenumbrüche und Leerzeichen achten.

                  Kommentar


                  • #10
                    Ohhhh man!
                    Warum gibt denn fgets eine Zeile PLUS ein Leerzeichen dahinter zurück? Das macht doch keinen Sinn? Oder doch?
                    Also so funktioniert es jedenfalls:

                    Code:
                     <select name="land"> 
                      <option value="">--Bitte waehlen!--</option>
                      <?php
                          $dateiname = "laender.txt";
                          $datei = @fopen($dateiname, "r");
                          if($datei) {
                    
                              while(!feof($datei)) {
                              $zeile = trim(fgets($datei));
                              
                              if($zeile == $land) {
                              echo "<option value='{$zeile}' selected='selected'>{$zeile}</option>";
                              }else{
                              echo "<option value='{$zeile}'>{$zeile}</option>";
                              }
                    
                              }
                              
                          }else{
                          echo "Datei konnte nicht geoeffnet werden!";
                          }
                          fclose($datei);
                      ?>
                      </select>
                    Danke für die (pädagogisch wertvolle) Hilfe! Ich werd also nun öfters mal Ausgaben überprüfen!

                    Kommentar


                    • #11
                      Warum gibt denn fgets eine Zeile PLUS ein Leerzeichen dahinter zurück? Das macht doch keinen Sinn? Oder doch?
                      Naja, die werden schon da drin stehen...

                      Ich werd also nun öfters mal Ausgaben überprüfen!
                      Immer!!!
                      Zuletzt geändert von TobiaZ; 07.05.2012, 12:05.

                      Kommentar

                      Lädt...
                      X