Variable in hidden-Feld übergeben

stega

Erfahrenes Mitglied
Hi,
ich verzweifle jetzt gleich. Sitze hier seit heut morgen um 11Uhr an einem kleinen Codeschnipsel und finde den Fehler nicht.
Folgendes Szenario:
ich lasse eine Liste von 'Immobilien' auflisten (mit Hilfe von while), vor jeder ein radio-Button, der die id-Nr. der Immobilie beim User in der Datenbank hat. Außerdem wird ein hidden-Feld dazugelistet, das die id-Nr. der Immobilie in der Immobilienliste hat.:
immo_holdings (für User):
id...|...user_id...|...immo_id...|...blablabla
-------------------------------------------------------------
.1..|....234........|.........111....|.asfkjhaskf...
.2..|....2............|.........3.......|.hshshshs....

so, mein Script sieht jetzt so aus, dass erst die Auflistung kommt, dann der User das Formualr abschickt und eine Vorabgestätigung bekomme, in der Daten stehen sollen, die mithilfe der hidden und des radio-Buttons aus anderen Datenbanken geholt werden.

Mein Script (auszug):
PHP:
   print "
       <input type=\"radio\" name=\"vnr\" value=\"".$im["id"]."\">
       <input type=\"hidden\" name=\"immoid\" value=\"".$im["immo_id"]."\">";
So siehts da aus, wo die beiden Werte ins Formular eingetragen werden. Dann werte ich das Formular mit ner switch-Übergabe aus:
PHP:
case "sell":
include("../inc.php");
$_REQUEST["vnr"] = $vnr;
$_REQUEST["immoid"] = $immoid;

So, im Quelltext bei der Auflistung steht alles richtig:
Code:
<input type="radio" name="vnr" value="10">
<input type="hidden" name="immoid" value="1">
blablabla
<input type="radio" name="vnr" value="11">
<input type="hidden" name="immoid" value="2">
blablabla

so, wenn ich mir jetzt aber die Bestätigung ausgeben lasse, dann nimmt er immer nur die gesendeten Werte des letzten aufgelisteten Punktes, sprich hier jetzt: vnr = 11 und immoid = 2

Warum? habs schon mit allem möglichem probiert, aber er nimmt immer den letzten aufgelisteten wert. Wenn ich nur einen Datensatz aufliste, dann stimmt es natürlich (Weil eben nichts danach mehr kommt), wenn es aber mehr als einer sind, passt nichts mehr :(

Könnt ihr mir sagen, wo ein Fehler liegen könnte?
danke
 
Die Forumlarelemente besitzen auch alle denselben Namen. Probier mal Folgendes, damit beide Werte einander zugeordnet sind:
PHP:
echo '<input type="radio" name="foobar" value="'.$im['id'].'-'.$im['immo_id'].'">';
Anschließend können die Werte bei der Verarbeitung beispielsweise wie folgt auseinandergepflückt werden:
PHP:
list($vnr, $immoid) = explode('-', $_REQUEST['foobar']);
 
ok, jetzt funktioniert es zur Hälfte:
ich habs versucht zu erweitern, aber es geht nicht :( Er zeigt wieder nur den letzten Wert aus der Liste an:
PHP:
  <input type=\"radio\" name=\"foobar\" value=\"".$im['id']."-".$im['immo_id']."\">
   <input type=\"hidden\" name=\"geld\" value=\"".$im['id']."-".$gewinn."\">
    <input type=\"hidden\" name=\"verk\" value=\"".$im['id']."-".$verkauf."\">
Es wird neben den beiden id's noch ein erzielter Gewinn (z.B. +100) und der Verkaufspreis (z.B. 10100) mitüberliefert.

Beim auslesen:
PHP:
list($vnr, $immoid) = explode('-', $_REQUEST['foobar']); 
list($vnr2, $preis_verkauf) = explode('-', $_REQUEST['geld']);
list($vnr2, $verkauf) = explode('-', $_REQUEST['ver']);
(vnr2 kann einfach 'Weggeworfen werden)
wird aber bei $verkauf nichts ausgegeben. :(

und wenn ich dann auf absenden klicken (also endgültig bestätigt, dass Auftrag ausgeführt werden soll), dann übergeb ich wieder so:

PHP:
<input type="hidden" value="<? print $vnr."-".$immoid; ?>" name="go">
<input type="hidden" value="<? print $vnr."-".$verkauf; ?>" name="verkauf">
und hols so wieder raus:

PHP:
list($vnr, $immoid) = explode('-', $_REQUEST['go']); 
list($vnr2, $verk) = explode('-', $_REQUEST['verkauf']);

da hat er den $verkauf auch nicht :(. Zwar löscht er dann (wie er soll) mithilfe der id's aus den Tabellen die betreffenden Einträge, aber da kein $verkauf da ist, kann er das Geld nicht gutschreiben.
Warum klappt das denn überhaupt nicht? :(

danke für Ratschläge,
lg
stega
 
Auch hier könntest du das Ganze in einem Wert vereinen:
PHP:
echo '<input type="radio" name="foobar" value="'.implode(':', array($im['id'], $im['immo_id'], $gewinn, $verkauf)).'">';
PHP:
 list($vnr, $immoid, $gewinn, $verkauf) = explode(':', $_REQUEST['foobar']);
 
Das Problem besteht darin, dass sie alle denselben Namen haben. Würdest du ihnen alle unterschiedliche Namen geben – beispielsweise durch eine Form, mit der sie in ein numerisches Array verwandelt werden – würde es funktionieren. Allerdings gäb es dann auch viel überflüssige Nutzlast.
PHP:
<?php

	echo '<input type="radio" name="immo-id" value="'.$im['id'].'">';
	echo '<input type="hidden" name="geld['.$im['id'].']" value="'.$gewinn.'">';
	echo '<input type="hidden" name="verk['.$im['id'].']" value="'.$verkauf.'">';

?>
PHP:
<?php

	$immo_id = $_REQUEST['immo-id'];
	$gewinn = $_REQUEST['gewinn'][$_REQUEST['immo-id']];
	$verkauf = $_REQUEST['verkauf'][$_REQUEST['immo-id']];

?>
 
Zurück