PHP - Dropdown - Selektierten Text in Variable übergeben
Hallo...
habe eine Frage bezüglich Dropdown:
Habe mit HTML ein Dropdownmenü erstellt, dass mit Daten aus einer MySQL-Datenbank gefüllt wird. Nun möchte ich den Selektierten Text (also nicht die Value) in eine Variable übergeben. Das ganze sieht bisher wie folgt aus, nur dass er mir dann eben die Value übergibt und nicht den Angewählten Text:
im anderen Formular steht nun:
Wenn ich einen Datensatz "Mustermann, Hans" habe dann übergibt er in $namefilter" nur "Mustermann,", woran liegt das?
Gruß,
J.R.
habe eine Frage bezüglich Dropdown:
Habe mit HTML ein Dropdownmenü erstellt, dass mit Daten aus einer MySQL-Datenbank gefüllt wird. Nun möchte ich den Selektierten Text (also nicht die Value) in eine Variable übergeben. Das ganze sieht bisher wie folgt aus, nur dass er mir dann eben die Value übergibt und nicht den Angewählten Text:
...
<form method="POST">
<?php
$i = 1;
$filterabfrage = "SELECT * FROM tabelle WHERE abteilung = '".$filter."'"." ORDER BY name";
$result = $db->query($filterabfrage);
if (!$result)
{
die('Der Query konnte nicht ausgeführt werden: '.$db->error);
}
if ($result->num_rows)
{
echo '<select size="1" name="namefilter" onchange=submit()>';
echo '<option value="0" selected>Alle</option>';
while ($row = $result->fetch_assoc())
{
echo '<option value='.($row['name']).'>'.($row['name']).'</option>';
$i=$i+1;
}
}
?>
</select>
</form>
...
im anderen Formular steht nun:
...
if(isset($_POST["namefilter"]))
{
$namefilter = $_POST["namefilter"];
} else {
$namefilter = "";
}
...
Wenn ich einen Datensatz "Mustermann, Hans" habe dann übergibt er in $namefilter" nur "Mustermann,", woran liegt das?
Gruß,
J.R.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 126199
Url: https://administrator.de/contentid/126199
Ausgedruckt am: 22.11.2024 um 01:11 Uhr
8 Kommentare
Neuester Kommentar
Moin,
also nen kleiner Tipp am Rande: Ich würde immer versuchen die ID des Datensatzes per Select-Feld zu übergeben (d.h. wenn die Tabelle so aussieht:
ID Name
1 Mike
2 Irgendwer
3 Irgendwer anders
dann würde ich im Select-Feld nur 1, 2 oder 3 übergeben. Im Ziel-Modul kann ich mir über diese ID immer alle benötigten Werte aus der Datenbank holen - und falls das Ziel wieder in die Datenbank schreibt dann schreibe ich auch nur die ID des Users in die Tabelle...
Hintergrund ist ganz einfach: Ein Vergleich von 2 Zahlen geht immer um längen schneller als nen Text-Vergleich und ist auch unkomplizierter (je nach Abfrage ist bei dir ggf. "Mike" nicht gleich "mike" -> aber 1 ist definitiv = 1). Und ich habe - da meine ID immer ein Primary-Key und Auto-Increment ist niemals das Problem das ggf. 2x "Meyer" vorkommt -> denn Meyer 1 hat dann die ID 17, Meyer 2 hat z.B. die ID 236)
Gruß
Mike
also nen kleiner Tipp am Rande: Ich würde immer versuchen die ID des Datensatzes per Select-Feld zu übergeben (d.h. wenn die Tabelle so aussieht:
ID Name
1 Mike
2 Irgendwer
3 Irgendwer anders
dann würde ich im Select-Feld nur 1, 2 oder 3 übergeben. Im Ziel-Modul kann ich mir über diese ID immer alle benötigten Werte aus der Datenbank holen - und falls das Ziel wieder in die Datenbank schreibt dann schreibe ich auch nur die ID des Users in die Tabelle...
Hintergrund ist ganz einfach: Ein Vergleich von 2 Zahlen geht immer um längen schneller als nen Text-Vergleich und ist auch unkomplizierter (je nach Abfrage ist bei dir ggf. "Mike" nicht gleich "mike" -> aber 1 ist definitiv = 1). Und ich habe - da meine ID immer ein Primary-Key und Auto-Increment ist niemals das Problem das ggf. 2x "Meyer" vorkommt -> denn Meyer 1 hat dann die ID 17, Meyer 2 hat z.B. die ID 236)
Gruß
Mike
Guten Morgen
du Hast ja um die <option> zu erzeugen folgendes in deinem Script:Wenn wir die Variable durch einen festen Text ersetzen würden, z.B. "Mustermann, Hans" kommt das dabei raus:Siehst du es schon ?
Das wird folgend als Attribut=Werte erkannt:
Um solche Fehler zu vermeiden und einen einheitlichen Schreibstiel zu folgen, sollten die Werte einfach immer von Anführungszeichen umschlossen werden ;)
~Arano
du Hast ja um die <option> zu erzeugen folgendes in deinem Script:
echo '<option value='.($row['name']).'>'.($row['name']).'</option>';
echo '<option value=Mustermann, Hans>'.($row['name']).'</option>';
Das wird folgend als Attribut=Werte erkannt:
- "value=Mustermann," - "value" = Attribut; "Mustermann," = Als Wert von Value
- "Hans" - "Hans" = Attribut
value="Mustermann, Hans"
echo '<option value="'.($row['name']).'">'.($row['name']).'</option>';
~Arano
Hm... Sind die Datensätze doppelt in der Datenbank ?
Immerhin ist es ja auch Möglich, das zwei Personen in verschiedenen Firmen oder Abteilungen in der selben Firma einen gleichen Namen haben !?
~Arano
Immerhin ist es ja auch Möglich, das zwei Personen in verschiedenen Firmen oder Abteilungen in der selben Firma einen gleichen Namen haben !?
- Wenn ein Datensatz zwei oder mehrfach existiert muss er gelöscht werden.
- Bestehen doch Unterschiede zwischen den "vermeintlich" doppelten Datensätzen kannst du versuchen bei der Abfrage aus der Datenbank mit "ORDER BY", "GROUP BY", "SELECT DESTINCT" oder einer "WHERE"-Clausel die ähnlichen Datensätze von den benötigten zu filtern.
~Arano
Moin,
in dem Fall kann ich dir ehrlich gesagt nur eines empfehlen: Grundlagen von Datenbanken zu lernen (Aufbau und wie man nen Tabellen-Design aufstellt)
Ich hätte das oben schonmal in 3 Tabellen aufgeteilt:
a) Abteilungen
ID Abteilungsname
1 EDV
2 GL
3 Kaffee-Kocher und Eierkrauler
b) Betrieb
ID Firmenname Firmenanschrift...
1 Musterfirma .....
2 XYZ .....
und c)
Person
ID Name Abteilung Betrieb
1 Mike 1 1
2 Hans 1 1
3 Gott 2 1
4 Mr. T 3 1
Warum das ganze?
a) Sind alle Abfragen die ich mache dadurch deutlich schneller.
b) Ich kann auch ohne Probleme eine Abfrage generieren "Liste mir alle User auf die in der EDV arbeiten" - ohne große String-Vergleiche zu fahren!
c) Und das beste: Ich kann einen neuen User per Drop-Downs anlegen - ohne das ich mit Tippfehlern rechnen muss... (Stell dir mal vor du hättest eine Daimler Chrysler Holding Limited Coorperation und 10 Leute die Daten in dein System hacken... Na, wieviele Schreibweisen wirst du wohl finden?)
Und zum Thema "Name kommt mehrmals vor wenn er mehrere Praktikas gemacht hat": GANZ SCHLECHT! Hier würde sich dann eine weitere Tabelle anbieten ->
UserID AbteilungsID DatumVon DatumBis
(als Beispiel). Denn so kann man genau sehen wo eine Person schon war usw... Ist es dieselbe Person mit 2 User-IDs so sind das zwei völlig verschiedene Personen. Wie erkennst du später ob die Person "Uwe Meyer" bereits ein Praktikum in der EDV gemacht hat - wenn es im Betrieb ggf. mal 2 Uwe Meyer gibt? Welcher war nun dort?
in dem Fall kann ich dir ehrlich gesagt nur eines empfehlen: Grundlagen von Datenbanken zu lernen (Aufbau und wie man nen Tabellen-Design aufstellt)
Ich hätte das oben schonmal in 3 Tabellen aufgeteilt:
a) Abteilungen
ID Abteilungsname
1 EDV
2 GL
3 Kaffee-Kocher und Eierkrauler
b) Betrieb
ID Firmenname Firmenanschrift...
1 Musterfirma .....
2 XYZ .....
und c)
Person
ID Name Abteilung Betrieb
1 Mike 1 1
2 Hans 1 1
3 Gott 2 1
4 Mr. T 3 1
Warum das ganze?
a) Sind alle Abfragen die ich mache dadurch deutlich schneller.
b) Ich kann auch ohne Probleme eine Abfrage generieren "Liste mir alle User auf die in der EDV arbeiten" - ohne große String-Vergleiche zu fahren!
c) Und das beste: Ich kann einen neuen User per Drop-Downs anlegen - ohne das ich mit Tippfehlern rechnen muss... (Stell dir mal vor du hättest eine Daimler Chrysler Holding Limited Coorperation und 10 Leute die Daten in dein System hacken... Na, wieviele Schreibweisen wirst du wohl finden?)
Und zum Thema "Name kommt mehrmals vor wenn er mehrere Praktikas gemacht hat": GANZ SCHLECHT! Hier würde sich dann eine weitere Tabelle anbieten ->
UserID AbteilungsID DatumVon DatumBis
(als Beispiel). Denn so kann man genau sehen wo eine Person schon war usw... Ist es dieselbe Person mit 2 User-IDs so sind das zwei völlig verschiedene Personen. Wie erkennst du später ob die Person "Uwe Meyer" bereits ein Praktikum in der EDV gemacht hat - wenn es im Betrieb ggf. mal 2 Uwe Meyer gibt? Welcher war nun dort?