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)

Mitglied: SaschaRD

SaschaRD (Level 1) - Jetzt verbinden

03.12.2013, aktualisiert 04.12.2013, 6124 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):

//Auslesen der Dropdown-Werte
  function query(){
    $reags = mysql_query("SELECT RName FROM reagenzien");
    while($ausgabe = mysql_fetch_array ($reags)){
    	echo '<option value="' . $ausgabe['RName'] . '">' . $ausgabe['RName'] . '</option>';
Auf der Seite habe ich dann folgenden Code:
//Ausgabe der Dropwdown-Werte
<label id="reags">Reagenzie:</label>
  <select id="s_reags">
    <option value="">Bitte auswaehlen..</option>
<?php query() ?>	
  </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.

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

//OnChange Funktion bei Auswahl im Dropdown-Menü (Erweiterung)
  <div id="d_post"></div>
<script type="text/javascript">
   $("#s_reags").change(function(){
   var v_reags = $("s_reags").val();
   $.post("test.php", {v_reags:v_reags}, function(data){
      $("#d_post").html(data); 
   });
});
</script>
//Abfrage zum testen
<?php
  if($_POST["v_reags"]){
  include_once 'connect.php';
  $post=mysql_query("SELECT * FROM reagenzien WHERE RName ='".$_POST["v_reags"]."'");
  while $lpost=mysql_fetch_assoc($post)){
  echo $lpost['RName'];
  }
}
?>
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:
var v_reags = $("s_reags").val(); 
denke da hast du die Raute für die ID vergessen:
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
 
//OnChange Funktion bei Auswahl im Dropdown-Menü (Erweiterung)
  <div id="d_post"></div>
<script type="text/javascript">
   $("#s_reags").change(function(){
   var v_reags = $(this).val();
   $.post("test.php", {v_reags:v_reags}, function(data){
      $("#d_post").html(data); 
   });
});
</script>
Für die test.php, habe ich zwei Inhalte:
 <?php
echo "test";
?>
Und einmal den Inhalt:
<?php // Inhalt 2
  if($_POST["v_reags"]){
  include_once 'connect.php';
  $post = mysql_query("SELECT * FROM reagenzien WHERE RName='".$_POST["v_reags"]."'");
  $lpost = mysql_fetch_assoc($post)
  echo $lpost["RName"];
}
?>
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:

<?php
  include_once 'dbinfo.php';

  function connect(){
    mysql_connect(DBHOST, DBUSER, DBPW) or die("Verbindungsversuch fehlgeschlagen" . mysql_error());
    mysql_select_db(DBNAME) or die("Konnte die Datenbank nicht waehlen" . mysql_error());  
  }
  
  function close(){
    mysql_close();
?>
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.

<?php // Inhalt 2
  if($_POST["v_reags"]){
  include_once 'connect.php';
  $post = mysql_query("SELECT * FROM reagenzien WHERE RName='".$_POST["v_reags"]."'");
  $lpost = mysql_fetch_assoc($post) <<<<- HIER WURDE _array verwendet! Dann klappt es auch mit dem Nachbarn =)
  echo $lpost["RName"];
}
?>
Was dann wie folgt aussieht:
<?php
	if($_POST["v_reags"]){
		$post = mysql_query("SELECT * FROM reagenzien WHERE RName='".$_POST["v_reags"]."'");
		while($lpost = mysql_fetch_array($post)){
			echo $lpost['RName'];
		}
	}  
?>
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.
	if($_POST["v_reags"]){
		$post = mysql_query("SELECT * FROM reagenzien WHERE RName='".$_POST["v_reags"]."'");
		while($lpost = mysql_fetch_array($post)){
			echo "<tr>";
					echo "<td>".$lpost['RName']."</td>";
					echo "<td>".$lpost['RWirkung1']."</td>";
					echo "<td>".$lpost['RWirkung2']."</td>";
					echo "<td>".$lpost['RWirkung3']."</td>";
					echo "<td>".$lpost['RWirkung4']."</td>";
			echo "</tr>";
		}
	}  
?>
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:
	if($_POST["v_reags"]){
		$post = mysql_query("SELECT r.RName as Name,a.Wirkung1,b.Wirkung2,c.Wirkung3,d.Wirkung4 FROM reagenzien r,
			(SELECT r.RName,w.WName as Wirkung1 FROM reagenzien r, wirkungen w WHERE r.RWirkung1=w.WID) a,
			(SELECT r.RName,w.WName as Wirkung2 FROM reagenzien r, wirkungen w WHERE r.RWirkung2=w.WID) b,
			(SELECT r.RName,w.WName as Wirkung3 FROM reagenzien r, wirkungen w WHERE r.RWirkung3=w.WID) c,
			(SELECT r.RName,w.WName as Wirkung4 FROM reagenzien r, wirkungen w WHERE r.RWirkung4=w.WID) d
				WHERE r.RName='".$_POST["v_reags"]."'");
		while($lpost = mysql_fetch_array($post)){
			echo $lpost['Name'];
			echo $lpost['Wirkung1'];
			echo $lpost['Wirkung2'];
			echo $lpost['Wirkung3'];
			echo $lpost['Wirkung4'];
		}
	}
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:
$post = mysql_query("SELECT r.RName as Name
               , a.WName as Wirkung1
               , b.WName as Wirkung2
               , c.WName as Wirkung3
               , d.WName as Wirkung4
      FROM reagenzien r, wirkungen a, wirkungen b
           , wirkungen c, wirkungen d 
     Where r.Wirkung1=a.WID, r.Wirkung2=b.WID
             , r.Wirkung3=c.WID, r.Wirkung4=d.WID
    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:
if($_POST["v_reags"]){
		$post = mysql_query("SELECT * FROM reagenzien WHERE RName='".$_POST["v_reags"]."'");
		while($lpost = mysql_fetch_array($post)){
			echo "<tr>";
					echo "<td>".$lpost['RName']."</td>";
					echo "<td>".$lpost['RWirkung1']."</td>";
					echo "<td>".$lpost['RWirkung2']."</td>";
					echo "<td>".$lpost['RWirkung3']."</td>";
					echo "<td>".$lpost['RWirkung4']."</td>";
			echo "</tr>";
		}
	}  
?>
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:

if($_POST["v_reags"]){
	$post = mysql_query("SELECT RName as Name,
a.WName as Wirkung1,
 b.WName as Wirkung2,
  c.WName as Wirkung3,
  d.WName as Wirkung4
FROM reagenzien r
LEFT JOIN wirkungen a ON r.RWirkung1=a.WID
  LEFT JOIN wirkungen b ON r.RWirkung2=b.WID
    LEFT JOIN wirkungen c ON r.RWirkung3=c.WID
      LEFT JOIN wirkungen d ON r.RWirkung4=d.WID
        WHERE r.RName ='".$_POST["v_reags"]."'");
		while($lpost = mysql_fetch_array($post)){
			echo "<tr>";
					echo "<td>".$lpost['Name']."</td>";
					echo "<td>".$lpost['Wirkung1']."</td>";
					echo "<td>".$lpost['Wirkung2']."</td>";
					echo "<td>".$lpost['Wirkung3']."</td>";
					echo "<td>".$lpost['Wirkung4']."</td>";
			echo "</tr>";
		}
	}  
?>
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:
// das assoziative Array in JSON wandeln und über den Äther schicken...
echo json_encode($lpost);
In deiner Haupt-Seite kannst du diese Daten dann wieder so in deinem POST-Callback Event in JavaScript verwenden:
// JSON-String wieder zurück in ein nomales assoziatives JavaScript-Array wandeln
var arr_data = $.parseJSON(data);
var r_name = arr_data['Name'];
var w1 = arr_data['Wirkung1'];
var w2 = arr_data['Wirkung2'];
var w3 = arr_data['Wirkung3'];
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 - MySQL mehrere Aktionen für einen Datensatz

gelöst Frage von DantarosPHP4 Kommentare

Hallo zusammen, ich habe mal wieder ein Problem mit PHP und SQL. Über einen Klick auf einen Link wird ...

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 ...

PHP

PHP - MySQL Datensatz in eine andere Tabelle kopieren und löschen

gelöst Frage von DantarosPHP11 Kommentare

Hallo zusammen, ich habe aktuell ein Problem. Ich habe eine Tabelle die über eine Eingabemaske von Usern gefüllt wird. ...

Windows Systemdateien

CMD Menu mit automatischer auswahl nach 10 Sekunden

Frage von VidcrafterWindows Systemdateien1 Kommentar

Hallo, ich würde gerne in CMD ein Menu erstellen. z.B.: so klappt alles nun will ich fals keine Eingabe ...

Neue Wissensbeiträge
Sicherheit
0-day Schwachstelle im Internet Explorer
Information von kgborn vor 1 TagSicherheit

In Microsofts Internet Explorer gibt es eine 0-day Schwachstelle in der Scripting Engine, die faktisch alle Browser- und Windows-Versionen ...

Internet

Internet-Speedtest Automatisieren via Befehlszeile, cmd, Bash (Windows, Linux, FreeBSD, Mac)

Tipp von anteNope vor 1 TagInternet3 Kommentare

Also das hier ist irgendwie an mir vorbeigegangen. Einfacher geht es schlicht nicht mehr. Speedtest.cmd Via Aufgabenplanung stündlich oder ...

Administrator.de Feedback

Entwicklertagebuch: Codeblöcke auf unseren Seiten

Information von admtech vor 2 TagenAdministrator.de Feedback8 Kommentare

Hallo Administrator User, Unsere Codeblöcke werden ab sofort anders dargestellt. Die Codeblöcke können nun direkt per Copy&Paste kopiert werden. ...

Humor (lol)
Internet - auch 2020 noch Neuland ?
Erfahrungsbericht von Henere vor 2 TagenHumor (lol)6 Kommentare

Heute eine Mail der Schule meiner Tochter bekommen. Blabla Umweltschutz bla bla siehe Anhang. Dumm nur: Da hab ich ...

Heiß diskutierte Inhalte
Sicherheits-Tools
Passwort Manager mit AD anbindung und dt. Oberfläche
gelöst Frage von sani007Sicherheits-Tools9 Kommentare

Hallo Ich suche kostengünstigen Passwort Manager mit AD-Anbindung mit weboberfläche. Am besten mit VM-Image zur schnellen Installation. Wenn es ...

Webbrowser
Kann Firefox von Google Suche nicht befreien
Frage von RG2525Webbrowser9 Kommentare

Hallo, Das passiert jetzt in letzter Zeit auf mehreren Computern von mir, dass die Google Suche sich nicht ausschalten ...

Windows Userverwaltung
Laptop WAKE ON LAN problem
Frage von WhatEver007Windows Userverwaltung8 Kommentare

Hallo, wie oben beschrieben geht es um wake on lan. Wenn ich auf meinen Netzwerkadapter gehe sehe ich keine ...

Peripheriegeräte
Datenstrom Drucker
Frage von FragefuchsPeripheriegeräte8 Kommentare

Moin, kann mir jemand sagen, wie Computer Daten an einen Drucker weitergeben? Gibt es dafür ein Protokoll oder Format? ...