PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks. |
 |

22-11-2006, 16:13
|
Fisi
Newbie
|
|
Registriert seit: Nov 2006
Ort: Nürnberg
Beiträge: 19
|
|
Wertübergabe bei Formularen
Hallo alle miteinander.
Ich bin ganz neu im Forum und auch noch dazu ein totaler Anfänger in PHP (ok, das steht ja in fast jedem 2. Thread =P ).
Ich habe ein Problem mit der Übergabe von Werten aus einem Formular:
Ich lasse eine MySQL-Tabelle auslesen und anzeigen mit der Zusatzoption, dass am Ende jeder Zeile ein 'Bestell'-Button ist, der die jeweilige Zeile zu einer neuen Tabelle hinzufügen soll. Eine Auswahl findet durch Radio-Buttons statt.
Zur Veranschaulichung:
Nummer* | Bezeichnung* | Größe-klein# | Größe-mittel# | Größe-groß#
* = Die Daten dazu werden aus der Tabelle ausgelesen
# = Hier gibt es 3 Radio-Buttons; einer ist zu markieren
Damit ich die Daten übertragen kann, die aus der Tabelle eingelesen werden, habe ich mich für 'unsichtbare' Buttons entschieden ('type=hidden').
Wie ich in diesem Thread gelesen habe, liegt mein Problem daran, dass ich die Werte bei jedem Schleifendurchlauf wieder überschreibe und ich ein Array nutzen muss.
Bei Quakenet steht, dass hinter das name-Attribut '[]' hinmüssen, um die Daten in einem Unterarray zu speichern, aber irgendwie habe ich das nicht so ganz gecheckt.
Mein Problem ist jetzt eigentlich folgendes:
Der Wert für den Radio Button wird korrekt übergeben, nur die hidden-Felder eben nicht.
Kann mir vielleicht jemand weiterhelfen?
Hier ein Ausschnitt meines Quelltextes:
Die Übergabe von bestellung.php
PHP-Code:
for ($i=0; $i < $num_results; $i++)
{
$row = mysqli_fetch_assoc($result);
echo "<tr>\n <td align='left'>" .
stripslashes($row['sp_nr']) .
"<input type='hidden' name='sp_nr' value='" . $row['sp_nr']
. " '>" . "</td>\n";
echo "\n <td align='left'>" .
stripslashes($row['bezeichnung']) .
"<input type='hidden' name='bezeichnung' value='" .
$row['bezeichnung'] . "'>" . "</td>\n";
}
Und die Seite, auf die die Werte übergeben werden:
PHP-Code:
@ $db = new mysqli(MYSQL_HOST, MYSQL_USER,
MYSQL_PASS, MYSQL_DATABASE);
if (mysqli_connect_errno()) {
echo 'Fehler: Verbindung zur Datenbank nicht möglich!';
exit;
}
$groesse = $_POST['groesse'];
$sp_nr = $_POST['sp_nr'];
$bezeichnung = $_POST['bezeichnung'];
Geändert von Fisi (22-11-2006 um 16:21 Uhr)
|

22-11-2006, 16:19
|
penizillin
PHP Guru
|
|
Registriert seit: Feb 2004
Beiträge: 10.166
|
|
du hast das problem richtig erkannt und eine lösung gefunden. jetzt nur noch umsetzen.
setze das "[]" hinter die namen deiner input-felder und lasse dir den inhalt von $_POST auf der ziel-seite mittels print_r() ausgeben, dann wirst du verstehen, wie du die daten richtig empfängst und verarbeitest.
|

22-11-2006, 16:20
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
|
|
name='sp_nr' wird zu name='sp_nr[]' oder name='sp_nr[n]'
|

