PHP Dropdown Menü, Werte aus DB
Hi, ich hoffe jemand versteht mein Problem^^
Folgendes:
Ich habe die Tabelle "Geräte" mit
Geräte ID (PK)
Gerätename
raumID (FK)
und die Tabelle "Raum" mit
raumID (PK)
raumName
Die Tabellen sind über die raumID verbunden.
Der User soll nun im Dropdown Menü "Raum" die verschiedenen Raumnamen sehen und als Defaultwert den bereits eingetragenen. Nach Auswahl eines anderen Raumes soll dieser Raum über die ID in der Gerätetabelle geändert werden können.
Also Beispiel:
Gerätetabelle: Raumtabelle:
ID Gerätename raumID raumID raumName
1 SensorA 1 1 RaumA
2 SensorB 2 2 RaumB
Und beim Dropdown Menü soll man nicht die raumID sehen, sondern den Namen, also wenn ich beispielsweise SensorB ändern will,
klicke ich auf das Dropdown Menü, und "RaumB" wird als Defaultwert angezeigt und nicht "2".
Dann führe ich aus:
Was zwar funktioniert, aber NUR wenn ich den Raum auch ändere... Wie bekomme ich das hin, dass der alte Wert einfach bleibt, wenn ich diesen nicht ändere?
Folgendes:
Ich habe die Tabelle "Geräte" mit
Geräte ID (PK)
Gerätename
raumID (FK)
und die Tabelle "Raum" mit
raumID (PK)
raumName
Die Tabellen sind über die raumID verbunden.
Der User soll nun im Dropdown Menü "Raum" die verschiedenen Raumnamen sehen und als Defaultwert den bereits eingetragenen. Nach Auswahl eines anderen Raumes soll dieser Raum über die ID in der Gerätetabelle geändert werden können.
Also Beispiel:
Gerätetabelle: Raumtabelle:
ID Gerätename raumID raumID raumName
1 SensorA 1 1 RaumA
2 SensorB 2 2 RaumB
Und beim Dropdown Menü soll man nicht die raumID sehen, sondern den Namen, also wenn ich beispielsweise SensorB ändern will,
klicke ich auf das Dropdown Menü, und "RaumB" wird als Defaultwert angezeigt und nicht "2".
<?
$sql1 = "SELECT geraeteID, geraeteName, raumname FROM geraet LEFT JOIN raum ON geraet.raumID = raum.raumID WHERE geraeteID='$id'";
require_once ('config.php');
$sql7 = "Select distinct raumname, raumID from raum";
$db_link = mysqli_connect (MYSQL_HOST,
MYSQL_BENUTZER,
MYSQL_KENNWORT,
MYSQL_DATENBANK);
mysqli_set_charset($db_link, 'utf8');
$db_erg = mysqli_query( $db_link, $sql1 );
if ( ! $db_erg )
{
die('Ungültige Abfrage: ' . mysqli_error($db_link));
}
$db_erg2 = mysqli_query( $db_link, $sql7);
echo 'Raum:';
echo '</br>';
echo '</br>';
echo '<select name="raum">';
while($zeile = mysqli_fetch_array($db_erg, MYSQL_ASSOC))
{
echo '<option value="' . $zeile['raumID'] . '">' . $zeile['raumname'] . '</option>';
}
while($zeile = mysqli_fetch_array($db_erg2, MYSQL_ASSOC))
{
echo '<option value="' . $zeile['raumID'] . '">' . $zeile['raumname'] . '</option>';
}
echo '</select>';
?>
Dann führe ich aus:
<?
$raum = $_POST['raum'];
$sql = "UPDATE geraet LEFT JOIN raum ON geraet.raumID = raum.raumID SET ";
$sql .= " geraet.raumID = '$raum' ";
$sql .= " WHERE geraeteID ='$id'";
?>
Was zwar funktioniert, aber NUR wenn ich den Raum auch ändere... Wie bekomme ich das hin, dass der alte Wert einfach bleibt, wenn ich diesen nicht ändere?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 267924
Url: https://administrator.de/forum/php-dropdown-menue-werte-aus-db-267924.html
Ausgedruckt am: 07.04.2025 um 08:04 Uhr
3 Kommentare
Neuester Kommentar
Hi,
hatte deine frage schon heute Mittag gesehen aber mit dem Smartphone wollt ichs nicht versuchen...
"Versuchen" weil die Frage sehr unverständlich ist und auch der Quelltext irgendwie ...durcheinander... scheint
Default von was ?
Was ist der Defaultwert ?
Eingetragen, wo ?
[...] Nach Auswahl eines anderen Raumes [...]
eines __anderen__ ? wurde schon einer ausgewählt, wann wo wie ?
Und was ist mit dem aktuellem Raum ?
[...] soll dieser Raum über die ID in der Gerätetabelle geändert werden können [...]
...keine Ahnung ! Aber das liegt vermutlich daran weil ich die ersten Punkte schon nicht verstehe.
Und wie es aussieht (kein anderer hat etwas geantwortet) Versteht es niemand
Noch dazu scheint es hier nur um die Räume zu gehen... welche Rolle speielen die Geräte den ?
Ich vermute das es hier um eine Grerät->Raum zuordnung gehen soll oder ? (oder Raum->Geräte?)
Versuch es doch noch einmal mit einer detaillieren Beschreibung der Aufgabe die du löschan möchtest.
~Arano
hatte deine frage schon heute Mittag gesehen aber mit dem Smartphone wollt ichs nicht versuchen...
"Versuchen" weil die Frage sehr unverständlich ist und auch der Quelltext irgendwie ...durcheinander... scheint
Der User soll nun im Dropdown Menü "Raum" die verschiedenen Raumnamen sehen und als Defaultwert den bereits eingetragenen. Nach Auswahl eines anderen Raumes soll dieser Raum über die ID in der Gerätetabelle geändert werden können.
[...] und als Defaultwert den bereits eingetragenen [...]Default von was ?
Was ist der Defaultwert ?
Eingetragen, wo ?
[...] Nach Auswahl eines anderen Raumes [...]
eines __anderen__ ? wurde schon einer ausgewählt, wann wo wie ?
Und was ist mit dem aktuellem Raum ?
[...] soll dieser Raum über die ID in der Gerätetabelle geändert werden können [...]
...keine Ahnung ! Aber das liegt vermutlich daran weil ich die ersten Punkte schon nicht verstehe.
Und wie es aussieht (kein anderer hat etwas geantwortet) Versteht es niemand
Noch dazu scheint es hier nur um die Räume zu gehen... welche Rolle speielen die Geräte den ?
Ich vermute das es hier um eine Grerät->Raum zuordnung gehen soll oder ? (oder Raum->Geräte?)
Versuch es doch noch einmal mit einer detaillieren Beschreibung der Aufgabe die du löschan möchtest.
~Arano
Hi,
Schon einiges besser !
Also der User wählt erst eine Gerät aus,
klickt auf "weiter" und
sieht dann in welchem Raum es sich befindet. Gleichzeitig kann er hier einen anderen Raum auswählen der dann als "der aktuelle" gespeichert werden soll.
Wenn ich das nun so richtig verstanden habe, habe ich nur ein Problem !
[...]wenn ich den momentanen Raum lasse [...] wird nichts in die DB geschrieben.
Warum soll den auch etwas geschrieben werden, es steht doch schon in der Datenbank !?
Und da es sich um eine UPDATE-Statement handelt müsste es sehr wohl ausgeführt werden. Nur das du es eventuel nicht erkenns da der vorhandene Eintrag auf den gleichen Wert gesetzt wird wie er schon steht. (Ist ja ein Update, kein Insert !)
Darüber hinaus sollte ein einfaches UPDATE ausreichen:
~Arano
Bei deiner Startfrage im Codeblock, wenn du das <select> generierst (Zeile 20-30):
Kann es sein, das du mit der ersten While-Schleife den "default-Wert" ausgeben möchtest und mit der zweiten Schleife alle Räume ?
Das müsste doch für den aktuellen Raum zwei Einträge generieren oder !? (mal abgesehen davon das es besser Möglichkeiten gibt ;) )
Schon einiges besser !
Also der User wählt erst eine Gerät aus,
klickt auf "weiter" und
sieht dann in welchem Raum es sich befindet. Gleichzeitig kann er hier einen anderen Raum auswählen der dann als "der aktuelle" gespeichert werden soll.
Wenn ich das nun so richtig verstanden habe, habe ich nur ein Problem !
[...]wenn ich den momentanen Raum lasse [...] wird nichts in die DB geschrieben.
Warum soll den auch etwas geschrieben werden, es steht doch schon in der Datenbank !?
Und da es sich um eine UPDATE-Statement handelt müsste es sehr wohl ausgeführt werden. Nur das du es eventuel nicht erkenns da der vorhandene Eintrag auf den gleichen Wert gesetzt wird wie er schon steht. (Ist ja ein Update, kein Insert !)
Darüber hinaus sollte ein einfaches UPDATE ausreichen:
UPDATE `geraetetabelle`
SET `raumId` = (int)$_POST['neuerRaumId']
WHERE `geraertId` = (int)$_POST['geraetId']
~Arano
Bei deiner Startfrage im Codeblock, wenn du das <select> generierst (Zeile 20-30):
Kann es sein, das du mit der ersten While-Schleife den "default-Wert" ausgeben möchtest und mit der zweiten Schleife alle Räume ?
Das müsste doch für den aktuellen Raum zwei Einträge generieren oder !? (mal abgesehen davon das es besser Möglichkeiten gibt ;) )