Ankündigung

Einklappen
Keine Ankündigung bisher.

Inhalt des Select Auswahlmenüs auf Formularfelder verteilen

Einklappen

Neue Werbung 2019

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

  • Inhalt des Select Auswahlmenüs auf Formularfelder verteilen

    Ich habe eine Select-Box erstellt aus der ich einen Datensatz aus meiner DB auswählen kann. Den ausgewählten Inhalt lasse ich mir in einem Formularfeld nach dem Submit anzeigen. Das mache ich mit
    PHP-Code:
    <input type="text" value="<?php echo $_POST['infoscreen'?>" />\
    "Infoscreen" beinhaltet jetzt eine ID und einen NAMEN, beide werden mir in meinem Formularfeld angezeigt. Ich möchte jetzt in einem Formularfeld die ID und in einem weiteren den NAMEN anzeigen lassen. Wie kann ich das realisieren?

    Für Hilfe wäre ich sehr dankbar.

  • #2
    Zitat von websnake75 Beitrag anzeigen
    "Infoscreen" beinhaltet jetzt eine ID und einen NAMEN, beide werden mir in meinem Formularfeld angezeigt.
    Hab ich das richtig verstanden: Du mixst 2 Informationen(ID, NAMEN) in einem Formularfeld zusammen?
    Nach Möglichkeit würde ich das vorher trennen, z.B. durch Nutzung von hidden Feldern.
    Wenn das nicht möglich ist, kannst dur nur deinen gemixten String mittels Stringfunktionen oder regulären Ausdrücken wieder auseinanderpflücken.

    Kommentar


    • #3
      Hab es bisher nicht anders hinbekommen. Hier ist mal mein Code dazu:
      PHP-Code:
      <form action="<?php echo $PHP_SELF ?>" method="Post">\
      <?php\
          $server = 'xxx';\
          $benutzer = 'xxx';\
          $passwort = 'xxx';\
          $datenbank = 'xxx';\
      \
          $verbindung = @mysqli_connect($server, $benutzer, $passwort);\
          \
          if ($verbindung)\
          \{\
              mysqli_select_db($verbindung, $datenbank);\
                  if(mysqli_error($verbindung))\
                  \{\
                  echo 'Fehler: ' . mysqli_error($verbindung);\
                  \}\
                  else\
                  \{\
                  $sql = "SELECT * FROM screen ORDER BY id ";\
                  $result = mysqli_query($verbindung, $sql);\
                  $options = "";\
                  while($formulardaten = mysqli_fetch_assoc($result))\
                  \{\
                      $options .= "<option>".$formulardaten["id"] ." ". $formulardaten["name"] ."</option>";\
                   \}\
                  echo '<select name = "infoscreen">';\
                  echo $options;\
                  echo '</select>';\
          \}\
          \}\
          else\
          \{\
          echo 'Verbindungsfehler: ' . mysqli_connect_error($verbindung);\
          \}\
      ?>    \
          <input type="submit" value="\'c4ndern"/>\
          <input type="text" value="<?php echo $_POST['infoscreen'?>" />\
      </form>\
      Und hier mal zum Anschauen was bisher da rauskommt.

      Testformular

      Kommentar


      • #4
        jo .. klarer Fall von Fail ...
        PHP-Code:
        $options .= '<option value="'.$formulardaten["id"] .'">'.$formulardaten["id"] ." "$formulardaten["name"] .'</option>' 
        mach es mal so - wenn du jetzt das Formular absendest, enthält der Post-Wert vom select-Element genau die ID des gewählten Datensatzes - damit holst du aus der Datenbank den passenden Datensatz und kannst dessen Bestandteile wunderbar in einzelnen Feldern anzeigen - vor allem weil du dich nie darauf verlassen solltest, dass deine Formulardaten auch von deinem Script stammen .... jemand kann jederzeit den html-Text analysieren und daraus eine ganz andere Seite bauen, die trotzdem dein Script aufruft und ihm die Parameter "untern Rock schiebt" - der nimmt dann aber vielleicht kein Select sondern ein Eingabefeld ...
        [Quote=nikosch]
        So glatt kann doch wirklich keiner sein.[/quote] :roll:

        Kommentar


        • #5
          function create html for select option

          Ja, das von beliar284 gesagte ist wohl treffend.
          Aber wäre es nicht schön, wenn nach Absenden des Formulars die gewählte Option wieder als Vorschlag kommt (Stichwort selected)?
          Da dies öfter gebraucht wird, hab ich dafür mal eine Funktion geschrieben, welche das komplette HTML für ein <select>..</select> liefert:

          PHP-Code:
          function getHtmlSelect($name,array $configArr) {
              
          $html '<select name="'.$name.'" class="'.$name.'" size="1">'."\r\n";
              
          $PostValue = isset($_POST[$name]) ? $_POST[$name] : true
              foreach(
          $configArr as $value => $caption) {
                
          $html .= '<option value="'.$value.'" ';
                if(
          $PostValue === true || $PostValue == $value) {
                  
          $html .= ' selected="selected"';
                  
          $PostValue false;
                }
                
          $html .= '>'.$caption.'</option>'."\r\n";
              }
              
          $html .= '</select>'."\r\n";
              return 
          $html;  

          Nutzung hier etwa so

          PHP-Code:
              :
              
          $selectConfig = array();
              while(
          $formulardaten mysqli_fetch_assoc($result))
              {
                 
          $selectConfig[$formulardaten["id"]] = $formulardaten["name"] ;
              }

              echo 
          getHtmlSelect('infoscreen',$selectConfig);
              : 
          LG jspit

          Kommentar


          • #6
            Ok, danke für die Hilfe. Ich werde es nachher gleich ausprobieren.
            Und nochmal zum Verständnis für mich. In
            PHP-Code:
            <?php echo $_POST['infoscreen'?>
            ist jetzt die ID des gewählten Datensatzes enthalten. Wenn ich jetzt die Bestandteile des Datensatzes in den einzelnen Formularfeldern anzeigen lassen will muß ich doch irgendwie angeben SELECT NAME FROM Tabelle WHERE ID = $_POST['infoscreen'] um z.B. den Namen aus der DB zu holen, oder bin ich jetzt auf dem falschen Weg?

            Mein Formularfeld sieht ja jetzt so aus
            Code:
            <input type="text" name="name"  value="<?php echo $name ?>"/>
            und da fehlt ja der Bezug zur ID aus dem Post-Wert.

            Kommentar


            • #7
              Zitat von websnake75 Beitrag anzeigen
              Und nochmal zum Verständnis für mich. In
              PHP-Code:
              <?php echo $_POST['infoscreen'?>
              ist jetzt die ID des gewählten Datensatzes enthalten.
              Ja

              Zitat von websnake75 Beitrag anzeigen
              Wenn ich jetzt die Bestandteile des Datensatzes in den einzelnen Formularfeldern anzeigen lassen will muß ich doch irgendwie angeben SELECT NAME FROM Tabelle WHERE ID = $_POST['infoscreen'] um z.B. den Namen aus der DB zu holen, oder bin ich jetzt auf dem falschen Weg?
              Hast du schon richtig verstanden. Die Information hast du doch aber schon, durch die Anzeige aller Optionen. Bei meinem Beispiel kannst du gleich das $selectConfig - Array nutzen.

              Kommentar


              • #8
                bitte NIE eine Eingabe des Anwenders "ungefiltert" auf die Datenbank loslassen ... ich schrieb ja schon, dass es nicht zwingend dein Formular sein muss, dass dein Script aufruft - SQL injection solltest du immer im Blick haben
                [Quote=nikosch]
                So glatt kann doch wirklich keiner sein.[/quote] :roll:

                Kommentar


                • #9
                  Danke beliar284 für den Hinweis. Ich versuche nur erstmal die Sache möglichst einfach zum funktionieren zu bringen und will mich danach um die Sicherheit kümmern.

                  Kommentar


                  • #10
                    Vielen Dank auch Dir jspit, hab mir Dein Beispiel schon auf meinem Rechner abgelegt. Da ich mit PHP gerade erst ein paar Tage arbeite, würde ich nur gerne meinen bisherigen Code erweitern um das zu verstehen.

                    Ich möchte die Daten nur auf die Formularfelder verteilen um diese verändern und wieder an die DB senden zu können. Also mein Plan ist:

                    1. Datensatz in Selectbox wählen
                    2. die Daten werden aus der DB in Formularfeldern angezeigt
                    3. man kann jetzt die Daten ändern
                    4. die geänderten Daten werden in die DB geschrieben

                    Jetzt versuche ich Punkt 2 hinzubekommen. Oder geht das so nicht?

                    Ich weiß nun nicht wie ich die Daten auf die Formularfelder verteilen kann. Muss das SELECT NAME FROM Tabelle WHERE ID = $_POST['infoscreen'] separat stehen, oder muss dass in jede <input ... Zeile rein?

                    Ich poste jetzt nochmal meinen kompletten Code:
                    PHP-Code:
                    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                    <html xmlns="http://www.w3.org/1999/xhtml">
                    <head>
                    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
                    <title>Unbenanntes Dokument</title>
                    </head>

                    <body>


                    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                    <html xmlns="http://www.w3.org/1999/xhtml">
                    <head>
                    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
                    <title>Unbenanntes Dokument</title>
                    </head>

                    <body>


                    <html xmlns="http://www.w3.org/1999/xhtml">
                        <head>
                            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                            <title>DB Test</title>


                        </head>

                        <body>
                    <hr />   
                    <form action="<?php echo $PHP_SELF ?>" method="Post">
                    <?php
                        $server 
                    'localhost';
                        
                    $benutzer 'xxx';
                        
                    $passwort 'xxx';
                        
                    $datenbank 'xxx';

                        
                    $verbindung = @mysqli_connect($server$benutzer$passwort);
                        
                        if (
                    $verbindung)
                        {
                            
                    mysqli_select_db($verbindung$datenbank);
                                if(
                    mysqli_error($verbindung))
                                {
                                echo 
                    'Fehler: ' mysqli_error($verbindung);
                                }
                                else
                                {
                                
                    $sql "SELECT * FROM screen ORDER BY id ";
                                
                    $result mysqli_query($verbindung$sql);
                                
                    $options "";
                                while(
                    $formulardaten mysqli_fetch_assoc($result))
                                {
                                
                    $options .= '<option value="'.$formulardaten["id"] .'">'.$formulardaten["id"] ." "$formulardaten["name"] .'            </option>';             
                                }
                                echo 
                    '<select name = "infoscreen">';
                                echo 
                    $options;
                                echo 
                    '</select>';
                        }
                        }
                        else
                        {
                        echo 
                    'Verbindungsfehler: ' mysqli_connect_error($verbindung);
                        }
                    ?>    
                        <input type="submit" value="Ändern"/>
                        <input type="text" value="<?php echo $_POST['infoscreen'?>" />
                    </form>
                    <hr />   

                    <?php
                                $abfrage 
                    mysqli_query($verbindung$sql);
                                
                                
                    $formulardaten mysqli_fetch_assoc($abfrage);
                                
                                    
                    $id $formulardaten["id"];
                                    
                    $name $formulardaten["name"];
                                    
                    $ort $formulardaten["ort"];

                    ?>
                    <form method="post" action="<?php echo $_SERVER['SCRIPT_NAME'?>">
                    <table>
                    <tbody>
                    <tr>
                    <td>ID</td>
                    <td><input type="text" name="id" /></td>
                    </tr>
                    <tr>
                    <td>Name</td>
                    <td><input type="text" name="name"  value="<?php echo $name ?>"/></td>
                    </tr>
                    <tr>
                    <td>Ort</td>
                    <td><input type="text" name="ort"  value="<?php echo $ort ?>"/></td>
                    </tr>
                    </tbody>
                    </table>
                    <input type="submit" value="Ändern" />

                    </form>

                    <hr />   

                    <?php
                                $abfrage 
                    mysqli_query($verbindung$sql);
                                echo 
                    '<h3>Es gibt ' mysqli_num_rows($abfrage) . ' Einträge</h3>';
                                
                                while(
                    $formulardaten mysqli_fetch_assoc($abfrage))
                                {
                                 echo 
                    '<table border="1" class="daten_tabelle">';
                                echo 
                    "<tr>";
                                echo 
                    "<td>"$formulardaten['id'] . "</td>"
                                echo 
                    "<td>"$formulardaten['name'] . "</td>"
                                echo 
                    "<td>"$formulardaten['ort']  . "</td>";
                                echo 
                    "</tr>"
                                 }
                                 echo 
                    '</table>';
                                
                                
                    mysqli_free_result($abfrage);
                        
                    mysqli_close($verbindung);
                    ?>



                    </body>
                    </html>


                    </body>
                    </html>

                    Kommentar


                    • #11
                      Jetzt habe ich es hinbekommen, dass die Daten aus dem gewählten Datensatz der Selectbox in meinem Formular, welches ich für das Ändern der Daten nutzen möchte, einzeln angezeigt werden. Ich habe folgenden Teil ergänzt:
                      alt
                      PHP-Code:
                      <?php
                                  $abfrage 
                      mysqli_query($verbindung$sql);
                                  
                                  
                      $formulardaten mysqli_fetch_assoc($abfrage);
                                  
                                      
                      $id $formulardaten["id"];
                                      
                      $name $formulardaten["name"];
                                      
                      $ort $formulardaten["ort"];

                      ?>
                      neu
                      PHP-Code:
                      <?php
                              $selectid 
                      $_POST['infoscreen'];
                              
                      //echo $selectid;
                              
                      $selectsql "SELECT * FROM screen WHERE id = $selectid";

                                  
                      $abfrage mysqli_query($verbindung$selectsql);
                                  
                                  
                      $formulardaten mysqli_fetch_assoc($abfrage);
                                  
                                      
                      $id $formulardaten["id"];
                                      
                      $name $formulardaten["name"];
                                      
                      $ort $formulardaten["ort"];

                      ?>
                      Kann man das so machen?

                      Kommentar


                      • #12
                        So, jetzt bin ich noch einen Schritt weiter gekommen. Also ich kann jetzt:
                        1. Einen Datensatz über die Selectbox auswählen.
                        2. Dieser wird dann in meinen Formularfeldern angezeigt.
                        3. Ich kann die Daten ändern und per Update an die Datenbank schicken.

                        Jetzt weiß ich nur nicht, warum mein letzter PHP-Teil nach dem Submit beim Update keine Daten mehr liefert. Hat jemand einen Tip für mich?

                        Hier der Codeausschnitt:
                        PHP-Code:
                        <form method="post" action="<?php echo $_SERVER['SCRIPT_NAME'?>">
                        <table>
                        <tbody>
                        <tr>
                        <td>ID</td>
                        <td><input type="text" name="id"  value="<?php echo $id ?>"/></td>
                        </tr>
                        <tr>
                        <td>Name</td>
                        <td><input type="text" name="name"  value="<?php echo $name ?>"/></td>
                        </tr>
                        <tr>
                        <td>Ort</td>
                        <td><input type="text" name="ort"  value="<?php echo $ort ?>"/></td>
                        </tr>
                        </tbody>
                        </table>
                        <input type="submit" value="Ändern" />

                        </form>

                        <hr />   

                        <?php
                                    
                        if (isset($_POST['id'])) {
                                        
                        $sql "
                                            UPDATE
                                                screen
                                            SET
                                                name ='
                        {$_POST['name']}',        
                                                ort ='
                        {$_POST['ort']}'
                                            WHERE id = '
                        {$_POST['id']}'
                                        "
                        ;
                                        
                        mysqli_query($verbindung$sql);
                                        echo 
                        $sql '<br/>';
                                        echo 
                        'Fehler: ' mysqli_error($verbindung) . '<br/>';
                                     }

                        ?>

                        <?php
                                    $abfrage 
                        mysqli_query($verbindung$sql);
                                    echo 
                        '<h3>Es gibt ' mysqli_num_rows($abfrage) . ' Einträge</h3>';
                                    
                                    while(
                        $formulardaten mysqli_fetch_assoc($abfrage))
                                    {
                                     echo 
                        '<table border="1" class="daten_tabelle">';
                                    echo 
                        "<tr>";
                                    echo 
                        "<td>"$formulardaten['id'] . "</td>"
                                    echo 
                        "<td>"$formulardaten['name'] . "</td>"
                                    echo 
                        "<td>"$formulardaten['ort']  . "</td>";
                                    echo 
                        "</tr>"
                                     }
                                     echo 
                        '</table>';
                                    
                                    
                        mysqli_free_result($abfrage);
                            
                        mysqli_close($verbindung);
                        ?>

                        Kommentar

                        Lädt...
                        X