Dynamisches Dropdown [PHP | MySQL]

New member
Hallo Leute, hab wieder mal ein Problem in meinem Projekt, dass mich hindert weiter zu kommen, ich hoffe dafür gibts eine verständliche Lösung :D

Ich will mir mittels einer Datenbankabfrage ein Dropdown erstellen lassen, bin mir aber nicht wirklich sicher wie ich das am besten angehen könnte.

In einer Datei führe ich die Datenbankabfragen aus, dass heißt von dort aus hole ich mir die ganzen Daten und in einer Anderen mach ich das Layout und baue die Daten dort ein.

Nur weiß ich jetzt nicht, wie ich die Daten von der Abfrage in ein Dropdown-Menü verwandeln kann :hmm: Oder besser gesagt, ich wüsste im Prinzip schon wie es geht nur funktionierts einfach nicht.

Gibts da vielleicht einfachere Wege um sowas zu realisieren?
 
Einfacher aber "macht man nicht": pack alles in eine Datei.

Dann könntest du die Abfrage ins Array holen und darüber das Dropdown generieren. :D

Eventuell kannst du das Ergebnis deiner Abfrage per Funktionsergebnis aus der anderen Datei holen?

Mit der PCMasters.de Community App geschrieben
 
Das will ich eben nicht, dass ich alles in eine Datei packe, denn da wüsste ich auch wie es funktioniert. Ich weiß auch wie ich sowas aufbauen muss, um ein Dropdown Select zu bekommen.

Mein Problem ist, dass Ergebnis der Anfrage zu holen und daraus ein Dropdown zu generieren. Egal wie viele Datensätze da drin sind.

So wie du es geschrieben hast, hab ich es auch schon versucht.
 
Ja dass du das nicht willst ist mir klar. Mein PHP ist auch schon etwas eingerostet...include vllt?

Mehr fällt mir leider nicht ein.

Mit der PCMasters.de Community App geschrieben
 
Include und require hab ich auch schon versucht, funktioniert aber leider auch nicht :(

//So in der Art will ich es realisieren:

Spoiler:
<select>
<?php

$sql
= "SELECT
spalte
FROM
tabelle"
;
$result = mysql_query($sql) OR die(mysql_error());
while(
$row = mysql_fetch_assoc($result)) {
echo
"<option>"$row['options']"</option>";
}
?>
</select>

Die while Schleife liest mir die Daten aus und generiert daraus das Dropdown, nur weiß ich jetzt eben nicht genau wie ich die while Schleife in mein Dokument bekomme, wo ich den Aufbau gestalte.

//Edit:

So siehts jetzt zur Zeit in meinem Codedschungel aus :)

Die beiden Funktionen um Datenbankaufruf zu machen und Dropdown zu "generieren":

Spoiler:
function getSalutations( $salutationIds=null )
{
$retValue = array();

if ( $salutationIds == null )
{
$stmt = $this->mySqlDb->prepare( "select id=?, name=? from salutation order by name=? asc" );
}

if ( $stmt != false )
{ $isOk = $stmt->bind_param( "iss",
$this->id,
$this->name,
$this->name);


if ( $isOk )
{$isOk = $stmt->execute();
}

$error = $stmt->error;
$errno = $stmt->errno;
$stmt->close();

}
else
{
$isOk = false;
}

if ( $isOk == false )
{
if ( $error == "" )
{
$error = $this->mySqlDb->error;
$errno = $this->mySqlDb->errno;
}

if ( $error == "" )
{
$lastError = error_get_last();
$error = $lastError['message'];
}

throw new MySqlException( $error, $errno );
}

return( $retValue );
}

Spoiler:
function showSalutationList( $name="salutations", $selected=null, $emptyValue=false,
$multiple=false, $options="", $idName=null )
{
if ( $idName == null )
{
$idName = $name;
}

if ( $multiple )
{
$name .= "[]";
$multipleOptions = "multiple";
}

if ( $emptyValue )
{
$emptyEntry = '<option value=""></option>';
}

$salutations = self::getSalutations();

echo <<<HTML
<select name="$name" id="$idName" $multipleOptions $options>
$emptyEntry
HTML;
if ( isset( $salutations) )
{
foreach( $salutations as $index => $salutation )
{
$id = $salutation->getId();

$name = $salutation->getName();

$selectedHtml = "";

if ( $multiple )
{
if ( in_array( $id, $selected ) )
{
$selectedHtml = "selected";
}
}
else
{
if ( $id == $selected )
{
$selectedHtml = "selected";
}
}
echo <<<HTML
<option value="$id" $selectedHtml>$name</option>
HTML;
}
}
}

Und hier die Ausgabe in einem anderen File:

Spoiler:
<tr>
<td class="category topleft" width="1%"><?php echo($_SESSION['lang']['cp_salutationId']); ?>
</td>

