Formular mit Auswahlbox -> Parameterübergabe

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

  • Formular mit Auswahlbox -> Parameterübergabe

    Hallo liebe Leute!

    Ich habe ein Problem, wozu ich bisher nichts Vernünftiges gefunden habe...

    Ich habe ein Formular mit Dropdownfeldern gebaut:
    PHP-Code:
    <?php
    echo "<form action = 'new_record.php' method = 'post'>";
    echo 
    "<select name='Farbe'>";
    echo 
    "<option value='0'>rot</option>";
    echo 
    "<option value='1'>blau</option>";
    echo 
    "</select><br><br>";

    echo 
    "<select name='Groesse'>";
    echo 
    "<option value='0'>5</option>";
    echo 
    "<option value='1'>10</option>";
    echo 
    "</select><br><br>";

    echo 
    "<input type='submit' name='gesendet'>";
    echo 
    "<input type='reset'>";
    echo 
    "</form>";
     
    ?>

    Der Wert der Farbe und der Groesse sollen als Parameter von dem Skript new_record.php übernommen werden, aber irgendwie komme ich nicht an die Werte ran. Bisher habe ich das ohne Dropdownfelder gemacht:
    PHP-Code:
    <?php
    echo "<form action = 'new_record.php' method = 'post'>";
    echo 
    "     <input name='Farbe'> Farbe<p>";
    echo 
    "    <input name='Groesse'> Groesse<p>";
    echo 
    "    <input type='submit' name='gesendet'>";
    echo 
    "    <input type='reset'>";
    echo 
    "</form>";
    ?>
    Hier konnte ich im Skript new_record.php mit
    PHP-Code:
    $Farbe$_POST['Farbe'];
    $Groesse$_POST['Groesse']; 
    auf die Übergabewerte zugreifen.

    Kann ich das mit den Dropdownfeldern ebenso irgendwie hinkriegen?

    Vielen Dank für Eure Hilfe!

    pluto

  • #2
    print_r($_POST);
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Warum sollte das nicht gehen?
      Nur würde ich da gleich die entsprechenden Werte übergeben.



      PHP-Code:
      echo "<form action = 'new_record.php' method = 'post'>".
           
      "<select name='Farbe'>".
           
      "<option value='FF0000'>rot</option>".
           
      "<option value='0000FF'>blau</option>".
           
      "</select><br><br>"

      Kommentar


      • #4
        Hallo,

        wow - danke für die blitzschnellen Antworten.

        Mit
        PHP-Code:
        print_r($_POST); 
        bekomme ich die Werte der beiden Dropdownfelder ausgegeben allerdings alle Variablen und deren Werte als eine Ausgabe:
        Code:
        Array ( [Farbe] => 0 [Groesse] => 0 [gesendet] => Senden )
        Wie greife ich gezielt auf den Wert des ersten und auf den Wert des zweiten Dropdownformulars zu?

        Danke vielmals!

        Kommentar


        • #5
          Habe es mal getestet. Wenn die Werte ungeprüft übernommen werden, sollte es auch mit Deiner Variante gelingen. Doch wenn die Werte geprüft werden, je nachdem wie die Werte überprüft werden, kann es passieren, dass die 0 als kein Wert gewertet wird. In diesem Fall müsstest Du entweder gegen !== false püfen oder aber mit 1 beginnen und nicht mit 0 oder aber halt die Hexwerte verwenden.

          Formatiert habe ich es auch noch etwas, den Unterschied siehst Du im Quelltext.

          PHP-Code:
          <?php
          echo "<form action = 'new_record.php' method = 'post'>\n".
               
          "\t<select name='Farbe'>\n".
               
          "\t<option value='1'>rot</option>\n".
               
          "\t<option value='2'>blau</option>\n".
               
          "\t</select><br>\n".
               
          "\t<br>\n".
               
          "\t<select name='Groesse'>\n".
               
          "\t<option value='1'>5</option>\n".
               
          "\t<option value='2'>10</option>\n".
               
          "\t</select><br>\n".
               
          "\t<br>\n".
               
          "\t<input type='submit' name='gesendet'>\n".
               
          "\t<input type='reset'>\n".
               
          "</form>\n";


          if (isset(
          $_POST['Farbe']) and !empty($_POST['Farbe'])) {

              
          $Farbe $_POST['Farbe'];
              echo 
          htmlspecialchars($Farbe);
          }
          else {echo 
          "Es wurde kein Wert für Farbe übergeben.";
          }

          if (isset(
          $_POST['Groesse']) and !empty($_POST['Groesse'])) {

              
          $Groesse $_POST['Groesse'];
              echo 
          htmlspecialchars($Groesse);
          }
          else {echo 
          "Es wurde kein Wert für Groess übergeben.";
          }
           
          ?>
          Und bei Verwendung noch mit Filter, sonst kann Dir da alles reingedrückt werden:

          PHP-Code:
          // oder [^a-zA-Z0-9]  bei Hex

          if (isset($_POST['Farbe']) and !empty($_POST['Farbe'])) {

              
          $Farbe $_POST['Farbe'];
              
          $Farbe preg_replace("/[^0-9]/"""$Farbe);    
              echo 
          htmlspecialchars($Farbe);
          }
          else {echo 
          "Es wurde kein Wert für Farbe übergeben.";
          }

          if (isset(
          $_POST['Groesse']) and !empty($_POST['Groesse'])) {

              
          $Groesse $_POST['Groesse'];
              
          $Groesse preg_replace("/[^0-9]/"""$Groesse);    
              echo 
          htmlspecialchars($Groesse);
          }
          else {echo 
          "Es wurde kein Wert für Groesse übergeben.";

          Zuletzt geändert von Melewo; 02.03.2013, 16:13.

          Kommentar


          • #6
            Hallo!

            spitze - klappt perfekt!

            Nochmals danke!

            Grüße
            pluto

            Kommentar


            • #7
              Hallo nochmal,

              mittlerweile bin ich dank Eurer Hilfe recht weit gekommen. Ich habe nur noch ein paar grundsätzliche Fragen wozu ich nichts Vernünftiges finde.
              Aktuell sieht meine Struktur so aus:
              Hauptskript -> include DB-Connect Skript
              Hauptskript -> per Link -> Löschskript
              Hauptskript -> per Form Action -> Neuer Datensatz Skript

              Was mir daran nicht gefällt:
              - Parameterübergabe im Link Aufruf ($_Session - habe ich nicht mit einem Link hin bekommen)
              - viele Skripte - wie kann man das DB-Connect Skript und auch das Löschskript in das Hauptskript packen? Macht man das mit Klassen oder Funktionen? Ich werde nicht schlau aus dem was ich da immer lese...

              Vielleicht hat einer eine Tipp für mich? Wäre sehr nett!
              Hier die einzelnen Skripte.

              Danke & Grüße
              pluto

              Hauptskript:

              PHP-Code:
              <?php
              //error_reporting(0);

              $joomlarootdir="http://mu-c-030/stefan";

              // DB Verbindung herstellen
              include 'fangblatt_connect_db.php';

              // Ohne Joomlaframework muss die folgende Zeile auskommentiert werden, da die Variable $joomlaid sonst nicht verfügbar ist.
              $joomlaid="861";

              // SQL Abfrage für die Ausgabe der Tabelle formulieren und absetzen
              // Datumsspalte wird in deutschem Format ausgegeben
              // UserID wird auf die aktuelle JoomlaID des angemeldeten Joomla Users eingeschränkt
              $sql_all "SELECT DATE_FORMAT(Datum,'%d.%m.%Y') as Datum, Gewaesser, Anzahl, Fischart, Bemerkung, ColumnID FROM fangblatt where UserID = $joomlaid";
              $query_all mysql_query($sql_all) or die("Anfrage sql_all nicht erfolgreich");

              // SQL Abfrage für die maximale ColumnID formulieren, absetzen.
              // Array abholen und maximale ColumnID für aktuellen User als Variable setzen
              $sql_max_columnid "SELECT max(ColumnID) as maxcolumnid FROM fangblatt where UserID = $joomlaid";
              $query_max_columnid mysql_query($sql_max_columnid) or die("Anfrage sql_max_columnid nicht erfolgreich");
              $row_max_columnid mysql_fetch_array($query_max_columnidMYSQL_ASSOC);
              $maxColumnID $row_max_columnid['maxcolumnid'];


              // Kopfzeile der Tabelle ausgeben
              echo
              "<table border='1'>\n".
              "<tr>\n".
              "<th>Datum <BR>(z.B. 15.03.2013)</th>\n".
              "<th>Gewaesser</th>\n".
              "<th>Anzahl</th>\n".
              "<th>Fischart</th>\n".
              "<th>Bemerkung</th>\n".
              "<th>L&ouml;schen?</th>\n".
              "</tr>\n";

              // Schleife für Datenebereich der Tabelle einleiten
              while ($adr mysql_fetch_array($query_all))
                  {

                  
              // Datenspalten ausgeben
                  
              echo
                  
              "<tr>\n".
                  
              "<td>".$adr['Datum']."</td>\n".
                  
              "<td>".$adr['Gewaesser']."</td>\n".
                  
              "<td>".$adr['Anzahl']."</td>\n".
                  
              "<td>".$adr['Fischart']."</td>\n".
                  
              "<td>".$adr['Bemerkung']."</td>\n";

                  
              // Löschbutton ausgeben, wenn die ColumnID mit der größten ColumnID des angemeldeten Useres übereinstimmt.
                  
              $loeschid=$adr['ColumnID'];
                  if (
              $maxColumnID == $loeschid)
                      {
                        echo 
              "<td><a href='".$joomlarootdir."/fangblatt_delete_record.php?del=".$loeschid."&joomlarootdir=".$joomlarootdir."'>L&ouml;schen</a></td>";
                      }
                      else
                      {
                      echo 
              "<td>&nbsp</td>";
                      }
                      echo 
              "</tr>";
                  }

              // Formular aufbauen
              echo
              // Formulardefinition
              "<form action = '/stefan/fangblatt_new_record.php' method = 'post'>\n".
              // Feld in Spalte 1
              "<td bgcolor='#00FFFF'> <input name='Datum'></td>\n".
              // Feld in Spalte 2
              "<td bgcolor='#00FFFF'><select name='Gewaesser'>\n".
              "<option value='Bitte ausw&auml;hlen'>Bitte ausw&auml;hlen</option>\n".
              "<option value='See'>See</option>\n".
              "<option value='Paar'>Paar</option>\n".
              "</select></td>\n".
              // Feld in Spalte 3
              "<td bgcolor='#00FFFF'><select name='Anzahl'>\n".
              "<option value='Bitte ausw&auml;hlen'>Bitte ausw&auml;hlen</option>\n".
              "<option value='1'>1</option>\n".
              "<option value='2'>2</option>\n".
              "<option value='3'>3</option>\n".
              "<option value='4'>4</option>\n".
              "</select></td>\n".
              // Feld in Spalte 4
              "<td bgcolor='#00FFFF'> <select name='Fischart'>\n".
              "<option value='Bitte ausw&auml;hlen'>Bitte ausw&auml;hlen</option>\n".
              "<option value='Aal'>Aal</option>\n".
              "<option value='Äsche'>&Auml;sche</option>\n".
              "<option value='Bachforelle'>Bachforelle</option>\n".
              "<option value='Bachsaibling'>Bachsaibling</option>\n".
              "<option value='Graskarpfen'>Graskarpfen</option>\n".
              "<option value='Hecht'>Hecht</option>\n".
              "<option value='Karpfen'>Karpfen</option>\n".
              "<option value='Regenbogen Forelle'>Regenbogen Forelle</option>\n".
              "<option value='Schleie'>Schleie</option>\n".
              "</select></td>\n".
              // Feld in Spalte 5
              "<td bgcolor='#00FFFF'>    <input name='Bemerkung'></td>\n".
              "<td>&nbsp</td>\n".
              "</tr>\n".
              "</table>\n".
              "<input name='joomlauser' type= 'hidden' value='".$joomlauser."'>\n".
              "<input name='joomlaid' type= 'hidden' value='".$joomlaid."'>\n".
              "<input name='joomlarootdir' type= 'hidden' value='".$joomlarootdir."'>\n".
              // Formular Footer
              "<input type='submit' name='gesendet'>\n".
              "<input type='reset'>\n".
              "</form>\n";

              // Variablen
              $Gewaesser $_POST['Gewaesser'];
              $Anzahl $_POST['Anzahl'];
              $Fischart $_POST['Fischart'];
              ?>
              DB-Connect Skript:
              PHP-Code:
              <?php

              $mysqlhost
              ="localhost"// MySQL-Host angeben
              $mysqluser="root"// MySQL-User angeben
              $mysqlpwd=""// Passwort angeben
              $mysqldb="stefan"// Gewuenschte Datenbank angeben

              $connection=mysql_connect($mysqlhost$mysqluser$mysqlpwd) or die ("Verbindungsversuch fehlgeschlagen");
              mysql_select_db($mysqldb$connection) or die("Konnte die Datenbank nicht waehlen.");

              //  Joomla! framework einbinden - NU
              // http://www.minitek.gr/tutorials/joomla-16-tutorials/joomla-api-tutorials/item/254-how-to-load-the-joomla-framework-inside-an-external-file.html
              // oder http://extensions.joomla.org/extensions/core-enhancements/coding-a-scripts-integration/custom-code-in-content/4470

              define'_JEXEC');
              define'_VALID_MOS');
              define'JPATH_BASE'realpath(dirname(__FILE__)));
              define'DS'DIRECTORY_SEPARATOR );
              require_once ( 
              JPATH_BASE .DS.'includes'.DS.'defines.php' );
              require_once ( 
              JPATH_BASE .DS.'includes'.DS.'framework.php' );

              $mainframe JFactory::getApplication('site');
              $mainframe->initialise();

              // Joomla User abfragen
              $joomladata JFactory::getUser();
              $joomlauser $joomladata->name;
              $joomlaid $joomladata->id;
              ?>
              Löschskript:
              PHP-Code:
              <?php

              $joomlarootdir 
              $_GET['joomlarootdir']; 

              include 
              'fangblatt_connect_db.php';

              mysql_query('DELETE FROM fangblatt WHERE ColumnID = '.(int)$_GET['del']);

              header("Location:".$joomlarootdir."/fangblatt.php"); 
              exit;
              ?>
              Neuer Datensatz Skript:
              PHP-Code:
              <?php
              // Datenbankverbindung herstellen & Joomla Framework laden
              include 'fangblatt_connect_db.php';

              $joomlarootdir $_POST['joomlarootdir'];
              $joomlauser $_POST['joomlauser'];
              $joomlaid $_POST['joomlaid'];

              // Werte aus dem Joomlaframework übernehmen
              $UserID $joomlaid;
              $Name $joomlauser;

              // Werte aus dem Formular übernehmen
              $timestamp strtotime($_POST['Datum']);
              $Datum date ('Y-m-d'$timestamp);
              $Gewaesser $_POST['Gewaesser'];
              $Anzahl $_POST['Anzahl'];
              $Fischart $_POST['Fischart'];
              $Bemerkung $_POST['Bemerkung'];
              if(
              check_date($_POST['Datum'],"dmY","."))
                    {
                    
              $sql 'INSERT INTO fangblatt 
                           (UserID, Name, Datum, Gewaesser, Anzahl, Fischart, Bemerkung) 
                            VALUES ("'
              .$UserID.'", "'.$Name.'", "'.$Datum.'", "'.$Gewaesser.'", "'.$Anzahl.'", "'.$Fischart.'", "'.$Bemerkung.'")';
                    
              $eintragen mysql_query($sql) or die("Fehler: ".mysql_error());
                    echo 
              'Der Eintrag war erfolgreich<p>';
                    
              header("Location:".$joomlarootdir."/fangblatt.php"); 
                    exit;
                    } 
                      else 
                      {
                      echo 
              'Ihre Angaben sind fehlerhaft.';
                      exit;
                      }

              function 
              check_date($date,$format,$sep)
              {    
                  
                  
              $pos1    strpos($format'd');
                  
              $pos2    strpos($format'm');
                  
              $pos3    strpos($format'Y'); 
                  
                  
              $check    explode($sep,$date);
                  
                  return 
              checkdate($check[$pos2],$check[$pos1],$check[$pos3]);

              }
               
              ?>

              Kommentar


              • #8
                Zitat von pluto007 Beitrag anzeigen
                - viele Skripte - wie kann man das DB-Connect Skript und auch das Löschskript in das Hauptskript packen?
                Copy and Paste, wenn es denn ganz einfach sein soll. Oder was meinst Du?

                Ich würde ein Löschskript aber einzeln lassen und eine nochmalige Bestätigung fürs Löschen voraussetzen.

                Kommentar


                • #9
                  Hi,

                  mir ist nicht klar wie ich z.B. das Löschskript in das Hauptskript integriere und dann dieses "integrierte Skript" aufrufe.

                  Zweites Problem das ich habe ist, dass mir die Übergabe von Variablen per URL nicht gerade gefällt, da es sehr unsicher ist, aber meine Versuche mit $_Session nicht geklappt haben.

                  Danke & Grüße
                  pluto

                  Kommentar


                  • #10
                    Wie andere das machen, weiß ich nicht, doch ob Post oder GET, bei beiden sind die Parameter im Quelltext ersichtlich und ohne Session gibt es keinen Zutritt zum Admin-Bereich. Als das wichtigste sehe ich deshalb eigentlich an, den Admin-Bereich richtig abzusichern. Also, if (Fehler in Session, Passwort oder sonstiges) {Script wird nicht geparst;}.

                    Dann, bei Post gehst Du doch mit den Parameter-Werte-Paaren nicht anders um, als bei GET, außer dass Du die nicht mit einem Link als QueryString übergeben kannst. Nun habe ich erst einmal ein älteres Script von mir ausgebuddelt, bei dem ich das noch mit GET mache, da öffnet example.net/loeschpage.php?loesche=id erst einmal eine Seite, die nicht viel mehr als ein window.confirm öffnet und bevor das nicht true liefert, geht es nicht zurück zur eigentlichen Löschseite.

                    Kommentar

                    Lädt...
                    X