php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
[Variablen] assoziatives Array übergeben


 
dieterm
23-04-2004, 20:28 
 
Hallo Leute!

Ich wende mich an euch, bevor ich mich hier vom Balkon werfe.
Etliche Stunden sind jetzt schon wegen diesem Problem verstrichen.

Also folgendes Problem:
Auf meiner Seite ist ein Formular mit einigen Eingabefeldern und 3 Buttons

Button1 = "speichern"
Button2 = "reset"
Button3 = "produkt"

Wird Button1, also speichern gedrückt, wird die action="main.php" method="post" angestoßen
In main.php überprüfe ich ob ($_REQUEST['Submit']=="speichern") ist und verarbeite mein
assoziatives Formulararray $produktdata weiter. Klappt alles wunderbar, gibt keine Probleme.

Wird Button3, also Produkt gedrückt, wird ebenfalls main.php aufgerufen und es soll sich ein neues Fenster öffnen,
das die bereits eingegeben Daten, also das FormArray $produktdata, erhält.
In diesem neuen Fenster will ich etwas auswählen und anschließend
wieder in meine Hauptseite zurückkehren, und dieses Array wieder zurückgeben, evtl modifiziert.

main.php

if (strcmp($_REQUEST['Submit'],'produkt')==0){
$produktdata = $_REQUEST['produktdata']; // spaßeshalber
echo "<script>window.open('dlg_produktdata.php?formdata=$produktdata')</script>";
exit;
}


Das neue Fenster öffnet sich auch soweit, nur es wird kein Array übergeben
Im neuen Fenster steht
http://.../dlg_produktdata.php?formdata=Array

Da wurde einfach lapidar anstatt meines assoziativen Arrays, ein String mit dem Inhalt "Array" angehängt.

Mit implode klappt es soweit, aber das nützt mir nichts, ich muss das Array über die Felder ansprechen können.
Ich bete, dass ihr eine Lösung habt.

Mit besten Gruß
Dieter

 
Wurzel
23-04-2004, 20:39 
 
serialize() / unserialize() sind deine freunde ...

 
dieterm
24-04-2004, 12:45 
 
Wow, danke für die schnelle Antwort!!!

Die Url im neuen Fenster sieht schonmal sehr gut aus.
Keys und Values des Arrays sind komplett übegeben worden.

Wenn ich aber jetzt in meinem neuen Fenster, also dlg_produktdata.php,


$testarray = unserialize($_REQUEST['formdata']);


durchführe bekomme ich den Fehler:
unserialize() failed at offset 6 of 431 bytes

kopiere ich mir aber für Testtwecke den Anhang der URL heraus und füge diesen String manuell
ins dl_produktdata.php und führe mit diesem String ein unserialize durch, klappt es genau so wie es sein muss, genial!!!

Was habe ich falsch gemacht?

Großen Dank schon einmal im Vorraus!

 
Wurzel
24-04-2004, 13:12 
 
es könnte helfen, noch mit urlencode()/urldecode() zu arbeiten ... alternative dazu, nimm sessions, speicher das array in einer session-variablen ... dann steht es überall zur verfügung.

 
dieterm
24-04-2004, 16:20 
 
Danke wurzel!

Leider bekomme ich immer noch einen Offset-Fehler bei unserialize().

Ich werde es mal mit Session-Variablen versuchen.
Hoffe es klappt jetzt mal.

Nochmals vielen Dank, Wurzel.
Würde mich aber trotzdem interessieren, wie ich diesen verfluchten Offset-Fehler beseitigt bekomme.

Gruß´Dieter

 
wahsaga
24-04-2004, 17:17 
 
Original geschrieben von dieterm
Würde mich aber trotzdem interessieren, wie ich diesen verfluchten Offset-Fehler beseitigt bekomme.
hast du es denn jetzt mit urlencode/-decode versucht?

und spielt evtl. magic_quotes_gpc da noch mit rein?

 
dieterm
25-04-2004, 17:45 
 
