PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Array wird nicht übergeben


silberlocke
19.03.2005, 01:42:50
Hallo!
Kleine Frage: Wie kann ich ein array an eine andere php-Datei senden? Ich habs versucht an die url zu hängen, aber da scheint ein Leerzeichen bei flöten zu gehen.
url?spieler=<?print_r($spieler);?>

Wenn ich auf der neuen Datei das Array ausgebe mit print_r, wird
Array([0]->usw.
statt
Array ([]->usw.
angezeigt.

Oder kann man das noch anders übermitteln?

Gruß, Silberlocke

meikel (†)
19.03.2005, 03:27:09
Du suchst Session oder serialize.

Madokan
19.03.2005, 09:23:22
Hier mal drei Ansätze - such dir deinen Favoriten heraus:

Übertragung - Serialize & Unserialize
PHP-Dok (seite1.php)


<?php

$spieler = array("Matze K","Caro K","Damir E","Daniel K");

print_r($spieler);

echo "<a href='seite2.php?url=".urlencode(serialize($spieler))."'>DatenSenden</a>";

?>


PHP-Dok (seite2.php)


<?php

$spieler = unserialize(stripslashes(urldecode($_GET['url'])));
print_r($spieler);

?>



Anmerkung: urlencode() und stripslashes() sind optional - sollten jedoch nicht fehlen.

---

Übertragung in Form einer Zeichenkette (ohne Serialize)

PHP-Dok (seite1.php)


<?php

$spieler = array("Matze K","Caro K","Damir E","Daniel K");

foreach($spieler as $eintrag){
$daten .= $eintrag . "-";
}

echo $daten;

echo "<a href='seite2.php?url=$daten'>DatenSenden</a>";

?>


PHP-Dok (seite2.php)


<?php

$array = explode("-",$_GET['url']);
array_pop($array);
print_r($array);

?>


---

Übertragung via Session

PHP-Dok (seite1.php)


<?php

session_start();
$spieler = array("Matze K","Caro K","Damir E","Daniel K");
$_SESSION['spieler'] = $spieler;

?>

<a href="seite2.php">Zur Seite 2</a>


PHP-Dok (seite2.php)


<?php

session_start();
print_r($_SESSION['spieler']);

?>


---

Viel Erfolg...

Liebe Grüsse
Matze K.

xabbuh
19.03.2005, 10:02:10
Hier mal drei Ansätze [...]
Dein Ansatz mit explode() / implode() ist aber nur bedingt nutzbar, da du so keine Elemente (richtig) übertragen kannst, die Bindestriche enthalten.

Madokan
19.03.2005, 10:25:07
@xabbuh: War lediglich ein Beispiel für ein mögliches Trennzeichen - man kann auch kombinieren. Hier eine Alternative.


PHP-Dok (seite1.php)

<?php

$spieler = array("Matze K","Caro K","Damir E","Daniel K");

foreach($spieler as $eintrag){
$daten .= $eintrag . "-*-";
}

echo $daten;

echo "<a href='seite2.php?url=$daten'>DatenSenden</a>";

?>


PHP-Dok (seite2.php)


<?php

$array = explode("-*-",$_GET['url']);
array_pop($array);
print_r($array);

?>



Dachte man kommt selbst drauf. ;)

Achja wer foreach nicht nutzen möchte kann auch implode verwenden, dann mus nicht gepopt werden.

PHP-Dok (seite1.php)


<?php

$spieler = array("Matze K","Caro K","Damir E","Daniel K");
$daten = implode("-*-", $spieler);
echo $daten;
echo "<a href='seite2.php?url=$daten'>DatenSenden</a>";

?>


PHP-Dok (seite2.php)


<?php

$array = explode("-*-",$_GET['url']);
print_r($array);

?>


Viel Erfolg...

Liebe Grüsse
Matze K.

silberlocke
19.03.2005, 11:33:45
Mit serialize klappt das irgendwie nicht.

seite1.php

<a href="<?php echo '../../seite2.php?spieler='.urlencode(serialize($spieler));?>">weiter</a></p>

seite2.php hab ich

echo $_GET['spieler'];
print_r($_GET['spieler']);

da bekomme ich auch dieselbe Ausgabe. Array( [0] , ist aber nur ein String, gehört ja auch so.

Dann
$spieler = unserialize(stripslashes(urldecode($_GET['spieler'])));
print_r($spieler);

gibt dann nichts mehr aus.


Kann man denn das Array nicht mit post als ganzes übergeben?

silberlocke
19.03.2005, 11:50:10
Ich nehm alles zurück und behaupte da Gegenteil. Ich Dully hab immer die falsche Datei hochgeladen (falsche Endung).
Es klappt doch.

Madokan
19.03.2005, 18:47:52
@silberlocke: Kein Problem - hätte mich auch schwer gewundert. :)

Liebe Grüsse
Matze K.

meikel (†)
19.03.2005, 18:55:51
Es klappt doch.
Mit serialize gibt es trotzdem noch ein paar Tücken.

Hier ein funktionstüchtiges Beispiel, daß auf einem Userkommentar zu serialize basiert:
http://test.php-help.info/serialize-1/ (Quelltexte werden angezeigt)

|Coding
19.03.2005, 19:01:13
und mit php 4.0.7 gibt es auch probleme. (aber bei wem rennt die version schon noch :-) )