<td class="col_topright">
<?php
$salutation->showSalutationList( "salutation", $salutation, false, false, 'style="width:200px" tabindex="1"', null );
?>
</td>
</tr>

Das Dropdown wird mir erstellt, aber leider nur ein leeres ohne Daten :confused:
 
Zuletzt bearbeitet:
So ich hab das Dropdown erstellen jetzt hinbekommen und es funktioniert auch alles ohne Probleme nur weiß ich jetzt nicht wie ich den Namen und die ID des ausgewählten Items bekomme :confused: Ich brauch nämlich die ID für speichern in die Datenbank und den Namen um es anzuzeigen.

Hat jemand eine Idee?
 
Naja wenn ich auf speichern drücke sollen alle Variablen in die Datenbank gespeichert werden und jetzt weiß ich eben nicht wie ich das selektierte Item bekommen soll.
 
PHP:
        <form method="POST" action="#">
            <select name="dropdown">
                <option value="test">Test</option>
                <option value="test2">Test2</option>
            </select>
            <input type="submit">
        </form>
        <?
        if (isset($_POST['dropdown']))
            echo $_POST['dropdown'];
        ?>
 
Bitte besser mich jetzt aus wenn ich mich irre, aber da geb ich ja den Wert nur aus oder nicht?
 
Ja aber ich will den Wert ja mit meiner save-Funktion in die Datenbank schreiben und nicht ausgeben. Und die Funktion befindet sich in einer anderen Datei. :confused:
 
Dann leitest du eben das Formular auf deine andere Datei um.
Im <form> Attribut "action" kannst du das Ziel festlegen,
da muss dann auch der PHP-Code rein...
 
Ich habs jetzt so versucht aber leider bekomme ich immer nur "0" als Ergebnis :confused:

Ich poste mal meinen derzeitigen Code vielleicht liegt ja an einer anderen Stelle der Hund begraben.

Also hier der Aufruf der Funktion mit der ich das Dropdown erstelle:

Spoiler:
<tr>
<td class="category topleft" width="1%"><?php echo($_SESSION['lang']['cp_salutationId']); ?>
</td>

<td class="col_topright">

<?php
$helplist->showSalutationList( "salutation", $salutation, false, false, 'style="width:100%" tabindex="2"' );
?>

</td>
</tr>

Und hier die aufgerufene Funktion:

Spoiler:
function showSalutationList( $name="salutation", $selected=null, $emptyValue=false,
$multiple=false, $options="", $idName=null )
{
if ( $idName == null )
{
$idName = $name;
}

if ( $multiple )
{
$name .= "[]";
$multipleOptions = "multiple";
}

if ( $emptyValue )
{
$emptyEntry = '<option value=""></option>';
}

$salutations = self::getSalutations();

echo <<<HTML
<select name="$name" id="$idName" $multipleOptions $options>
$emptyEntry
HTML;
if ( isset( $salutations) )
{
foreach( $salutations as $index => $salutation )
{
$id = $salutation->getId();

$name = $salutation->getSalutationSaved();

$selectedHtml = "";

if ( $multiple )
{
if ( in_array( $id, $selected ) )
{
$selectedHtml = "selected";
}
}
else
{
if ( $id == $selected )
{
$selectedHtml = "selected";
}
}
echo <<<HTML
<option value="$id" $selectedHtml>$name</option>
HTML;
}
}
}

Und danach hol ich mir mit GetFormData die Informationen aus dem Formular:

Spoiler:
function getFormData()
{ $GLOBALS['salutation'] = $_POST['salutation'];

}

Und in der gleichen Datei will ich den den ermittelten Wert so setzen:

Spoiler:
$cp->setSalutation($salutation);

Problem ist wie gesagt, dass ich immer 0 zurückbekomme. Ist da irgendein Fehler der das auslöst oder? :(

//Edit: Ich habs jetzt mal soweit, dass ich die ausgewählte ID bekomme, aber in einem anderen Dokument brauche ich den Namen und nicht die ID des selektierten Items und das will ums verrecken nicht funktionieren.
 
Zuletzt bearbeitet:
Hat denn keiner Idee :confused: Bin echt am verzweifeln, da ich einfach keinen Namen bekomme :mad:

Hier mal meine bisherige Funktion:

function getCorrTypeById($corrId)
{
//$retValue = array();


$stmt = $this->mySqlDb->prepare( "select name from correspondence_type where id='$corrId'");


$result = $stmt->execute();

$stmt->bind_result( $result );

while($stmt->fetch())
{
$resultn = $result;
}

return $resultn;
}
 

Online-Statistiken

Zurzeit aktive Mitglieder
1
Zurzeit aktive Gäste
293
Besucher gesamt
294

Neueste Themen

Beliebte Forum-Themen

X
Keine passende Antwort gefunden?