PHP - Nasıl başka bir sayfa için bir dizi göndermek için?

6 Cevap php

Ben başka bir sayfa için bir dizi göndermeye çalışıyorum.

Ben önce uğraş oldu:

page1

<input type='hidden' name='input_name' value='<?php print_r($array_name); ?>' />

Ve page2

<?php 
$passed_array = $_POST['input_name'];
?>

Şimdi nasıl $passed_array bir dizi gibi hareket yapabilirim?

Yoksa bu sorunu çözme başka bir yol biliyor musunuz?

Teşekkürler, Mike.

Edit: Ben oturumları ve çerezleri kaçınmak gerekir çünkü bu şekilde yapmak istiyorum nedenidir.

6 Cevap

Siz oturumda koyabilirsiniz:

session_start();
$_SESSION['array_name'] = $array_name;

Yoksa serialize bunu yapabilirsiniz bir form üzerinden göndermek istiyorsanız:

<input type='hidden' name='input_name' value="<?php echo htmlentities(serialize($array_name)); ?>" />

$passed_array = unserialize($_POST['input_name']);

Oturum istemci görmüyor avantaja sahiptir (dolayısıyla onunla kurcalamak değil) ve dizi büyük ise daha hızlı. Dezavantajı kullanıcı birden fazla sekme varsa o karışık gelebilir.

Edit: cevaplar bir sürü kullanılarak düşündüren name="input_name[]". Bu genel durumda çalışmaz - birleştirici diziler desteklemek için değiştirilmesi gereken ve çok boyutlu diziler (icky!) desteklemek için bir çok modifiye olacaktır. Seri ayrılmamak için çok daha iyi.

Yapabildin serialize the array, bir dizeye dönüştürür ve sonra tekrar bir dizi haline dönüşür ki, sonradan unserialize hangi. Bu gibi:

<input type='hidden' name='input_name' value='<?php serialize($array_name); ?>' />

ve 2. sayfada:

<?php $passed_array = unserialize($_POST['input_name']); ?>

Tefrika dizilerle çalışmak olduğunu unutmayın, GET yerde 1024 karakter etrafında bir boyut sınırı olduğu gibi, formun iletim yöntemi olarak POST kullanmanız gerekir.

Mümkün Ben oturumları kullanmak istiyorum.

Lütfen giriş etiketi [] input_name için input_name değiştirmek, daha sonra dizinin her değeri için bir giriş etiketi koydu.

http://phpprogramming.wordpress.com/2007/05/06/php-passing-array-using-hidden-form-element/

Sen tek seferde dizi göndermek değil, tek tek her bir değeri göndermek ya var olacak:

<input type='hidden' name='input_name[]' value='<?php print_r($array_name[0]); ?>' />
<input type='hidden' name='input_name[]' value='<?php print_r($array_name[1]); ?>' />
<input type='hidden' name='input_name[]' value='<?php print_r($array_name[2]); ?>' />
...

Veya json veya serileştirme içine bakmak.

Benim dizide bazı değerler satır sonları içerdiği Yukarıdaki örnekler ile bazı sorunları içine koştu. Benim bazı değerleri de htmlentities vidalama tutulan yabancı dillerden karakterler vardı. Aşağıdaki benim çözüm oldu.

Eğer gelen dizi geçmek isteyen sayfasında ...

<INPUT TYPE="hidden" NAME="input_name" VALUE="<?= base64_encode(serialize($array_name)); ?>">

Dizi alır sayfasında ...

$array = unserialize(base64_decode($_POST["input_name"]));