Madokan
19.03.2005, 20:22:07
@|Coding: Ich befürchte jeder der PHP 4.1.x oder früher noch zu laufen hat - hat nicht nur ein Sicherheitsproblem - die Performanceprobleme gibbet gratis dazu. ;)

@meikel: Nicht nur das die zu übertragene Zeichenkette kann auch schnell zur gross werden. Daher würde ich zur session-Lösung greifen. Aber wie gesagt die Entscheidung trifft letztendlich silberlocke. Achja und vergessen wir nicht es geht lediglich um ein paar Spielerdaten - da dürfte un-/serialize ausreichend funktionstüchtig sein. :)

Liebe Grüsse
Matze K.

|Coding
19.03.2005, 20:34:36
@|Coding: Ich befürchte jeder der PHP 4.1.x oder früher noch zu laufen hat - hat nicht nur ein Sicherheitsproblem - die Performanceprobleme gibbet gratis dazu. ;)
na wer nutzt den überhaupt noch soo überlaufene versionen... sollte strafbar sein :-)

meikel (†)
19.03.2005, 21:15:33
und mit php 4.0.7 gibt es auch probleme. (aber bei wem rennt die version schon noch :-) )
4.0.7: Bei welchem Selbstmörder "rannte" die überhaupt?

meikel (†)
19.03.2005, 21:20:01
@meikel: Nicht nur das die zu übertragene Zeichenkette kann auch schnell zur gross werden.
Richtig. Mit dem Beispielscript wollte ich nur mitteilen, wie es korrekt gemacht wird.

Daher würde ich zur session-Lösung greifen.
Nicht nur Du. <g>

Wenn man es richtig macht (also den Sessionmechanismus begriffen hat), dann ist die Verwendung von Sessions wesentlich einfacher als das andere Gewusel, was man so in der Parameterübergabe antrifft.

Vergessen wir dabei nicht, daß man in $_SESSION alle verifizierten Daten reinpacken können, aber alles, was per GET, POST oder COOKIE reinschneit, muß immer wieder auf Korrektheit geprüft werden.

|Coding
19.03.2005, 21:32:52
4.0.7: Bei welchem Selbstmörder "rannte" die überhaupt?
bei all den unwissenden ;)

meikel (†)
19.03.2005, 21:35:28
4.0.7
bei all den unwissenden ;)
Huch? Ich dachte immer, bei denen läuft 4.1.2...<ggg>

btw: liebe woody-Debilianer ohne Backport, ich gelobe Besserung. Auch wenn es mir, der ich 5.0.3 verwende und nach 5.1.0 schiele, schwerfällt.

|Coding
19.03.2005, 21:45:51
schön, das du besserung gelobst *g*

Madokan
20.03.2005, 08:23:58
@meikel:


Richtig. Mit dem Beispielscript wollte ich nur mitteilen, wie es korrekt gemacht wird.


Weiss ich doch - wobei die Anpassung auch nur sinnvoll ist, wenn es um die Übertragung spezieller Zeichen und Arrayinhalte geht - alles andere ist doch mit Kanonen auf Spatzen schiesssen, daher denke ich das Silberlocke mit einer der pot. Lösungsansätze glücklich wird. :)

Liebe Grüsse
Matze K.