beckslevel91
Goto Top

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:

...
<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&uuml;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.

Content-ID: 126199

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

Ausgedruckt am: 22.11.2024 um 01:11 Uhr

maretz
maretz 01.10.2009 um 10:03:54 Uhr
Goto Top
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
beckslevel91
beckslevel91 01.10.2009 um 10:16:01 Uhr
Goto Top
Hey,

ja ich verstehe was Du meinst, aber das ganze ist wie folgt gegliedert:

ID Name Abteilung Betrieb
1 Mike EDV Musterbetrieb
2 Hans EDV Musterfirma
3 Mike EDV Musterfirma
...

Es geht nämlich um Praktikumsdaten von Klienten und ich will das eben erst nach Abteilung und dann nach Name filtern. Also kommt ein Name (von der gleichen Person) häufig mehrmals mit unterschiedlicher ID vor, wenn er mehrere Praktikas gemacht hat, verstehste?

Deshalb funkioniert das leider nur mit Namen statt ID.

Weißt Du, weshalb er den Namen nicht vollständig ausliest/übergibt? Die Namen werden nämlich so eingetragen: "Mustermann, Mike" und wenn ich nach dem Filtervorgang die "$namefilter" mit echo ausgebe steht da: "Mustermann," also denke ich mal es liegt am Leerschritt, aber wie kann ich das ändern, dass der gesamte Name angezeigt wird?
Mit "htmlspecialchars($row['name'])" funktioniert es nicht..

Gruß,

J.R.


PS: Im Dropdown werden die Namen vollständig angezeigt, nur eben nicht nach der Übergabe mit $_POST["namefilter"]
Arano
Arano 01.10.2009 um 10:19:13 Uhr
Goto Top
Guten Morgen face-smile

du Hast ja um die <option> zu erzeugen folgendes in deinem Script:
echo '<option value='.($row['name']).'>'.($row['name']).'</option>';  
Wenn wir die Variable durch einen festen Text ersetzen würden, z.B. "Mustermann, Hans" kommt das dabei raus:
echo '<option value=Mustermann, Hans>'.($row['name']).'</option>';  
Siehst du es schon ?
Das wird folgend als Attribut=Werte erkannt:
  1. "value=Mustermann," - "value" = Attribut; "Mustermann," = Als Wert von Value
  2. "Hans" - "Hans" = Attribut
Das Leerzeichen dient hier als Trennzeichen zwischen den Attribut-Werte-Parren. Um dennoch Leerzeichen als Wert verwenden zu können, umschließt man dienen mit Anführungszeichen um so die "Recihweite" des Wertes zu bestimmten:
value="Mustermann, Hans"
echo '<option value="'.($row['name']).'">'.($row['name']).'</option>';  
Um solche Fehler zu vermeiden und einen einheitlichen Schreibstiel zu folgen, sollten die Werte einfach immer von Anführungszeichen umschlossen werden ;)


~Arano
beckslevel91
beckslevel91 01.10.2009 um 10:29:08 Uhr
Goto Top
Hey,

vielen Dank, ich weiß natürlich was Du meinst.. face-smile

hat funktioniert.. das mit diesen Hochkommas ist mitunter sehr unübersichtlich, weshalb ich das manchmal vergesse..

jetzt läuft alles.. VIELEN DANK

=)

Gruß,

J.R.
beckslevel91
beckslevel91 01.10.2009 um 10:31:58 Uhr
Goto Top
Nächstes Problem face-wink

Mir werden Datensätze (hier: namen) die 2 Mal vorkommen auch doppelt ins Dropdownmenü geschrieben. Er filtert zwar richtig, aber wäre das i-wie möglich jeden vorhandenen Namen nur 1 mal ins Dropdownmenü zu schreiben?

Gruß,

J.R.
Arano
Arano 01.10.2009 um 10:58:40 Uhr
Goto Top
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 !?

  • 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
maretz
maretz 01.10.2009 um 11:15:10 Uhr
Goto Top
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?
beckslevel91
beckslevel91 01.10.2009 um 11:19:16 Uhr
Goto Top
Super, danke, mit Select Distinct hats geklappt,...


Gruß,

J.R.