php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
<select> verschiedene value werte ausgeben


 
sepp
26-09-2009, 18:44 
 
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.

 
wahsaga
26-09-2009, 19:02 
 
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.

 
Kropff
26-09-2009, 19:22 
 
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

 
wahsaga
26-09-2009, 19:25 
 
@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
26-09-2009, 19:40 
 
@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

 
sepp
27-09-2009, 01:48 
 
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, 02:03 
 
Hallo Sepp,

nein, das geht nicht, aber mich würde interessieren, was du damit erreichen möchtest.

Gruß,

Amica

 
sepp
27-09-2009, 02:15 
 
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, 02: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.

 
sepp
27-09-2009, 02:40 
 
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, 02: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.

 
sepp
27-09-2009, 02:58 
 
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, 03: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.

 
sepp
27-09-2009, 03:29 
 
Ja, und genau diese Expando Eigenschaften suche ich!

 
AmicaNoctis
27-09-2009, 03: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.

 
sepp
27-09-2009, 03:57 
 
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, 04:04 
 
Aber? Also was ist jetzt die Frage?

 
sepp
27-09-2009, 04:14 
 
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, 04: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.

 
wahsaga
27-09-2009, 05:04 
 
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.

 
sepp
27-09-2009, 05:10 
 
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, 05: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.

 
sepp
27-09-2009, 14:19 
 
Und was wäre Dein konkreter Vorschlag?

 
AmicaNoctis
27-09-2009, 14: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?

 
sepp
27-09-2009, 14:45 
 
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, 14: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

 
wahsaga
27-09-2009, 15:55 
 
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.

 
sepp
27-09-2009, 17:21 
 
@AmicaNoctis
Herzlichen Dank nun habe ich es auch geschafft und werde Dich deswegen nicht mehr belästigen

 
AmicaNoctis
27-09-2009, 17: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


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:52 Uhr.