Foreach in ein Select Auswahlmenü

CreativPur

Erfahrenes Mitglied
Hi,

ich habe in meiner Datenbank eine Tabelle Namens "design_name".

Diese kann ich per echo Select-Ausgabe wie folgt auch ausgeben..

PHP:
$sql = "SELECT design_name FROM users_design WHERE userid = $userid AND users_design.design_nr > 0";
foreach ($pdo->query($sql) as $row)
echo 'Design-Name: ' .$row['design_name']. '<br />';

Jetzt möchte ich den Wert, bzw. die verschiedenen Design's per Auswahlmenü (SELECT) auswählen können..

Mein Versuch, der aber leider nicht funktioniert..
PHP:
<select  name="bw_design" class="form-control">
<option value="<?php echo  $row['design_name'] ?>"><?php foreach ($pdo->query($sql) as $row)  echo  $row['design_name'] ?></option>
</select>

Die Designs werden alle in eine Option angezeigt, jedoch nicht für jedes Design eine Option.
Außerdem muss ich das auserwählte Design auch als Value einfügen..

Wie stelle ich das am besten an ?
 
Die "<option..." muß mit in die foreach Schleife.

foreach{
<option ... /option>
}
 
Super.... Vielen Dank...
Ich habe es für eine Nachfrage folgend gelöst..
PHP:
<select  name="bw_design" class="form-control">
                    <option value="">Bitte wählen Sie ein Design</option>
                    <?php
                    $sql = "SELECT design_name FROM users_design WHERE userid = $userid AND users_design.design_nr > 0";
                    foreach($pdo->query($sql) as $row){
                    echo '
                    <option value="'.$row['design_name'].'">' .$row['design_name'].'</option>';
                    }
                    ?>
                </select>
 
Das mit der Ausgabe des Auswahlmenüs hat super funktioniert..
Jetzt habe ich das Problem, dass beim Abspeichern mit nur ein Array in der Datenbank angezeigt wird.

Meine Datenbank hat 7 Spalten..
id
userid
bw_date
bw_als
bw_design
bw_anschreiben_titel
bw_zeugnisse_firma

Bis auf bw_zeugnisse_firma wird alles wir in der Datenbank korrekt angezeigt. Dort steht nur ein Array !

Folgende Scripts habe ich geschrieben..

PHP:
$sql = "SELECT userid FROM users_design WHERE userid = $userid";

session_start();

