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

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, 4530 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 ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Datenbanken
gelöst Eine Art Access, nur mit PHP und MySQL? (14)

Frage von McLion zum Thema Datenbanken ...

PHP
PHP MySQL Login (7)

Frage von Yanmai zum Thema PHP ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...