PDA

Vollstndige Version anzeigen : Array in Formularen verarbeiten


dolon
08-06-2004, 13:41
Hallo!

Habe ein kleines Problem! Ich mchte ein Array per verstecktem Textfeld in einem Formular bergeben. Dazu habe ich das Array als value im versteckten Feld angegeben. Wenn ich jetzt das Formular abschicke ist mein Array weg.

Kann mir jemand helfen?


Gruss
Stefan

Corvin Grning
08-06-2004, 13:50
// Beitrag-Inhalt gelscht

Marilu
08-06-2004, 14:08
Hast Du das auch mal ausprobiert?

Marilu
08-06-2004, 14:11
@dolon

Am einfachsten ist es, das Array als Session-Variable abzuspeichern und spter wieder einzulesen.

dolon
08-06-2004, 14:46
Hallo!

Also Inhalt drfte nicht gelscht sein. Denn bevor ich abschicke, gebe ich das Array testweise aus. Da ist auch alles drin. Nur wenn ich dann abschicke, sind danach die Daten weg. Und Sessions wollte ich eigentlich nicht benutzen...

Trotzdem danke

Gruss
Stefan

PS: Ich denke eher, dass ich bei dem versteckten Feld was falsch mache. Denn ich habe das Problem immer wenn es um Arrays geht. Hab in einigen Foren aber gelesen, dass ab PHP4 Arrays mit Formularen gehen soll. Nur gehts bei mir nicht :(

Hier nen Codeauszug:
echo "<form action="liste.php" method="post">";

echo "<input type="hidden" name="t_array" value="$daten2">";

echo "<tr><td><input type="submit" value="Neu berechnen"></td></tr>";

$daten2 ist ein mehrdimensionales Array!

bazubi
08-06-2004, 15:00
Du musst den Array auflsen in eine String mit der funktion serialize() - dass Ergebniss kannst Du per Formular bertragen. Anschlieend musst Du den String wieder in ein Array wandeln!

dolon
08-06-2004, 15:02
Hallo!

Thx werds mal versuchen :)

Gruss
Stefan

dolon
08-06-2004, 16:50
Hallo mal wieder!

Hm also seralize funktioniert irgendwie komisch. Der sendet jetzt was schneidet aber den grten Teil des Arrays ab! Hab die ersten paar Felder, bis nen String kommt also nen Feld in dem Anfhrungszeichen stehen (z.B. :"Name")

Gibts da irgendwas zu beachten?

Gruss
Stefan

bazubi
08-06-2004, 16:55
Du musst die Anfhrungszeichen im Array noch durch & quot; (ohne das Leerzeichen) ersetzen.

dolon
08-06-2004, 17:32
Hallo!

Was meinst du genau mit & quot? Ist das nen Befehl oder einfach ne Zeichenkette die die Anfhrungszeichen ersetzt? Sorry steh grad nen bischen aufm Schlauch! :)

Die zweite Lsung hab ich nmlich ausprobiert. Dann kommt der String auch an. Jedoch wenn ich unserialize versuche tut sich gar nichts?!?

Gru
Stefan

PS: Hab jetzt & quot; als Ersatz benutzt nur der unserialize funzt nicht! :(

bazubi
08-06-2004, 21:46
Was verstehst Du unter gar nichts? Vielleicht gibts Du uns mal ein wenig Quelltext!

dolon
08-06-2004, 23:43
Hi!

Also unter gar nichts verstehe ich: Wenn man den String wieder "unserializen" mchte, ist die Ergebnisvariable leer!

Also Quelltext: (Nur Testpage!!! Jedoch selbes Problem, bei & quot natrlich ohne Leerzeichen!)

$arr[0] = "Hello";
$arr[1] = "Test";

$Text = serialize($arr);
$str_replace("","& quot;",$Text);

<-- Hier eine Standardformular mit zwei versteckten Felder. 1. Feld = 1, 2. Feld = $Text -->

if(temp == 1){ (So heisst das erste Feld)
str_replace("& quot;",""",$Text);

$biz = unserialize($Text);
echo $biz[0];
}

So hab verschiedenes Versucht, z.B. ohne Str_replace den String zurck zuverwandeln. Aber die Ausgabe von $biz[0] ist immer leer, es erscheint nix auf dem Montior zb: < > wobei zwischen den Klammern eigentlich $biz stehen mte!

Gruss
Stefan

dolon
09-06-2004, 00:23
Hallo!

Ich denke ich hab den Fehler! Nach dem verschicken des Strings per Formular, erscheinen im serialisierten Array komischerweise vor allen Anfhrungszeichen ein Backslash! Wenn ich diese nun lsche aus dem String und wieder unserialize mache, dann ist alle ok! Wie die Backslashes da rein kommen oder wieso wei ich aber nicht...

String vor dem Verschicken:
a:2:{i:0;s:5:"Hello";i:1;s:4:"Test";}

nach dem Verschicken:
{i:0;s:5:"Hello";i:1;s:4:"Test";}

Gruss
Stefan

PS: Thx fr die Hilfe und die Geduld mit mir :), jetzt komm ich endlich weiter!

tapferesschneid
09-06-2004, 00:24
$arr[0] = 'Hello';
$arr[1] = 'Test';

$Text = urlencode(serialize($arr));

// <-- Hier eine Standardformular mit zwei versteckten Felder.
// 1. Feld = 1, 2. Feld = $Text
//
// also sowas wie

echo '<input type="hidden" name="temp" value="1">';
echo '<input type="hidden" name="Text" value="'.$Text.'">';

// -->


if ($_POST['temp'] == '1') //(So heisst das erste Feld)
{
$arr = unserialize(urldecode($_POST['Text']));
echo $arr[0];
}


knnte vielleicht funktionieren

dolon
09-06-2004, 00:27
Hi!

Thx. Ich hab zwar urlencode nicht ausprobiert, aber denke das knnte sinnvoll sein. Denn ich nehme an es macht genau das, was ich jetzt mit ner str_replace gelst habe!

Thx for help :)

Gruss
Stefan

PS: Hab grad urlencode ausprobiert! Hat denselben Effekt wie meine Methode, nur das sie professioneller und eleganter ist!
Die Backslashes kommen somit bei der Codierung rein! (Nher s.o. Posting)

lolblack
09-06-2004, 00:32
ka obs funzt aber wie wrs mit ner while schleife die fr jedes array feld ein input feld macht und den value je nach inhalt des momentanen array feldeldes setzt
name setzt du arr0 bis arrxx

und fragst nachher die variablen wieder mit ner schleife ab und machst das array

nur mal ne iddee

dolon
09-06-2004, 00:39
Hi!

Hast zu schnell geschrieben :) Also ich habs probiert mit urlencode und das Problem ist damit gegessen! Thx fr den Tipp. Aufklrung: Nach dem ich mein Array serialisiert hatte und per Formular verschickt hat, codiert PHP oder HTML die Variablen entsprechend. Und wenn er nen Anfhrungszeichen findet macht er sich nen Zeichen, dass das kein Trennzeichen ist, sondern ein zum Text/Variable gehrendes Zeichen. Nur per urlencode/urldecode klappt es richtig!

Gru
Stefan

PS: Schleife ist also nicht notwendig!

tapferesschneid
09-06-2004, 02:53
Mit

if ($_POST['Text']) // also wenn was drin steht
{
$arr = unserialize(urldecode($_POST['Text']));
echo $arr[0];
}


kannst Du Dir brigens das Feld temp noch sparen ...