Datensätze aus einem Dropdown-Menü auswählen (PHP, Javascript, MySQL)
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):
<code type="">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:
<code type="">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:
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.
<code type="">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 : (
<code type="">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>
<code type="">//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
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):
<code type="">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:
<code type="">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.
<code type="">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 : (
<code type="">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>
<code type="">//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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 223523
Url: https://administrator.de/contentid/223523
Ausgedruckt am: 22.11.2024 um 06:11 Uhr
9 Kommentare
Neuester Kommentar
Zu aller erst schaltest du mal das Error-Reporting in deinen PHP-Dateien ein damit du auch Fehler beim Entwickeln wirklich zu Gesicht bekommst:
dann ändere mal die Post-Variable die du an test.php sendest in einen anderen String z.B. par1
da das
Entsprechend passt du dann deine Test.php an diesen Parameter an.
Außerdem fehlt der Aufruf der
Grüße Uwe
error_reporting(E_ALL);
$.post("test.php", {par1:v_reags}, function(data){
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.phpGrüße Uwe
verstehe nicht was du meinst, ich kenne deinen Tabellenaufbau nicht. Um mehrere Tabellen kombiniert abzufragen, machst du dies mit dem SQL Befehl JOIN
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:
... 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
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
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.
In deiner Haupt-Seite kannst du diese Daten dann wieder so in deinem POST-Callback Event in JavaScript verwenden:
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
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);
// 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'];
Formatierung machst du dann über die Zuweisung von Klassen und einer CSS-Datei in der dann die Formatierungen stehen.
Grüße Uwe