Ich habe urldecode und urlencode jetzt mal eingesetzt.

Leider immer noch dieser verfluchte Offset-Fehler, überall wo ich Arrays übergeben will. Mir ist aufgefallen, dass es egal ist ob assoziativ oder indiziert.

magic_quotes_gpc is auf ON.

Ich bekomme wirklich graue Haare, so eine Sache hält mich echt auf.

Vielleicht hat noch einer eine Idee

Anderer Code, gleicher Fehler

header( "location: main.php?action=showpoll&produktid=".$_REQUEST['produktid']."&quest=".urlencode(serialize($_POST['quest'])))


Schönen Sonntag!

 
dieterm
25-04-2004, 17:50 
 
$_REQUEST['quest'] // ist das Array

// vielleicht ist hier der Fehler
$test = urldecode($_REQUEST['quest']);
//$test sieht gut aus, alle Werte des ehemaligen Array sind drin
$array = unserialize($test); // Hier kommt IMMER ein Offset Fehler

 
Wurzel
25-04-2004, 18:13 
 
teste mal:<?php
$arr = array(12, 23, array(14,84,94));
$a0 = serialize($arr);
$a1 = urlencode($a0);
if(!isset($t))
{
header("LOCATION: ".$_SERVER['PHP_SELF']."?t=".$a1."");
}
else
{
echo '<pre>
alt:';
print_r($arr);
echo 'neu: ';
print_r(unserialize(urldecode($_REQUEST['t']))).chr(13);

echo chr(13).'alt1: '.$a0.chr(13);
echo 'neu2: '.urldecode($_REQUEST['t']).chr(13);
}
?>läuft bei mir problemlos unter winxp & linux, magic_quotes = on

 
wahsaga
25-04-2004, 19:49 
 
Original geschrieben von dieterm
magic_quotes_gpc is auf ON.
dann probier mal, vorher noch stripslashes zu machen.

 
dieterm
25-04-2004, 20:20 
 
Danke Wurzel!

Ich habe deinen Code bei mir mal getestet und er funktioniert auch super!

Leider bei meinem Code immer noch nicht.

Die einzige Erklärung die mir noch bleibt ist das Formular was das ganze
verhunzt.
Also kurz noch mal die Erklärung.

User klickt auf Formularabsenden,
jetzt überprüfe ich ob alles in Ordnung oder anderer Button gedrückt worden ist, falls nicht mache
ich entweder die header(location: ....) (falsche Eingabe) Geschichte oder für ein neues Fenster die window.open() (Auswahldialog) Sache.

Bei beiden knallt er mir bei unserialize weg
(Code läuft schon weiter, nur der Debugger zeigt mir den Fehler an
und die Variable ist leer).
Der PHP-CODE von Wurzel hat gezeigt, dass er bei mir ja klappt.
(Ich versichere euch ich mache es genauso wie Wurzel!!)

Hat einer von euch schon mal Erfahrungen gemacht,
mit Abbrechen eines Submit-Vorganges bei einem Formular, vielleicht wird irgendwie
ein Byte umgesetzt oder sonst was, aber unserialize kommt mit dieser
Sache einfach nicht zurecht, aber da muss es eine Lösung geben.

Gruß aus Köln
Dieter

 
dieterm
25-04-2004, 21:09 
 
Sorry Wahsaga!!!

Das war es, ich fasse ich nicht!

Es klappt!!!!!!

Es ist zwar jetzt egal, aber trotzdem scheint durch diesen Abbruch des Formularsubmits sich eine Kleinigkeit verändert zu haben,
weil Wurzels Code ,ohne Form, auch so funktioniert.

Herzlichen Dank an euch beide.

Ihr habt mir wirklich sehr weitergeholfen!
Ich feue mich hier wie ein kleines Kind,
wollte schon wieder "format *" auf alles machen!

WAHNSINN

Dieter!


Alle Zeitangaben in WEZ +2. Es ist jetzt 06:22 Uhr.