$showFormular = true; //Variable ob das Registrierungsformular anezeigt werden soll
 
    if(isset($_GET['bw_bewerbung'])) {
     $error = false;
     $userid = $_POST['userid'];
     $bw_als = $_POST['bw_als'];
     $bw_design_name = $_POST['bw_design_name'];
     $bw_anschreiben_titel = $_POST['bw_anschreiben_titel'];
     $bw_zeugnisse_firma = $_POST['bw_zeugnisse_firma'];
     foreach($_POST['bw_zeugnisse_firma'] as $row['zeugnisse_firma']) {
     echo $row['zeugnisse_firma'];
     }
 
 
     if(empty($bw_als)) {
        echo '<span class="info_red">Bitte alle Felder ausfüllen</span><br>';
        $error = true;
     }
 
     $statement = $pdo->prepare("
     INSERT INTO users_bewerbungen (
     userid,
     bw_als,
     bw_design_name,
     bw_anschreiben_titel,
     bw_zeugnisse_firma
     )
     VALUES (
     :userid,
     :bw_als,
     :bw_design_name,
     :bw_anschreiben_titel,
     :bw_zeugnisse_firma
     ) ");
 
     $result = $statement->execute(array('userid' => $userid, 'bw_als' => $bw_als, 'bw_design_name' => $bw_design_name, 'bw_anschreiben_titel' => $bw_anschreiben_titel, 'bw_zeugnisse_firma' => $bw_zeugnisse_firma));
    }
 
if($showFormular) { 


<form action="?bw_bewerbung" method="post"> 
    <div class="form-group form-group-lg">
        <label class="col-sm-2 control-label" for="formGroupBW_Name">Geben Sie Ihrer Bewerbung einen Namen:</label>
        <div class="col-sm-10">
              <input class="form-control" type="text" name="bw_als" placeholder="z.B. Möbelverkäufer">
            <input class="form-control" type="hidden" name="userid" value="<?php echo $userid  ?>">
        </div>
      </div>
    <div class="col-lg-12">
        <hr /><br />
    </div>
 
    <div class="row">
        <div class="col-lg-4">
            <div class="form-group">
                <label for="inputdesignauswahl" class="control-label">Designauswahl</label><br />
                <select  name="bw_design_name" class="form-control">
                    <option value="">Bitte wählen Sie ein Design</option>
                    <?php
                    $sql = "SELECT design_name FROM users_design WHERE userid = $userid AND users_design.design_nr > 0";
                    foreach($pdo->query($sql) as $row){
                    echo '
                    <option value="'.$row['design_name'].'">' .$row['design_name'].'</option>';
                    }
                    ?>
                </select>
            </div>
        </div>
    
        <div class="col-lg-4">
            <div class="form-group">
                <label for="inputanschreibenauswahl" class="control-label">Auswahl Ihrer Anschreiben</label><br />
                  <select name="bw_anschreiben_titel" class="form-control">
                    <option value="">Bitte wählen Sie ein Bewerbungsanschreiben</option>
                    <?php
                    $sql = "SELECT anschreibe_titel FROM users_anschreiben WHERE userid = $userid";
                    foreach($pdo->query($sql) as $row){
                    echo '
                    <option value="'.$row['anschreibe_titel'].'">' .$row['anschreibe_titel'].'</option>';
                    }
                    ?>
                </select>
            </div>
        </div>
    
        <div class="col-lg-4">
            <div class="form-group">
                <label for="inputzeugnisauswahl" class="control-label">Auswahl Ihrer Zeugnisse / Zertifikate</label><br />
                    <select multiple="multiple" class="form-control" id="example-getting-started3" name="bw_zeugnisse_firma[]">
                    <?php
                    $sql = "SELECT zeugnisse_firma FROM users_zeugnisse WHERE userid = $userid";
                    foreach($pdo->query($sql) as $row){
                    echo '
                    <option value="'.$row['zeugnisse_firma'].'">' .$row['zeugnisse_firma'].'</option>';
                    }
                    ?>
                    </select>
            </div>
        </div>
    </div>
    <hr />
    <button type="submit" class="btn btn-primary">Zusammenstellung speichern</button>&nbsp;&nbsp;&nbsp;&nbsp;<button type="button" class="btn btn-success">Zusammenstellung ansehen</button>
</form> 
</div>

<?php
} //Ende von if($showFormular)
?>

Im "echo $row['zeugnisse_firma'];" werden mir allerdings die Auswahl-Kriterien korrekt angezeigt
 
Zuletzt bearbeitet:
Ist doch ganz logisch und damit auch ganz einfach.

Du hast ein multiple Select für deine Zeugnisse, nimmst die als Array entgegen und gibst die ja auch mit dem foreach() korrekt als Array aus. Also mußt du es auch als Array in die Datenbank schreiben. Ein Textfeld kann aber kein Array direkt aufnehmen.
Wenn die Werte Zahlen sind, könntest du das Array mit implode() in einen String umwandeln. Ansonsten lagere die Zeugnisse in eine eigene Tabelle aus, die du z.B. über userid verknüpfst.
 
Danke für die Schnelle Antwort..
Ich habe eine eigene Tabelle "users_zeugnisse", die ja über das SELECT auch für das Multi-Menü aufgerufen wird.
Code:
$sql = "SELECT zeugnisse_firma FROM users_zeugnisse WHERE userid = $userid";

In der Tabelle "users_bewerbungen" sollen ja daher die Zeugnisse mit den dazugehörigen Tabellen, wie "users_design" und "users_anschreiben" zusammengefasst werden.
Das funktioniert auch soweit..
Nur bei den Zeugnissen wird immer nur die letzte Zeugnis-Eintragung übernommen..
Dabei müsste doch für jedes Zeugnis, welches ausgewählt wird eine neue Zeile in der Tabelle "users_bewerbungen" erzeugt werden, oder ?"
 
Nur weil du ein Array in ein Feld schreiben willst, werden nicht mehrere Datensätze erzeugt. Kann ja auch nicht, wenn die INSERT Anweisung nicht in einer foreach() steht. Also entweder implode() oder separate Tabelle.
Ist aber auch unsinnig, für jedes Zeugnis eine komplette Zeile zu schreiben. Produziert nur redundante Daten und eine extreme Gefahr der Inkonsistenzen. Such mal nach Datenbank Normalisierung.
 
Wie gesagt.. Ich habe eine separate Tabelle Namens "users_zeugnisse".
Zeugnisse_id
userid
zeugnisse_firma
zeugnisse_name

zeugnisse.png


Tabelle: users_bewerbungen
bw_id
userid
bewerbung_als
bw_design_name
bw_anschreiben_titel
bw_zeugnisse_firma

Nun möchte ich, wie gesagt die Zeugnisse über ein Multi-Select auswählen können, um diese in der Datenbank "users_bewerbungen" unter "bw_zeugnisse_firma" als Name, oder Zahl abzuspeichern, damit ich diese wiederum aufrufen kann..

So sollte die Ausgabe aussehen..
Userid "bewirbt sich" bewerbung_als "mit dem Design" bw_design_name "und dem Anschreiben" bw_anschreibe_titel "und zu guter letzt die auserwählten Zeugnisse" bw_zeugnisse_firma

Was muss ich genau machen, das diese Kombination funktioniert ?

Insert PHP
PHP:
$showFormular = true; //Variable ob das Registrierungsformular anezeigt werden soll
    
    if(isset($_GET['bw_bewerbung'])) {
     $error = false;
     $userid = $_POST['userid'];
     $bw_als = $_POST['bw_als'];
     $bw_design_name = $_POST['bw_design_name'];
     $bw_anschreiben_titel = $_POST['bw_anschreiben_titel'];
    
    
     foreach($bw_zeugnisse_firma = $_POST['bw_zeugnisse_firma'] as $row['zeugnisse_firma']) {
     echo $row['zeugnisse_firma'];
     }
    
     $statement = $pdo->prepare("
     INSERT INTO users_bewerbungen (
     userid,
     bw_als,
     bw_design_name,
     bw_anschreiben_titel,
     bw_zeugnisse_firma
     )
     VALUES (
     :userid,
     :bw_als,
     :bw_design_name,
     :bw_anschreiben_titel,
     :bw_zeugnisse_firma
     ) ");
    
     $result = $statement->execute(array('userid' => $userid, 'bw_als' => $bw_als, 'bw_design_name' => $bw_design_name, 'bw_anschreiben_titel' => $bw_anschreiben_titel, 'bw_zeugnisse_firma' => $row['zeugnisse_firma']));
    }

Formular
HTML:
<form action="?bw_bewerbung" method="post">   
    <div class="form-group form-group-lg">
        <label class="col-sm-2 control-label" for="formGroupBW_Name">Geben Sie Ihrer Bewerbung einen Namen:</label>
        <div class="col-sm-10">
              <input class="form-control" type="text" name="bw_als" placeholder="z.B. Möbelverkäufer">
            <input class="form-control" type="hidden" name="userid" value="<?php echo $userid  ?>">
        </div>
      </div>
    <div class="col-lg-12">
        <hr /><br />
    </div>
   
    <div class="row">
        <div class="col-lg-4">
            <div class="form-group">
                <label for="inputdesignauswahl" class="control-label">Designauswahl</label><br />
                <select  name="bw_design_name" class="form-control">
                    <option value="">Bitte wählen Sie ein Design</option>
                    <?php 
                    $sql = "SELECT design_name FROM users_design WHERE userid = $userid AND users_design.design_nr > 0";
                    foreach($pdo->query($sql) as $row){
                    echo '
                    <option value="'.$row['design_name'].'">' .$row['design_name'].'</option>';
                    }
                    ?>
                </select>
            </div>
        </div>
       
        <div class="col-lg-4">
            <div class="form-group">
                <label for="inputanschreibenauswahl" class="control-label">Auswahl Ihrer Anschreiben</label><br />
                     <select name="bw_anschreiben_titel" class="form-control">
                    <option value="">Bitte wählen Sie ein Bewerbungsanschreiben</option>
                    <?php 
                    $sql = "SELECT anschreibe_titel FROM users_anschreiben WHERE userid = $userid";
                    foreach($pdo->query($sql) as $row){
                    echo '
                    <option value="'.$row['anschreibe_titel'].'">' .$row['anschreibe_titel'].'</option>';
                    }
                    ?>
                </select>
            </div>
        </div>
       
        <div class="col-lg-4">
            <div class="form-group">
                <label for="inputzeugnisauswahl" class="control-label">Auswahl Ihrer Zeugnisse / Zertifikate</label><br />
                    <select multiple="multiple" class="form-control" id="example-getting-started3" name="bw_zeugnisse_firma[]">
                    <?php 
                    $sql = "SELECT zeugnisse_firma FROM users_zeugnisse WHERE userid = $userid";
                    foreach($pdo->query($sql) as $row){
                    echo '
                    <option value="'.$row['zeugnisse_firma'].'">' .$row['zeugnisse_firma'].'</option>';
                    }
                    ?>
                    </select>
            </div>
          </div>
    </div>
    <hr />
    <?php
        if(empty($bw_als)) {
        echo '<span class="info_red">Bitte alle Felder ausfüllen</span><br>';
        $error = true;
     }
     ?>
     <br />
    
<div class="row">

     <div class="col-lg-3">
    <button type="submit" class="btn btn-primary btn-sm">Zusammenstellung speichern</button>
   
    </form>  
     </div>

Ausgabe Auswahl:
HTML:
    <table class="table table-hover">
    <thead>
        <tr>
            <th>Bewerbung als:</th>
            <th>Design:</th>
            <th>Anschreiben:</th>
            <th>Zeugnisse:</th>
            <th>Vorschau:</th>
            <th>Löschen:</th>
        </tr>
    </thead>
   
    <?php $sql = "SELECT * FROM users_bewerbungen WHERE userid = $userid";
                foreach($pdo->query($sql) as $row){ ?>
   
    <tbody>
            <tr>
               
                <td>  
                    <?php
                    echo $row['bw_als']. '<br />';
                    ?>
                  
                </td>
                <td>  
                    <?php
                    echo $row['bw_design_name']. '<br />';
                    ?>
                  
                </td>
                <td>
                    <?php
                     echo $row['bw_anschreiben_titel']. '<br />';   ?>
                   
                </td>
                <td>
                    <?php
                    echo $row['bw_zeugnisse_firma']. '<br />';   ?>
                   
                </td>
               
                <td class="text-center">
               
                    <a class="btn btn-info btn-xs" href="#">
                    <span class="glyphicon glyphicon-edit">
                    </span></a><br />
                   
                </td>  
                <td class="text-center">
               
                    <a href="#" class="btn btn-danger btn-xs">
                    <span class="glyphicon glyphicon-remove">
                    </span>
                    </a><br />
                    <?php }   ?>
                
                </td>
               
            </tr>
            </tbody>
    </table>
 
Ich muß gestehen, daß ich dein Problem nicht so ganz verstehe. Warum soll ich die Zeugnisse, die ich eingetragen habe, nicht vollständig nutzen?

Aber davon abgesehen ist es doch eigentlich ganz einfach. Als value für die Zeugnisauswahl nimmst du die zeugnisse_id her. Das Array, das du nach dem Absenden des Formulars bekommst, machst du mit implode() zu einem String und schreibst den in das vorgesehene Feld bw_zeugnisse_firma. Fertig! Bei der Weiterverarbeitung nimmst du den String, wandelst ihn mit explode() wieder in ein Array um und greifst mit den Werten auf die Zeugnistabelle zu.

Oder du gibst der Bewerbungstabelle eine eigene ID und verwendest die für eine gesonderte Tabelle, in die nur die Werte für die Zeugnisse geschrieben werden. Dann hast du eine Verbindung bewerbung -> verwendete_zeunisse -> zeugnisse.
 
Hi sprint..
Es gibt doch Bewerber, die mehrere Berufe haben uns sich somit anderen Zeugnissen bewerben. Wenn ich z.B. Koch bin und habe eine Umschulung als Schlösser gemacht, benötige ich für die Stelle als Schlösser keine Zeugnisse, die ich als Koch erworben habe..

Jetzt zu Deiner Antwort..
So wie ich verstanden habe nehme ich für das Multi-SELCT als Value die "zeugnisse_id". Somit gebe ich nur eine Zahl als Array in die Tabelle "bw_zeugnisse_firma".
Soweit so gut...
Aber wie mache ich das mit dem implode, bzw. explode ?
Wie gesagt, ich bin ein absoluter Anfänger, was PHP anbetrifft..
 

Neue Beiträge

Zurück