Element mit PHP auslesen
dichti
- php
Hallo Leute,
Hab nur ne kleine Frage:
Wie kann ich den Wert einer <option value="X"> aus einem <select name="Y"> mit PHP auslesen??
So dass ich den Wert in einer Abrage brauchen kann? Damit er mir nur die Datensätze ausgibt welche in einem Feld1 den Wert von X haben?
Danke für die Mühe schon im Voraus.
Gruss Dichti
Wie kann ich den Wert einer <option value="X"> aus einem <select name="Y"> mit PHP auslesen??
Du bekommst ihn, wie alle Formulardaten, nach dem Absenden des dazugehörigen Formulars in $_POST (oder $_GET) übermittelt. Rufe in der Zielseite phpinfo(INFO_VARIABLES) auf, um Dir eine Übersicht über die Werte zu verschaffen.
Wie kann ich den Wert einer <option value="X"> aus einem <select name="Y"> mit PHP auslesen??
Du bekommst ihn, wie alle Formulardaten, nach dem Absenden des dazugehörigen Formulars in $_POST (oder $_GET) übermittelt. Rufe in der Zielseite phpinfo(INFO_VARIABLES) auf, um Dir eine Übersicht über die Werte zu verschaffen.
Das ist mir klar. Aber wenn ich die schon im ersten Blatt (auf dem das Formular sich befindet) auslesen will.
Das mit $_POST wird dann in einem neuen Blatt ausgewertet und in die DB geschrieben.
Gruss Dichti
Hallo,
Das ist mir klar. Aber wenn ich die schon im ersten Blatt (auf dem das Formular sich befindet) auslesen will.
Das mit $_POST wird dann in einem neuen Blatt ausgewertet und in die DB geschrieben.
dann benutze JavaScript oder Ajax. Eine Serverseitige Programmiersprache wie PHP kann auf der Clientseite nichts mehr auswerten.
Grüße, Matze
Wie kann ich den Wert einer <option value="X"> aus einem <select name="Y"> mit PHP auslesen??
Du bekommst ihn, wie alle Formulardaten, nach dem Absenden des dazugehörigen Formulars in $_POST (oder $_GET) übermittelt.
Das ist mir klar. Aber wenn ich die schon im ersten Blatt (auf dem das Formular sich befindet) auslesen will.
PHP läuft im Server, die HTML-Seite befindet sich im Browser. Dazwischen befindet sich mit Start des PHP-Skriptes quasi eine Einbahnstraße vom Server zum Browser, zudem ist das PHP-Skript spätestens dann beendet, wenn die Seite im Browser fertiggestellt ist. Grundsätzlich kannst Du also erstens keine Daten aus einer stehenden Seite an den Server schicken, zweitens befindet sich auf dem Server nichts mehr, das die Daten empfangen würde.
Wenn Du auf Daten zugreifen willst, die sich im Browser befinden, wirst Du nicht drum herum kommen, eine browserseitige Sprache zu benutzen, namentlich Javascript. Möchtest Du Daten aus der Seite an den Server schicken, ohne die Seite neu zu laden, kannst Du dies, indem Du mit Javascript quasi ein separates, unabhängiges Formular im Hintergrund abschickst; diese Technik läuft unter dem Namen AJAX (kurz für: Asynchrones Javascript und (And) XML). Das macht aber im Großen und Ganzen nur Sinn, wenn daraufhin auch etwas in der Seite geändert wird, ansonsten ist der althergebrachte Formularversand der schlaueste Weg.
Wenn Du Dein Vorhaben genauer beschreibst, lässt sich vielleicht eine Lösung finden.
Hallo Hork am Vork,
Danke für deine Info, ist natürlich sehr hilfreich zu wissen. Man wüsste es auch schon, aber der Gedanke ist im Hinterkämmerchen verloren gegangen.
Wenn Du Dein Vorhaben genauer beschreibst, lässt sich vielleicht eine Lösung finden.
Natürlich kann ich dir das schildern. ich versuchs mal, mit der Formatierung hier han ich ein bisschen Mühe, wäre toll wenn es sowas wie ein "Code-Fenster" gibt oder ich wüsste wie man das macht.
Aber vorerst mal hier.:
Zwei Selects. Die erste holt die Hersteller. Die zweite soll nur die Produkte anzeigen, welche die BrandID(tabelle: brands) im Feld ProdBrandIDFS(tabelle: products) haben.
Code:
<tr id="verkaufproductbrand">
<td>Produkt:</td>
<td>
Produktreihe:<br>
<select name="service_form_verkaufprodbrand" onChange="prodname()">
<?php
echo "<option value="0">---- Auswahl ----</option>";
$sql = "SELECT BrandName FROM brands";
$result = mysql_query($sql) OR die(mysql_error);
while($row = mysql_fetch_assoc($result)){
$BrandID = $row["BrandID"];
$BrandName = $row["BrandName"];
echo "<option value="".$BrandID."">".$BrandName."</option>";
}
?>
</select>
</tr>
<tr id="verkaufproductname">
<td> </td>
<td>
Produktname:<br>
<select name="service_form_verkaufprodname">
<?php
$select = 3;
$sql = "SELECT * FROM products WHERE ProdBrandIDFS = '".$select."'";
$result = mysql_query($sql) OR die(mysql_error);
while($row = mysql_fetch_assoc($result)){
$ProdID = $row["ProdID"];
$ProdName = $row["ProdName"];
echo "<option value="".$ProdID."">".$ProdName."</option>";
}
?>
</select>
</td>
</tr>
Soviel dazu was ich dir erklären kann zu meinem Problem. Danke Dir!
Gruss Dichti
Hallo Dichti,
Zwei Selects. Die erste holt die Hersteller. Die zweite soll nur die Produkte
anzeigen, welche die BrandID(tabelle: brands) im Feld ProdBrandIDFS(tabelle: products) haben.
alles klar,
das waere IMHO der typische AJAX-Anwendungsfall.
Hier ein einfaches Beispiel, welches Du fuer Deinen Zweck erweitern kannst.
Gruss Norbert
Hi Norbert
Hier ein einfaches Beispiel, welches Du fuer Deinen Zweck erweitern kannst.
Das habe ich soweit mal probiert. Hab das script auch begriffen, aber versuche verzweifelt den Link im Beispiel als select zu nutzen, aber es geht net..
Habe mit onClick und onChange im <select> probiert. Hab die id="select" auch in der <option> probiert.. Läuft net. Schade.
Vielleicht ein Einfall?
(HTML)PHP-File:
<tr id="verkaufproductbrand">
<td>Produkt:</td>
<td>
Produktreihe:<br>
<select name="service_form_verkaufprodbrand" id="select">
<?php
echo "<option value=\"0\">---- Auswahl ----</option>";
$sql = "SELECT BrandName FROM brands";
$result = mysql_query($sql) OR die(mysql_error);
while($row = mysql_fetch_assoc($result)){
$BrandID = $row["BrandID"];
$BrandName = $row["BrandName"];
echo "<option value=\"".$BrandID."\">".$BrandName."</option>";
}
?>
</select>
</tr>
<tr >
<td>Ergebnis:</td>
<td>
<div id="ergebnis" style="color:#000"></div>
</td>
</tr>
Javascript:
function $(id) {
return document.getElementById(id);
}
window.onload = function() {
$('select').onchange = function() {
getHttpRequest();
return false;
}
}
function getHttpRequest() {
var xmlhttp = null;
// Mozilla
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
}
// IE
else if (window.ActiveXObject) {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET", 'includes/content/services/httprequest.php', true);
xmlhttp.onreadystatechange = function() {
if(xmlhttp.readyState != 4) {
$('insert').innerHTML = 'Seite wird geladen ...';
}
if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
$('insert').innerHTML = xmlhttp.responseText;
}
}
xmlhttp.send(null);
}
Gruss und Danke
Dichti
Hi Norbert
Das hat sich gerade eben geklärt... zu viel an den IDs gefummelt und dann stimmen sie nicht mehr überein..
Danke
Hi Norbert
Das hat sich gerade eben geklärt... zu viel an den IDs gefummelt und dann stimmen sie nicht mehr überein..
Danke
Jetzt nur eine andere Frage (Fragen über Fragen.. :D):
Ich lese jetzt das 'httprequest.php' ein.
Darin steht:
<?php
// DB - Connection
include '../../../script/sessionhelpers.inc.php';
echo "Produktname:<br>";
echo "<select name=\"service_form_verkaufprodname\">";
// Selecht soll den Wert vom ausgewählten Select im HTML File auslesen
$select = 2;
$sql = "SELECT * FROM products WHERE ProdBrandIDFS = '".$select."'";
$result = mysql_query($sql) OR die(mysql_error);
while($row = mysql_fetch_assoc($result)){
$ProdID = $row["ProdID"];
$ProdName = $row["ProdName"];
echo "<option value=\"".$ProdID."\">".$ProdName."</option>";
}
echo "</select>";
?>
Damit ich dem '$select' den Wert des 1. Selects geben kann, was brauche ich da und ist das überhaupt möglich?
Gruss und Danke
Dichti
<?php
// DB - Connection
include '../../../script/sessionhelpers.inc.php';echo "Produktname:<br>";
echo "<select name="service_form_verkaufprodname">";
// Selecht soll den Wert vom ausgewählten Select im HTML File auslesen
$select = 2;
$sql = "SELECT * FROM products WHERE ProdBrandIDFS = '".$select."'";
$result = mysql_query($sql) OR die(mysql_error);
while($row = mysql_fetch_assoc($result)){
$ProdID = $row["ProdID"];
$ProdName = $row["ProdName"];echo "<option value="".$ProdID."">".$ProdName."</option>";
}
echo "</select>";
?>
>
> Damit ich dem '$select' den Wert des 1. Selects geben kann, was brauche ich da und ist das überhaupt möglich?
>
> Gruss und Danke
> Dichti
Ich hab mal ein versuch gestartet mit:
~~~javascript
xmlhttp.open("GET", "includes/content/services/httprequest.php?brandid=1", true);
Das geht soweit. Kann ich nun die '1' bei brandid= dynamisch holen, indem ich den Wert des ersten <select> auslese?
Gruss Dichti
Zwei Selects. Die erste holt die Hersteller. Die zweite soll nur die Produkte anzeigen, welche die BrandID(tabelle: brands) im Feld ProdBrandIDFS(tabelle: products) haben.
<select name="service_form_verkaufprodbrand" onChange="prodname()">
<?php
echo "<option value="0">---- Auswahl ----</option>";
$sql = "SELECT BrandName FROM brands";
$result = mysql_query($sql) OR die(mysql_error);
while($row = mysql_fetch_assoc($result)){
$BrandID = $row["BrandID"];
$BrandName = $row["BrandName"];
echo "<option value="".$BrandID."">".$BrandName."</option>";
}
?>
</select>
<select name="service_form_verkaufprodname">
<?php
$select = 3;
$sql = "SELECT * FROM products WHERE ProdBrandIDFS = '".$select."'";
$result = mysql_query($sql) OR die(mysql_error);
while($row = mysql_fetch_assoc($result)){
$ProdID = $row["ProdID"];
$ProdName = $row["ProdName"];
echo "<option value="".$ProdID."">".$ProdName."</option>";
}
?>
Ajax wäre wie auch von Norbert schon geschrieben eine Variante, um das zu lösen. Die zweite wäre, von vornherein sämtliche Daten aus der Tabelle products auszulesen, aber anstatt in das <select>-Feld in einen Javascript-Abschnitt zu legen, von wo aus sie bei Bedarf in Dein verkaufprodname-<select> kopiert werden. Die dritte wäre, alle Daten in das <select>-Feld zu legen und per Javascript nur zum jeweils ersten Produkt zu springen (d.h. selected-Attribut des ersten passenden <option> zu setzen).
Variante 3 hat den Vorteil, auch ohne Javascript zu funktionieren, was mir persönlich immer am liebsten ist. Der Komfort, bei Auswahl einer Marke die dazugehörigen Produkte angezeigt zu bekommen, ist dann ein zusätzlicher Pluspunkt, aber kein Zwang.
Variante 2 ist am weitesten verbeitete Weg, Deine Aufgabenstellung zu lösen, aber ohne Javascript bleibt der Besucher im Gegensatz zu Variante 3 im Regen stehen. Der Vorteil gegenüber Variante 3 ist, je nach Produktanzahl, dass die Auswahlliste nicht extrem lang wird. Wenn so viele Produkte in der Liste stehen, dass der Schiebebalken nur noch ein winziger Knopf ist, verliert er seine Brauchbarkeit.
Nachteil sowohl von 2 und 3 kann sein, dass bei einer sehr großen Anzahl von Produkten der Umfang der zu übertragenden Seite entsprechend riesig wird. Ob die Produkte nun direkt in <select> stehen (Variante 3) oder als Feld in der Funktion prodname() (Variante 2), ist dabei unerheblich, es müssen beim Seitenabruf immer alle Produkte übertragen werden.
Und da wäre dann auch der einzige Vorteil von Variante 1, der Verwendung von Ajax: Es werden nur die Produkte übertragen, die auch tatsächlich benötigt werden. Nachteil ist, mal abgesehen vom Javascript-Zwang, dass die Produktübertragung erst beim Markenwechsel passiert. Das Formular reagiert also etwas später als bei den beiden anderen Varianten, wo alle Produkte schon im Browser vorliegen.
Ich würde Ajax deshalb wirklich nur da einsetzen, wo es um viele hundert oder gar tausende Produkte geht. Bereits übertragene Produktlisten müssten auch unbedingt zwischengespeichert werden, damit nicht bei jedem Wechsel von Grundig nach Blaupunkt und zurück nach Grundig wieder die Grundig-Produkte vom Server geholt werden müssen.
Tipp zum Schluss: Die Javascript-Bibliothek prototype bietet einige nützliche Funktionen, sowohl was den Zugriff auf HTML-Elemente angeht als auch insbesondere Ajax.
Ajax wäre wie auch von Norbert schon geschrieben eine Variante, um das zu lösen. Die zweite wäre, von vornherein sämtliche Daten aus der Tabelle products auszulesen, aber anstatt in das <select>-Feld in einen Javascript-Abschnitt zu legen, von wo aus sie bei Bedarf in Dein verkaufprodname-<select> kopiert werden. Die dritte wäre, alle Daten in das <select>-Feld zu legen und per Javascript nur zum jeweils ersten Produkt zu springen (d.h. selected-Attribut des ersten passenden <option> zu setzen).
Variante 3 hat den Vorteil, auch ohne Javascript zu funktionieren, was mir persönlich immer am liebsten ist. Der Komfort, bei Auswahl einer Marke die dazugehörigen Produkte angezeigt zu bekommen, ist dann ein zusätzlicher Pluspunkt, aber kein Zwang.
Variante 2 ist am weitesten verbeitete Weg, Deine Aufgabenstellung zu lösen, aber ohne Javascript bleibt der Besucher im Gegensatz zu Variante 3 im Regen stehen. Der Vorteil gegenüber Variante 3 ist, je nach Produktanzahl, dass die Auswahlliste nicht extrem lang wird. Wenn so viele Produkte in der Liste stehen, dass der Schiebebalken nur noch ein winziger Knopf ist, verliert er seine Brauchbarkeit.
Nachteil sowohl von 2 und 3 kann sein, dass bei einer sehr großen Anzahl von Produkten der Umfang der zu übertragenden Seite entsprechend riesig wird. Ob die Produkte nun direkt in <select> stehen (Variante 3) oder als Feld in der Funktion prodname() (Variante 2), ist dabei unerheblich, es müssen beim Seitenabruf immer alle Produkte übertragen werden.
Und da wäre dann auch der einzige Vorteil von Variante 1, der Verwendung von Ajax: Es werden nur die Produkte übertragen, die auch tatsächlich benötigt werden. Nachteil ist, mal abgesehen vom Javascript-Zwang, dass die Produktübertragung erst beim Markenwechsel passiert. Das Formular reagiert also etwas später als bei den beiden anderen Varianten, wo alle Produkte schon im Browser vorliegen.
Ich würde Ajax deshalb wirklich nur da einsetzen, wo es um viele hundert oder gar tausende Produkte geht. Bereits übertragene Produktlisten müssten auch unbedingt zwischengespeichert werden, damit nicht bei jedem Wechsel von Grundig nach Blaupunkt und zurück nach Grundig wieder die Grundig-Produkte vom Server geholt werden müssen.Tipp zum Schluss: Die Javascript-Bibliothek prototype bietet einige nützliche Funktionen, sowohl was den Zugriff auf HTML-Elemente angeht als auch insbesondere Ajax.
Danke dir für die genau Beschreibung.. Ich probiers mal mit dem Vorschlag von Norbert.
Kann ich mich gleich ein bisschen in AJAX und JS einleben und ein bisschen was probieren. Das würde ja dann eigentlich dem 3. Vorschlag deiner seits passen.
Gruss Dichti