Top-Themen

Aktuelle Themen (A bis Z)

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

Datensätze aus einem Dropdown-Menü auswählen (PHP, Javascript, MySQL)

Frage Entwicklung JavaScript

Mitglied: SaschaRD

SaschaRD (Level 1) - Jetzt verbinden

03.12.2013, aktualisiert 04.12.2013, 4926 Aufrufe, 9 Kommentare, 4 Danke

Hallo zusammen,

ich bin gerade dabei mir eine kleine Informationsdatenbank für ein Spiel zusammen zu bauen. Grundkenntnisse im Umgang mit HTML, PHP, SQL und Javascript sind vorhanden. Jedoch stoße ich derzeit an ein Problem, welches ich nicht alleine gelöst bekomme.

Beschreibung:
Aus einem Dropdown-Menü können Werte ausgewählt werden (die Werte kommen aus einer MySQL Datenbank):

01.
//Auslesen der Dropdown-Werte 
02.
  function query(){ 
03.
    $reags = mysql_query("SELECT RName FROM reagenzien"); 
04.
    while($ausgabe = mysql_fetch_array ($reags)){ 
05.
    	echo '<option value="' . $ausgabe['RName'] . '">' . $ausgabe['RName'] . '</option>';
Auf der Seite habe ich dann folgenden Code:
01.
//Ausgabe der Dropwdown-Werte 
02.
<label id="reags">Reagenzie:</label> 
03.
  <select id="s_reags"> 
04.
    <option value="">Bitte auswaehlen..</option> 
05.
<?php query() ?>	 
06.
  </select>
Dieses Verfahren funktioniert einwandfrei! Ich möchte jetzt bei einem "select(Auswahl)" eines Werts aus dem Dropdown-Menü, die dazugehörigen Werte in eine Tabelle darunter anzeigen.

Fallbeispiel:
Ich wähle die Reagenzie "Knoblauch" aus dem Dropdown-Menü aus, dann möge bitte in der darunter liegenden Tabelle folgende Werte anzeigt werden:

Name Wirkung 1 Wirkung 2 Wirkung 3 Wirkung 4

Die Werte für die Wirkungen werden aus der Datenbank-Tabelle wirkungen ausgelesen.

Dazu habe ich dann ein Javascript geschrieben der bei einem "change(Wechsel)" eines Wertes aus dem Dropdown-Menü, die dazugehörigen Werte in eine Tabelle darunter ändern soll.

01.
//OnChange Funktion bei Auswahl im Dropdown-Menü (Alert-Test) 
02.
<script type="text/javascript""> 
03.
   $("#s_reags").change(function(){ 
04.
   alert("Aenderung!"); 
05.
}); 
06.
</script>
Dies funktioniert ebenfalls einwandfrei! Wenn ich jetzt jedoch Änderungen durchführe um die Daten auszulesen; funktioniert gar nichts mehr : (

01.
//OnChange Funktion bei Auswahl im Dropdown-Menü (Erweiterung) 
02.
  <div id="d_post"></div> 
03.
<script type="text/javascript"> 
04.
   $("#s_reags").change(function(){ 
05.
   var v_reags = $("s_reags").val(); 
06.
   $.post("test.php", {v_reags:v_reags}, function(data){ 
07.
      $("#d_post").html(data);  
08.
   }); 
09.
}); 
10.
</script>
01.
//Abfrage zum testen 
02.
<?php 
03.
  if($_POST["v_reags"]){ 
04.
  include_once 'connect.php'; 
05.
  $post=mysql_query("SELECT * FROM reagenzien WHERE RName ='".$_POST["v_reags"]."'"); 
06.
  while $lpost=mysql_fetch_assoc($post)){ 
07.
  echo $lpost['RName']; 
08.
09.
10.
?>
Führe ich die "POST-Funktion" wieder mit einem Alert durch, wird mir der Alert-Text angezeigt..

Hat jemand eine Ahnung? Habe die Quellcodes auf Syntaxfehler überprüft etc. kann nichts entdecken.
unter http://alchemie.funpic.de könnt ihr euch mein jetzigen Stand ansehen!

Danke im Vorraus und Gruß, Sascha
Mitglied: colinardo
LÖSUNG 03.12.2013, aktualisiert 04.12.2013
Hallo Sascha,
diese Zeile kommt mir verdächtig vor:
01.
var v_reags = $("s_reags").val(); 
denke da hast du die Raute für die ID vergessen:
01.
var v_reags = $("#s_reags").val(); 
statt dem kannst du es auch so schreiben:
var v_reags = $(this).val(); 
Grüße Uwe
Bitte warten ..
Mitglied: SaschaRD
03.12.2013, aktualisiert um 20:38 Uhr
Hallo Uwe,

vielen Dank erst einmal für deine Antwort. Habe den Vorschlag deinerseits übernommen:
var v_reags = $(this).val();

Leider erhalte ich immer noch keinen Rückgabewert
01.
  
02.
//OnChange Funktion bei Auswahl im Dropdown-Menü (Erweiterung) 
03.
  <div id="d_post"></div> 
04.
<script type="text/javascript"> 
05.
   $("#s_reags").change(function(){ 
06.
   var v_reags = $(this).val(); 
07.
   $.post("test.php", {v_reags:v_reags}, function(data){ 
08.
      $("#d_post").html(data);  
09.
   }); 
10.
}); 
11.
</script>
Für die test.php, habe ich zwei Inhalte:
01.
 <?php 
02.
echo "test"; 
03.
?>
Und einmal den Inhalt:
01.
<?php // Inhalt 2 
02.
  if($_POST["v_reags"]){ 
03.
  include_once 'connect.php'; 
04.
  $post = mysql_query("SELECT * FROM reagenzien WHERE RName='".$_POST["v_reags"]."'"); 
05.
  $lpost = mysql_fetch_assoc($post) 
06.
  echo $lpost["RName"]; 
07.
08.
?>
Führe ich den Test durch mit Inhalt 1 erhalte ich die Ausgabe "Test".
Der Code aus "Inhalt 2" gibt mir leider keinen Rückgabewert.

Ich ja die "connect.php" auf. Die sieht wie folgt aus:

01.
<?php 
02.
  include_once 'dbinfo.php'; 
03.
 
04.
  function connect(){ 
05.
    mysql_connect(DBHOST, DBUSER, DBPW) or die("Verbindungsversuch fehlgeschlagen" . mysql_error()); 
06.
    mysql_select_db(DBNAME) or die("Konnte die Datenbank nicht waehlen" . mysql_error());   
07.
08.
   
09.
  function close(){ 
10.
    mysql_close(); 
11.
?>
Muss ich ja die connect(); Funktion aufrufen! Auch wenn ich diese einfüge! Erhalte ich keinen Rückgabewert : (
Bitte warten ..
Mitglied: colinardo
LÖSUNG 03.12.2013, aktualisiert 05.12.2013
Zu aller erst schaltest du mal das Error-Reporting in deinen PHP-Dateien ein damit du auch Fehler beim Entwickeln wirklich zu Gesicht bekommst:
error_reporting(E_ALL);
dann ändere mal die Post-Variable die du an test.php sendest in einen anderen String z.B. par1
$.post("test.php", {par1:v_reags}, function(data){ 
da das v_reags ja eine Variable ist.
Entsprechend passt du dann deine Test.php an diesen Parameter an.

Außerdem fehlt der Aufruf der connect() Funktion in deiner Test.php

Grüße Uwe
Bitte warten ..
Mitglied: SaschaRD
04.12.2013 um 20:43 Uhr
Abend Uwe,

danke für die Hilfe und Informationen.

Habe das Problemchen behoben.

01.
<?php // Inhalt 2 
02.
  if($_POST["v_reags"]){ 
03.
  include_once 'connect.php'; 
04.
  $post = mysql_query("SELECT * FROM reagenzien WHERE RName='".$_POST["v_reags"]."'"); 
05.
  $lpost = mysql_fetch_assoc($post) <<<<- HIER WURDE _array verwendet! Dann klappt es auch mit dem Nachbarn =) 
06.
  echo $lpost["RName"]; 
07.
08.
?>
Was dann wie folgt aussieht:
01.
<?php 
02.
	if($_POST["v_reags"]){ 
03.
		$post = mysql_query("SELECT * FROM reagenzien WHERE RName='".$_POST["v_reags"]."'"); 
04.
		while($lpost = mysql_fetch_array($post)){ 
05.
			echo $lpost['RName']; 
06.
07.
	}   
08.
?>
Die Error-Console zeigt mir immer, dass das es ein Fehler in der Zeile "while....." gab.

Kaum ist man einen Schritt weiter, hängt man mit nicht genügend Know-How auch schon wieder
Den Code habe ich um einige Zeile erweitert bzw. geändert. Zurzeit werden die gewünschten Daten aus der Datenbank ausgelesen und bei einem Wechsel im Dropdown-Menü aktualisiert.
01.
	if($_POST["v_reags"]){ 
02.
		$post = mysql_query("SELECT * FROM reagenzien WHERE RName='".$_POST["v_reags"]."'"); 
03.
		while($lpost = mysql_fetch_array($post)){ 
04.
			echo "<tr>"; 
05.
					echo "<td>".$lpost['RName']."</td>"; 
06.
					echo "<td>".$lpost['RWirkung1']."</td>"; 
07.
					echo "<td>".$lpost['RWirkung2']."</td>"; 
08.
					echo "<td>".$lpost['RWirkung3']."</td>"; 
09.
					echo "<td>".$lpost['RWirkung4']."</td>"; 
10.
			echo "</tr>"; 
11.
12.
	}   
13.
?>
Ist es möglich die mir ausgegebenen "RWirkungs"-Werte (Fremdschlüssel "WID") in den "WName" umzuwandeln?
Habe es über SQL versucht, da erhalte ich aber anstatt einer Ausgabe eine Multi-Ausgabe!
Hatte dazu folgendes Statement geschrieben:
01.
	if($_POST["v_reags"]){ 
02.
		$post = mysql_query("SELECT r.RName as Name,a.Wirkung1,b.Wirkung2,c.Wirkung3,d.Wirkung4 FROM reagenzien r, 
03.
			(SELECT r.RName,w.WName as Wirkung1 FROM reagenzien r, wirkungen w WHERE r.RWirkung1=w.WID) a, 
04.
			(SELECT r.RName,w.WName as Wirkung2 FROM reagenzien r, wirkungen w WHERE r.RWirkung2=w.WID) b, 
05.
			(SELECT r.RName,w.WName as Wirkung3 FROM reagenzien r, wirkungen w WHERE r.RWirkung3=w.WID) c, 
06.
			(SELECT r.RName,w.WName as Wirkung4 FROM reagenzien r, wirkungen w WHERE r.RWirkung4=w.WID) d 
07.
				WHERE r.RName='".$_POST["v_reags"]."'"); 
08.
		while($lpost = mysql_fetch_array($post)){ 
09.
			echo $lpost['Name']; 
10.
			echo $lpost['Wirkung1']; 
11.
			echo $lpost['Wirkung2']; 
12.
			echo $lpost['Wirkung3']; 
13.
			echo $lpost['Wirkung4']; 
14.
15.
	}
Danke im Vorraus!
Bitte warten ..
Mitglied: colinardo
LÖSUNG 04.12.2013, aktualisiert 05.12.2013
verstehe nicht was du meinst, ich kenne deinen Tabellenaufbau nicht. Um mehrere Tabellen kombiniert abzufragen, machst du dies mit dem SQL Befehl JOIN
Bitte warten ..
Mitglied: Biber
LÖSUNG 04.12.2013, aktualisiert 05.12.2013
Moin SaschaRD,

ich möchte jetzt eigentlich weder über dein "Danke im Vorraus!" noch über deine Tabellenstruktur meditieren, auch wenn es mir schwerfällt.

Dein Statement sollte eher so ausssehen:
01.
$post = mysql_query("SELECT r.RName as Name 
02.
               , a.WName as Wirkung1 
03.
               , b.WName as Wirkung2 
04.
               , c.WName as Wirkung3 
05.
               , d.WName as Wirkung4 
06.
      FROM reagenzien r, wirkungen a, wirkungen b 
07.
           , wirkungen c, wirkungen d  
08.
     Where r.Wirkung1=a.WID, r.Wirkung2=b.WID 
09.
             , r.Wirkung3=c.WID, r.Wirkung4=d.WID 
10.
    AND r.RName='".$_POST["v_reags"]."'"); 
... was auch in endlicher Zeit ein Ergebnis liefert, sofern
a) du nur weniger Wirkungen in deiner "Wirkungen"-Tabelle hast als meine Ex-Schwiegermutti Haare auf der Brust
b) auch in alle 4 "reagenzien.WirkungN".Feldern auch gültige WID-Werte stehen.

Andernfalls (also z.B bei nur zwei statt vier angegebenen "Wirkungen") würde der ganze Resutset-Satz wegfallen, da 4 von 4 Wirkungen erforderlich sind.

-> Wahrscheinlich musst du also anstatt eines INNER JOINs einen LEFT JOIN (Wirkung1, 2, 3 , 4 KANN da sein, muss aber nicht) verwenden.

Grüße
Biber
Bitte warten ..
Mitglied: SaschaRD
05.12.2013 um 08:15 Uhr
Morgen zusammen,

zur Tabellenstruktur:
Table (reagenzien):
RID RName RWirkung 1 RWirkung 2 RWirkung 3 RWirkung 4
1 Alraunenwurzel 46 22 13 1
diese Tabelle hat 45 Datensätze.

In Table (wirkungen), sind die Wirkungen der Reagenzien festgehalten:
WID WName
1 Blindheit
etc. (insgesamt 49 Datensätze).

Wie Biber bereits richtig erkannt hat; gibt es einige Reagenzien die keinen 4ten Wirkungswert besitzen.
Werde das Ganze über LEFT JOIN versuchen!

Meine eigentliche Frage war: Wie löse ich die "WID"-Werte wieder in den "WName"-Werte auf? Zurzeit verwende ich folgende Abfrage auf der Webseite:
01.
if($_POST["v_reags"]){ 
02.
		$post = mysql_query("SELECT * FROM reagenzien WHERE RName='".$_POST["v_reags"]."'"); 
03.
		while($lpost = mysql_fetch_array($post)){ 
04.
			echo "<tr>"; 
05.
					echo "<td>".$lpost['RName']."</td>"; 
06.
					echo "<td>".$lpost['RWirkung1']."</td>"; 
07.
					echo "<td>".$lpost['RWirkung2']."</td>"; 
08.
					echo "<td>".$lpost['RWirkung3']."</td>"; 
09.
					echo "<td>".$lpost['RWirkung4']."</td>"; 
10.
			echo "</tr>"; 
11.
12.
	}   
13.
?>
Ich weiß, dass ich in diesem Statement keinen Bezug auf die Datensätze von "wirkungen" habe.

Werde mich im Laufe des Tages nochmal melden, in diesem Sinne, Danke und schönen Tag..
Mist jetzt hatte ich den Beitrag bereits aufgelöst gesetzt -.-
Bitte warten ..
Mitglied: SaschaRD
05.12.2013 um 14:57 Uhr
Hallo nochmal,

habe es Dank dem Tipp von Biber mit "LEFT JOIN" zum Laufen bekommen. Hier der Code; falls jemand sich ebenfalls so etwas bauen möchte:

01.
if($_POST["v_reags"]){ 
02.
	$post = mysql_query("SELECT RName as Name, 
03.
a.WName as Wirkung1, 
04.
 b.WName as Wirkung2, 
05.
  c.WName as Wirkung3, 
06.
  d.WName as Wirkung4 
07.
FROM reagenzien r 
08.
LEFT JOIN wirkungen a ON r.RWirkung1=a.WID 
09.
  LEFT JOIN wirkungen b ON r.RWirkung2=b.WID 
10.
    LEFT JOIN wirkungen c ON r.RWirkung3=c.WID 
11.
      LEFT JOIN wirkungen d ON r.RWirkung4=d.WID 
12.
        WHERE r.RName ='".$_POST["v_reags"]."'"); 
13.
		while($lpost = mysql_fetch_array($post)){ 
14.
			echo "<tr>"; 
15.
					echo "<td>".$lpost['Name']."</td>"; 
16.
					echo "<td>".$lpost['Wirkung1']."</td>"; 
17.
					echo "<td>".$lpost['Wirkung2']."</td>"; 
18.
					echo "<td>".$lpost['Wirkung3']."</td>"; 
19.
					echo "<td>".$lpost['Wirkung4']."</td>"; 
20.
			echo "</tr>"; 
21.
22.
	}   
23.
?>
Jetzt muss um das Ganze nur noch eine Tabelle! Und dann kann es sozusagen für die andere Ausgabe "der Tränke" dupliziert werden.

Für die Ausgabe einer Tabellenstruktur und die Formatierung(Design der Tabelle), wirft man das Ganze am besten in eine .css-Datei? Oder sollte ich es direkt mit Angeben?

Meinen herzlichen Dank! an Euch zwei für die tatkräftige Unterstützung....

Gruß, Sascha
Bitte warten ..
Mitglied: colinardo
05.12.2013, aktualisiert 06.12.2013
Hallo Sascha,
ich würde solche Daten in deinem PHP-Script nicht schon vorformatiert bzw. mit Tags an deine Seite übergeben, sondern als JSON-Formatierten String der nur die eigentlichen Daten enthält, so bleibst du flexibel was die Gestaltung angeht und es gehen auch weniger Daten über den Äther (Ist zwar bei Dir nicht viel, aber das ist besserer Programmierstil). Außerdem brauchst du dann kein zweites PHP-Script wenn du die Daten mal auf einer anderen Seite benötigst die ein anderes Aussehen hat. Die Darstellung erzeugst du dann in der Hauptseite mit jQuery und Konsorten.
Beispiel:
01.
// das assoziative Array in JSON wandeln und über den Äther schicken... 
02.
echo json_encode($lpost);
In deiner Haupt-Seite kannst du diese Daten dann wieder so in deinem POST-Callback Event in JavaScript verwenden:
01.
// JSON-String wieder zurück in ein nomales assoziatives JavaScript-Array wandeln 
02.
var arr_data = $.parseJSON(data); 
03.
var r_name = arr_data['Name']; 
04.
var w1 = arr_data['Wirkung1']; 
05.
var w2 = arr_data['Wirkung2']; 
06.
var w3 = arr_data['Wirkung3']; 
07.
var w4 = arr_data['Wirkung4'];
und dann mit JQuery die Tabelle ergänzen oder neu zusammenbauen...
Formatierung machst du dann über die Zuweisung von Klassen und einer CSS-Datei in der dann die Formatierungen stehen.

Grüße Uwe
Bitte warten ..
Ähnliche Inhalte
PHP
PHP Dropdown Menü, Werte aus DB
Frage von laladuduPHP3 Kommentare

Hi, ich hoffe jemand versteht mein Problem^^ Folgendes: Ich habe die Tabelle "Geräte" mit Geräte ID (PK) Gerätename raumID ...

Microsoft Office
Access 2013 - Nach Auswahl von Dropdown prüfen on Datensatz bereits existiert
gelöst Frage von evolutionMicrosoft Office9 Kommentare

Hallo, ich hab mal eine Frage. Ich habe eine Eingabemaske in Access. Hier gibt es unter anderem 2 Auswahlfelder ...

PHP
Javascript Menü wird nicht angezeigt
gelöst Frage von takvorianPHP5 Kommentare

Hallo zusammen, hoffe mal die Themenauswahl ist korrekt. ich soll für einen Kunden eine Webseite von einem Server auf ...

PHP
PHP-MySQL - mysqli liefert einen Datensatz zu wenig
gelöst Frage von Windows-SpielerPHP3 Kommentare

Hallo zusammen, ich habe eine einfache (und nicht normalisierte) Tabelle in MySQL mit dem Namen "elemente". In dieser befinden ...

Neue Wissensbeiträge
MikroTik RouterOS

Mikrotik - Lets Encrypt Zertifikate mit MetaROUTER Instanz auf dem Router erzeugen

Anleitung von colinardo vor 9 StundenMikroTik RouterOS4 Kommentare

Einleitung Folgende Anleitung ist aus der Lage heraus entstanden das ein Kunde auf seinem Mikrotik sein Hotspot Captive Portal ...

Sicherheit

Sicherheitslücke in HP-Druckern - Firmware-Updates stehen bereit

Information von BassFishFox vor 9 StundenSicherheit

Ein weiterer Grund, dass Drucker keinerlei Verbindung nach "auswaerts" haben sollen. Unter Verwendung spezieller Malware können Angreifer aus der ...

Administrator.de Feedback

Entwicklertagebuch: Die Startseite wurde überarbeitet

Information von admtech vor 12 StundenAdministrator.de Feedback9 Kommentare

Hallo Administrator User, mit dem Release 5.7 haben wir unsere Startseite überarbeitet und die Beiträge und Fragen voneinander getrennt. ...

Vmware

VMware Desktopprodukte sind verwundbar

Information von Penny.Cilin vor 17 StundenVmware

Die VMware-Anwendungen zum Umgang mit virtuellen Maschinen Fusion, Horizon Client und Workstation sowie die Plattform NSX sind verwundbar. Davon ...

Heiß diskutierte Inhalte
Visual Studio
Vb.net-Tool zum Erzeugen einer Outlook-E-Mail
Frage von ahstaxVisual Studio24 Kommentare

Hallo, ich möchte gerne ein vb.net-Tool schreiben, das am Ende eine Outlook-E-Mail erzeugt. Grundsätzlich ist mir klar, wie das ...

Windows Server
RDP macht Server schneller???
Frage von JaniDJWindows Server16 Kommentare

Hallo Community, wir betrieben seit geraumer Zeit diverse virtuelle Maschinen und Server mit Windows Server 2012. Leider haben wir ...

Windows Netzwerk
Netzwerk Neustrukturierung
Frage von IT-DreamerWindows Netzwerk16 Kommentare

Hallo verehrte Community und Admins, bei uns im Haus steht eine Neustrukturierung an. Dafür benötige ich von euch ein ...

Windows 10
Windows 10 dunkler Bildschirm nach Umfallen
Frage von AkcentWindows 1015 Kommentare

Hallo, habe hier einen Windows 10 Rechner der von einem User umgefallen wurde (Beine übers Knie, an den PC ...