22-11-2006, 16:36
|
Fisi
Newbie
|
|
Registriert seit: Nov 2006
Ort: Nürnberg
Beiträge: 19
|
|
Wow, danke für die superschnellen Antworten. =)
Also ich habe jetzt den name in 'sp_nr[]' geändert und mir alles mit print_r() ausgeben lassen.
Ich habe folgende Ausgabe:
Array ( [sp_nr] => Array ( [0] => 100 [1] => 101 [2] => 102 [3] => 103 )
Daraus nehme ich mir, dass die Daten nacheinander in das Array gespeichert werden, also auf Platz 0 kommt die sp_nr 100 usw.
Um jetzt den richtigen Wert auszugeben müsste ich das richtige Element aus dem Array aufrufen, oder?
Mit
PHP-Code:
$sp_nr = $_POST['sp_nr[]'];
funktioniert das aber leider nicht, auch wenn ich einen relativen Wert (z.B. 'i' aus der Zählschleife (siehe oben)) oder gar einen absoluten Wert (z.B.[2]) angebe, wird immer nur der letzte Datensatz ausgegeben.
Ich gehe davon aus, dass die anderen Datensätze jetzt nicht mehr überschrieben werden, nur mit der Ausgabe stimmt etwas nicht, sehe ich das richtig?
|

22-11-2006, 17:09
|
3DMax
PHP Senior
|
|
Registriert seit: Jan 2004
Beiträge: 1.916
|
|
Zitat:
Original geschrieben von Fisi
Ich gehe davon aus, dass die anderen Datensätze jetzt nicht mehr überschrieben werden, nur mit der Ausgabe stimmt etwas nicht, sehe ich das richtig?
|
$_POST musst du als ein mehrdimensionales array ansprechen, also 'sp_nr' ist ein unterarray:
$_POST['sp_nr'][0]
|

22-11-2006, 17:44
|
Fisi
Newbie
|
|
Registriert seit: Nov 2006
Ort: Nürnberg
Beiträge: 19
|
|
Ok, danke!
Soweit funktioniert das erstmal.
Aber eigentlich wollte ich ja keinen absoluten Wert in das Array eingeben, wie $_POST['sp_nr'][0] .
Ich habe versucht meine Variable 'i' zusätzlich zu übergeben und diese dann als relativen Arraywert einzutragen, aber erstens wird nun nichts ausgegeben und zweitens bekomme ich folgende Fehlermeldung:
Warning: Illegal offset type
In der Zeile, in der nun der relative i-Wert steht.
Irgendwo habe ich sicher noch einen totalen Denkfehler!
Tut mir leid, wenn ich euch damit nerve =(
|

22-11-2006, 18:39
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
|
|
welches ist der erste benutzte i wert? 0 oder 1?
|

22-11-2006, 19:32
|
Fisi
Newbie
|
|
Registriert seit: Nov 2006
Ort: Nürnberg
Beiträge: 19
|
|
Der erste benutzte i-Wert ist laut Ausgabe '0'.
|

22-11-2006, 19:56
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
|
|
dann zeig mal nen codeauszug und die genaue fehlermeldung.
die zeile mit dem Fehler bitte markieren
|

22-11-2006, 20:18
|
Fisi
Newbie
|
|
Registriert seit: Nov 2006
Ort: Nürnberg
Beiträge: 19
|
|
Also ich habe jetzt noch als Zusatzwert i übergeben und wollte den im Array auslesen lassen:
Die bestellung.php
PHP-Code:
for ($i=0; $i < $num_results; $i++)
{
$row = mysqli_fetch_assoc($result);
echo "<tr>\n <td align='left'>" . stripslashes($row['sp_nr']) . "
<input type='hidden' name='sp_nr[]' value='" . $row['sp_nr'] . "'>" . "</td>\n";
echo "\n <td align='left'>", stripslashes($row['bezeichnung']).
"<input type='hidden' name='bezeichnung[]' value='" .
$row['bezeichnung'] . "'>" . "</td>\n";
echo "\n <td align='center'>", stripslashes($row['preis_klein']),"
<input type='radio' name='groesse' value='klein'>
</td>\n";
echo "\n <td align='center'>", stripslashes($row['preis_mittel']),"
<input type='radio' name='groesse' value='mittel'>
</td>\n";
echo "\n <td align='center'>", stripslashes($row['preis_gro']),"
<input type='radio' name='groesse' value='gro'></td>\n";
echo "<input type='hidden' name='i' value='" . $i . "'>";
echo "\n <td align='left'><input type='submit' value='Bestellen'></td>\n";
}
Die betroffene Datei
PHP-Code:
$groesse = $_POST['groesse'];
$i = $_POST['i'];
-> $sp_nr = $_POST['sp_nr'][$i];
-> $bezeichnung = $_POST['bezeichnung'][$i];
echo '<br>';
print_r($_POST);
echo '<br>';
Diese Zeilen sind betroffen (aus dem zweiten, kürzeren Quelltext, mit '->' markiert):
$sp_nr = $_POST['sp_nr'][$i];
$bezeichnung = $_POST['bezeichnung'][$i];
|

22-11-2006, 21:23
|
kuddeldaddeldu
Registrierter Benutzer
|
|
Registriert seit: Sep 2006
Beiträge: 437
|
|
Na ja, mit Deinem "i" machst Du ja jetzt den alten Fehler. Es wird nur der letzte Wert übertragen.
Wenn Du Deinen Feldern die Information mitgeben musst, zu welcher Datensatz-ID sie gehören, kannst Du diese ID auch in die [] schreiben.
Also ungefähr so:
PHP-Code:
$id = $row['sp_nr'];
echo "<input type='hidden' name='bezeichnung[" . $id . "]' value='" . $row['bezeichnung'] . "'>";
LG
|

04-12-2006, 12:16
|
Fisi
Newbie
|
|
Registriert seit: Nov 2006
Ort: Nürnberg
Beiträge: 19
|
|
Also ich kann die Werte zwar jetzt in die Arrays speichern (auch bei i), aber ausgegeben wird dennoch immer die letzte Zeile. Das liegt daran, dass ich nach wie vor nur einen absoluten Wert angeben kann. Wenn ich i als Array übergebe und dann eben dieses i als Array in einer anderen Variable aufrufe funktioniert das nicht, bzw. es kommen die falschen Daten.
Wenn ich i als Arrayelement angebe, dann steht die Ausgabe "Array" da.
Auf der 1. Seite lasse ich mir dieses i-Array ausgeben und es werden die richtigen Daten hineingeschrieben, nur auslesen kann ich sie auf relativen Wege nicht >_<
Übergabe i:
PHP-Code:
echo "<input type='hidden' name='zaehler[$i]' value='" . $i . "'>";
Auslesen der Übergabe:
PHP-Code:
$i = $_POST['zaehler'];
Einsetzen von i:
PHP-Code:
$sp_nr = array($i);
echo 'Speisenummer:' . $sp_nr . '<br>';
Ja und die Ausgabe ist dann: 'Array'....
|

04-12-2006, 12:27
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 25.236
|
|
Zitat:
Original geschrieben von Fisi
Übergabe i:
PHP-Code:
echo "<input type='hidden' name='zaehler[$i]' value='" . $i . "'>";
|
Was genau ist in diesem Falle $i?
Zitat:
Auslesen der Übergabe:
PHP-Code:
$i = $_POST['zaehler'];
|
Also ist $i jetzt ein Array.
Zitat:
Einsetzen von i:
PHP-Code:
$sp_nr = array($i);
echo 'Speisenummer:' . $sp_nr . '<br>';
Ja und die Ausgabe ist dann: 'Array'....
|
Was bezweckst du mit array($i), wenn $i selber doch schon ein Array ist?
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

04-12-2006, 12:31
|
Fisi
Newbie
|
|
Registriert seit: Nov 2006
Ort: Nürnberg
Beiträge: 19
|
|
Nun ja, das ist eine gute Frage...
Ich will ja nur die Nummer der Zeile haben, aus der die Werte übergeben werden...mehr will ich ja gar nicht...
Wenn ich
PHP-Code:
$sp_nr = array($i);
nicht hinschreibe, dann wird auch 'Array' ausgegeben.
|

04-12-2006, 13:02
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 25.236
|
|
Machst du print_r($_POST),
verstehst du die Struktur der übergebenen Daten,
erstellst du sinnvolle Lösung.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Thema bewerten |
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|