laladudu
Goto Top

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".

 
<? 
$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?

Content-Key: 267924

Url: https://administrator.de/contentid/267924

Ausgedruckt am: 28.03.2024 um 18:03 Uhr

Mitglied: Arano
Arano 31.03.2015 um 21:28:42 Uhr
Goto Top
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

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 face-wink

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
Mitglied: laladudu
laladudu 01.04.2015 um 10:49:47 Uhr
Goto Top
Sorry für die miese Erklärung^^

Es ist folgendes:

Ich habe mir eine Tabelle generieren lassen, mit den Werten aus der DB, die beinhaltet die geräteID und den Raumnamen, in dem sich das Gerät befindet. Der Raumname kommt von der Tabelle "Raum" und ist über geraet.raumID = raum.raumID verbunden.

Neben jedem Eintrag kann man auf "ändern" klicken und gelangt zu einem Formular.
Dort gibt es ein Dropdown Menü für die Raumauswahl, und der ominöse "Defaultwert" soll jener Raumname sein, der zu dem zu ändernden Gerät gehört.
[...] Nach Auswahl eines anderen Raumes [...]

Wählt man einen anderen Raum aus, soll dieser in die Gerätetabelle eingetragen werden, das funktioniert bei mir, nur wenn ich den momentanen Raum lasse und ihn nicht ändere, wird nichts in die DB geschrieben.

Hoffe damit könnt ihr mehr anfangen... face-smile
Mitglied: Arano
Arano 01.04.2015 um 19:58:07 Uhr
Goto Top
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:
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 ;) )