Archiv verlassen und diese Seite im Standarddesign anzeigen : <select> verschiedene value werte ausgeben
Hallo zusammen
Ich habe da eine blöde Frage, hatte das schon mal gemacht aber komme nicht mehr drauf!
Wie kann ich in einem <Select> mehrere value Werte ausgeben?
<select name="test">
<option value="wert2">Beschreib1></option>
</select>
hier würde ich auch gerne eine Wert1 weitergeben.
Wie kann ich in einem <Select> mehrere value Werte ausgeben?
In einem SELECT gibst du überhaupt keinen value an, sondern höchstens in OPTIONs.
Und da pro OPTION auch nur genau einen - der Inhalt des value-Attributes ist atomar.
Wenn du einen Wert übergeben willst, den du bei der Auswertung dann wieder in mehrere Einzelwerte zerlegen willst - dann mach das.
Dank deiner ausführlichen Problembeschreibung (sorry, Ironie) muss ich einfach mal raten. Ich vermute, du meinst so was:
<select name="bla[]" multiple="multiple" size="3">
<option value="1">Blubb</option>
<option value="2">Blubber</option>
<option value="3">Laber</option>
<option value="4">Schwall</option>
<option value="5">Jodelblah</option>
</select>
Peter
@Kropff: Könnte natürlich auch sein - aber ich dachte mir, auch wenn der Frager selber die Frage schon für blöd hält, dann kann sie eigentlich immer noch nicht so blöd sein ...
@Kropff: Könnte natürlich auch sein - aber ich dachte mir, auch wenn der Frager selber die Frage schon für blöd hält, dann kann sie eigentlich immer noch nicht so blöd sein ...
Ich bin ja auch der Anfängerversteher :)
Peter
Nein, ich dachte das eher so
<select name="bla[]" multiple="multiple" size="3">
<option value="1" value="11" value="111" >Blubb</option>
<option value="2" value="22" value="222" >Blubber</option>
</select>
AmicaNoctis 27-09-2009, 01:03 Hallo Sepp,
nein, das geht nicht, aber mich würde interessieren, was du damit erreichen möchtest.
Gruß,
Amica
Der Inhalt des <Select> ist eine Tabelle in MySQL. Ich brauche neben dem Namen auch die ID und ein weieren Wert aus dem Feld Option.
AmicaNoctis 27-09-2009, 01:25 Aber den hast du doch schon in der Tabelle. Eigentlich brauchst du nur die ID für die maschinelle Identifizierung und den Text (Inhalt des option-Elements) für die menschenlesbare Auswahl. Die anderen Daten aus der DB kannst du z. B. in einem Objektliteral festhalten.
Beispiel:
var dbTabelle = {
1: { id: 1, name: "abc", sonstwas: 3 },
2: { id: 2, name: "def", sonstwas: 5 },
3: { id: 3, name: "ghi", sonstwas: 8 },
...
};
Und über das value-Attribut des ausgewählten option-Elements kannst du dort ganz einfach mit dbTabelle[id].sonstwas z. B. das sonstwas-Feld (oder jedes andere) abrufen.
Hä da steige ichnicht mit
Mein Select sieht so aus
<option selected="selected" value="<?php echo $detail_produkt; ?>"><?php echo $detail_produkt; ?></option><?
while ($row = mysql_fetch_array ($result_produkte))
{
$id_prod = $row["id"];
$name_prod = $row["name_art"];
$preis_prod = $row["preis_art"];
$beschreib_prod = $row["beschreib_art"];
?><option value="<? echo"$name_prod";?>"><?php echo "$name_prod ¦ $beschreib_prod"; ?></option> <? }?></select>
<? }?>
Wo kann ich da die var einbauen? Bei mir klappt das nicht, ich will doch nur neben der ID auch den Preis und den Namen weiter verwenden. den P^reis auch gleich mittels JS weiterrechnen.
AmicaNoctis 27-09-2009, 01:55 Tut mir leid, da muss ich passen. Ich kann dir Ideen für bestimmte Probleme liefern, aber deine Frage offenbart fehlende Grundkenntnisse, die ich leider nicht mal so eben nebenbei vermitteln kann.
Fest steht jedenfalls, dass Select Options nur einen internen Wert (value) haben dürfen und einen Textinhalt, der dann dargestellt wird. Letzteres kann alles mögliche sein, da kannst du gerne auch einen Preis rein schreiben, aber verarbeitet wird in der Regel nur der value.
Mir ist schon klar das man im html Tag <select nur ein value haben kann, das ist ja genau meine Frage! Gibt es keinen JS befehl der mir erlaubt weitere value auszulesen?
Warum Grundkenntnisse?
AmicaNoctis 27-09-2009, 02:06 Mir ist schon klar das man im html Tag <select nur ein value haben kann
Du meinst im option?
Gibt es keinen JS befehl der mir erlaubt weitere value auszulesen?
Woher auslesen? Darauf kommt es nämlich an. Wie bereits erwähnt, kannst du wenn du willst die ganze DB in ein Objektliteral packen und über die id (welche im option value angegeben wird) dort wieder rausholen.
Du kannst jedem option Element auch Expando Eigenschaften zuweisen, falls du sowas meinst, das geht aber auch nur über JS und nicht im HTML.
Warum Grundkenntnisse?
Naja, weil ich gehofft hatte, dass dir das schon weiter hilft.
Ja, und genau diese Expando Eigenschaften suche ich!
AmicaNoctis 27-09-2009, 02:42 Achsooo. Und was willst du jetzt genau wissen? Expando-Eigenschaften sind solche, die man in JS jedem Objekt zuweisen kann.
Beispiel:
document.body.myValue = "Hallo Welt!";
myValue ist in diesem Fall eine Expando-Eigenschaft des body-DOM-Elements. Das ist schon alles. Auch hier gilt wieder: wenn der Name kein gültiger JS-Bezeichner ist, dann die Notation mit eckigen Klammern verwenden:
document.body["ein &%'§/ komischer Name"] = "Hallo Welt!";
Übrigens sind alle Variablen (und Funktionen) die global - also außerhalb einer Funktion - deklariert werden automatisch Expando-Eigenschaften des window-Objekts.
Also noch ein Versuch:
Ich habe ein <select und innerhalb gebe ich die <option mittels MYSQL while abfrage aus. Nun wäre es nicht schön noch nur einen Wert "von value" zu bekommen. Mit dem Wêrt Preis kann ich zwar rechnen aber den Wert ID bräuchte ich zum späteren speichern
Das heisst ich bin auch nicht abgeneigt die Lösung mit JS zu proggen
AmicaNoctis 27-09-2009, 03:04 Aber? Also was ist jetzt die Frage?
Ich versuche es noch mal:
Mein Select
<select onchange="preiseintrag(<? echo"$detail_id" ?>)" name="produkt[<? echo"$detail_id" ?>]">
<? $abfrage_produkte = "SELECT * from rg_artikel order by name_art asc";
$result_produkte = mysql_query($abfrage_produkte,$db) or die(mysql_error());
while ($row = mysql_fetch_array ($result_produkte))
{
$id_prod = $row["id"];
$name_prod = $row["name_art"];
$preis_prod = $row["preis_art"];
?><option value="<? echo"$preis_prod";?>"><?php echo "$name_prod ¦ $beschreib_prod"; ?></option> <? }?></select>
<? }?>
Soweit so gut. Mittels diesem Wert von dem <Select produkt[<? echo"$detail_id" ?>] kann ich via JS rechnen.
zum Speichern benötige ich aber zusätzlich die ID dieses ausgeählten Artikels - also von produkt[<? echo"$detail_id" ?>]
Die Frage - wie kann ich die ID auslesen und ausgeben?
AmicaNoctis 27-09-2009, 03:40 Nochmal, du sollst für das value-Attribut von option die ID nehmen und nicht den blöden Preis. Du brauchst dort einen eindeutigen Wert, sonst weißt du nicht, welches Produkt gewählt wurde, wenn mehrere den gleichen Preis haben.
In der Schleife baust du parallel zu der Select-Box einen String auf, in dem JS-Code für ein Objektliteral steht (ich hatte schon erwähnt, wie sowas aussehen könnte). Nach dem select fügst du einen script-Block ein, in den du das mit PHP gebaute Objektliteral schreibst, damit es in JS zur Verfügung steht.
Beim Auswählen eines Eintrags hast du dann im value die ID stehen und mit der kannst du in diesem Objektliteral den Lookup machen und hast Name, Preis und alles andere aus der DB.
Da der ganze Code generiert wird, ist das mit den Expandos nicht ganz so einfach wie in einer statischen Seite, daher kommst du mit der eben beschriebenen Variante imho auf jeden Fall besser.
Edit: Wenn dir das leichter fallen würde, kannst du auch in PHP die Tabelle in ein Array schreiben und das zu JSON umwandeln und in einen JS-Block schreiben. Das hat den gleichen Effekt, nur dass du das Objektliteral dabei nicht als String zusammenbauen musst, weil json_encode (http://de2.php.net/manual/de/function.json-encode.php) das für dich übernimmt.
Mir ist schon klar das man im html Tag <select nur ein value haben kann, das ist ja genau meine Frage! Gibt es keinen JS befehl der mir erlaubt weitere value auszulesen?
Wie ich bereits in meiner ersten Antwort schrieb - wenn du mehrere Einzelwerte zu einem einzigen Wert zusammenfassen willst, die du nachher wieder aufdröselst (ja, auch möglich) - dann mach das.
Warum Grundkenntnisse?
Weil die Fragen, die du hier in letzter Zeit so gestellt hast, stark darauf hindeuten, dass es dir daran massivst fehlt.
Ja, mir gefällt es auch besser wenn die Id ausgegeben wird!
Aber so funktioniert es auch nicht:
<script type="text/JavaScript">
var dbTabelle = {
<? echo"$id_prod"; ?>: { id: "<? echo"$id_prod"; ?>", name: "<? echo"$name_prod"; ?>", preis: "<? echo"$preis_prod"; ?>" };
</script>
AmicaNoctis 27-09-2009, 04:10 wenn du mehrere Einzelwerte zu einem einzigen Wert zusammenfassen willst, die du nachher wieder aufdröselst (ja, auch möglich) - dann mach das.
Davon würde ich dringend abraten, weil solche Hacks nur potentielle sofortige oder künftige Fehlerquellen darstellen.
Und was wäre Dein konkreter Vorschlag?
AmicaNoctis 27-09-2009, 13:24 Mein konkreter Vorschlag?!? Den hab ich mehrmals beschrieben, wenn du das nicht gelesen hast kann ich nichts dafür. Wenn du es nicht verstanden hast, hättest du mal nachlesen können. Wenn du trotz Nachlesens einige Details nicht verstanden hast, hättest du konkrete Rückfragen stellen können. Was willst du also noch? Wenn ich noch konkreter werden würde, hätte ich deinen Code schon fertig geschrieben und warum sollte ich das tun, wenn ich erstens normalerweise damit mein Geld verdiene und zweitens du keinerlei eigene Mühe erkennen lässt?
Mein letzer Versuch hast Du nicht kommentiert!
<script type="text/JavaScript">
var dbTabelle = {
<? echo"$id_prod"; ?>: { id: "<? echo"$id_prod"; ?>", name: "<? echo"$name_prod"; ?>", preis: "<? echo"$preis_prod"; ?>" };
</script>
AmicaNoctis 27-09-2009, 13:50 Nein, hab ich nicht, ich weiß. Weil dir selbst auffallen sollte, dass das keine Tabelle sein kann, sondern nur eine einzelne Row. Du müsstest das innerhalb der Schleife immer weiter ergänzen.
Ich hab jetzt erstmal genug. Hier ist Beispielcode, den du nur noch auf deine Namen, Werte u.s.w. anpassen musst. Ich hoffe, du kommst damit klar, wenn nicht kann ich dir auch nicht helfen, da das im Prinzip schon die Lösung ist:
<?php
$ch = mysql_connect("host", "user", "pass");
mysql_set_charset("utf8", $ch);
mysql_select_db("dbname");
$query = "select * from tablename";
$rh = mysql_query($query, $ch);
$rows = array();
?>
<select name="dropDown" onchange="dropDownChanged(this)">
<?php
while ($row = mysql_fetch_assoc($rh)) {
$rows[$row["id"]] = $row;
?>
<option value="<?php echo(htmlspecialchars($row["id"])); ?>"><?php echo(htmlspecialchars($row["name"])); ?></option>
<?php
}
?>
</select>
<script type="text/javascript">/*<![CDATA[*/
var table = <?php echo(json_encode($rows)); ?>;
function dropDownChanged (pTarget) {
var id = pTarget.options[pTarget.selectedIndex].value;
alert(table[id].prize);
}
/*]]>*/</script>
Amica
Davon würde ich dringend abraten, weil solche Hacks nur potentielle sofortige oder künftige Fehlerquellen darstellen.
Na ja, wenn man es vernünftig macht, sehe ich da weniger ein Problem.
Es ist im Grund nichts weiter als eine Serialisierung.
Mein letzer Versuch hast Du nicht kommentiert!
Du auch nicht! Du hast nur wieder einen kurzen Code-Schnippsel hier abgeladen, mit keiner weiteren Beschreibung als "funzt nich".
Gewöhne dir das bitte ab, und liefere vernünftige Problembeschreibungen.
@AmicaNoctis
Herzlichen Dank nun habe ich es auch geschafft und werde Dich deswegen nicht mehr belästigen
AmicaNoctis 27-09-2009, 16:30 Herzlichen Dank nun habe ich es auch geschafft
Das freut mich.
werde Dich deswegen nicht mehr belästigen
Belästigen ist der falsche Ausdruck, ich fand nur deine Mitarbeit in diesem Thread etwas dürftig und war daher zwischendurch etwas genervt. Beim nächsten Mal achte darauf, Antworten genau zu lesen, Hinweise zu befolgen, angesprochene Themen und Stichworte zu googeln, eigene Bemühungen zu demonstrieren und Probleme möglichst konkret zu beschreiben. Das ist für alle erquicklicher.
Beste Grüße,
Amica
|
-
- |