Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

PHP - Dropdown - Selektierten Text in Variable übergeben

Frage Entwicklung PHP

Mitglied: beckslevel91

beckslevel91 (Level 1) - Jetzt verbinden

01.10.2009, aktualisiert 02.10.2009, 11441 Aufrufe, 8 Kommentare

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:

01.
... 
02.
<form method="POST"> 
03.
<?php 
04.
    $i = 1; 
05.
$filterabfrage = "SELECT * FROM tabelle WHERE abteilung = '".$filter."'"." ORDER BY name"; 
06.
$result = $db->query($filterabfrage); 
07.
			if (!$result) 
08.
09.
			die('Der Query konnte nicht ausgef&uuml;hrt werden: '.$db->error); 
10.
11.
		if ($result->num_rows) 
12.
13.
		echo '<select size="1" name="namefilter" onchange=submit()>'; 
14.
		echo '<option value="0" selected>Alle</option>'; 
15.
			while ($row = $result->fetch_assoc()) 
16.
17.
 
18.
	 
19.
		echo '<option value='.($row['name']).'>'.($row['name']).'</option>'; 
20.
		 
21.
		$i=$i+1; 
22.
23.
24.
?> 
25.
</select> 
26.
</form> 
27.
...
im anderen Formular steht nun:

01.
... 
02.
if(isset($_POST["namefilter"])) 
03.
04.
$namefilter = $_POST["namefilter"]; 
05.
} else { 
06.
$namefilter = ""; 
07.
08.
...
Wenn ich einen Datensatz "Mustermann, Hans" habe dann übergibt er in $namefilter" nur "Mustermann,", woran liegt das?

Gruß,

J.R.
Mitglied: maretz
01.10.2009 um 10:03 Uhr
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
Bitte warten ..
Mitglied: beckslevel91
01.10.2009 um 10:16 Uhr
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"]
Bitte warten ..
Mitglied: Arano
01.10.2009 um 10:19 Uhr
Guten Morgen

du Hast ja um die <option> zu erzeugen folgendes in deinem Script:
01.
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:
01.
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"
01.
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
Bitte warten ..
Mitglied: beckslevel91
01.10.2009 um 10:29 Uhr
Hey,

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

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.
Bitte warten ..
Mitglied: beckslevel91
01.10.2009 um 10:31 Uhr
Nächstes Problem

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.
Bitte warten ..
Mitglied: Arano
01.10.2009 um 10:58 Uhr
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
Bitte warten ..
Mitglied: maretz
01.10.2009 um 11:15 Uhr
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?
Bitte warten ..
Mitglied: beckslevel91
01.10.2009 um 11:19 Uhr
Super, danke, mit Select Distinct hats geklappt,...


Gruß,

J.R.
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
PHP
gelöst HTML Dropdownmenü auslesen und in PHP als Variable übergeben (35)

Frage von ITFlori zum Thema PHP ...

JavaScript
Übergabe einer php-Variable an JS

Frage von Rabauke84 zum Thema JavaScript ...

PHP
gelöst PHP - Variable in anderes PHP-Skript mitgeben (3)

Frage von Jens4ever zum Thema PHP ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (17)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

DSL, VDSL
DSL-Signal bewerten (14)

Frage von SarekHL zum Thema DSL, VDSL ...