PHP Değer çok-boyutlu dizi (başvuruya göre değil) kopyalayın

5 Cevap php

Dil: PHP

Ben kendi eğitim ayrıntılar, ders detayları ve teknik detaylar için kullanıcılar soran bir form var. Form gönderildiğinde sayfa bilgilere süreçleri çalıştırmak ve bir veritabanına parçalar kaydetmek için farklı bir sayfaya gider. HOWEVER (!) Ben sonra tekrar orijinal sonrası bilgilere erişimi olan gerekli orijinal sayfaya sayfasına dönmek gerekir.

Ben $ _SESSION ['post'] için (değer) $ _POST dizi çok-boyutlu (md) kopyalamak için basit olacağını düşündüm

session_start(); 
$_SESSION['post'] = $_POST;

Ancak bu sadece çocuklar / alt-diziler hiçbir şey yapmıyor $ _SESSION ['post'] içine dizinin üst düzeyde yer görünüyor.

Aşağıdaki gibi md $ _POST dizi kısaltılmış şeklidir:

Array
(
    [formid] => 2
    [edu] => Array
        (
            ['id'] => Array
                (
                    [1] => new_1
                    [2] => new_2
                )

            ['nameOfInstitution'] => Array
                (
                    [1] => 1
                    [2] => 2
                )

            ['qualification'] => Array
                (
                    [1] => blah 
                    [2] => blah
                )

            ['grade'] => Array
                (
                    [1] => blah
                    [2] => blah 
                )

        )

    [vID] => 61
    [Submit] => Save and Continue
)

Ben $ _SESSION echo ['post'] it "2" yazıyor ['formID'], ve ben $ _SESSION echo ['post'] ['edu'] it "Array" döndürür. Ben edu bir dizi kontrol ederseniz (is_array ($ _SESSION ['post'] ['edu])) doğru döner. Ben $ _SESSION echo ['post'] ['edu'] ['id'] bu dizi döndürür, ancak kontrol edildiğinde (is_array ($ _SESSION ['post'] ['edu] [' id '])) döndürür yanlış ve ben unsurlardan herhangi echo olamaz.

Nasıl başarılı (kendi çocukları dahil) bütün dizi bir yeni dizi (değerine göre değil, başvuruya göre değil) duyuyor musunuz?

THANKS EVERYONE FOR RESPONDING - UPDATE
The issue was caused my irrelevant quote marks in the naming of fields in my form.

5 Cevap

Bu gerçek print_r çıkışı ise, o zaman dizi anahtarları bazı istenmeyen karakter var.

Array
(
    [formid] => 2
    [edu] => Array //<--- $_SESSION['post']['edu']
        (
            ['id'] => Array // <---- $_SESSION['post']['edu']["'id'"]

Bu işe neden ben söyleyemem

session_start(); 
$_SESSION['post'] = $_POST;

2. sayfada, erişmeden önce session_start() diyorsunuz $_SESSION?

Siz hata ayıklama yardımcı olmak için doğrudan session_start() altında bu yer olabilir.

var_dump($_SESSION);

Sen bir dizeye dizi dönüştürmek için serialize () kullanın ve yazılan onu geçmek veya oturumda saklayabilir ya edebilirsiniz.

PHP $ _SESSION için bir dizi tasarruf önce komik davranışları fark ettik. Bazen bir başvuru yapmak ve örneğin, daha kolay olduğunu kullanırsanız:

$session =& $_SESSION['post'];

$session = array ();

Neden olsa sormayın :)

Ayrıca, açıklamada ne dedi haim evgi genişletmek gibi <pre> etiketleri print_r sarmak için:

echo "<pre>";
print_r ($array);
echo "</pre>";

dizi çıktısı okunabilir hale getirmek için.

DCD doğru yolda olduğunu.

Genel olarak, ben oturumda formun bir tefrika versiyonunu saklamak ve daha sonra bunu kullanmak için gerekli zaman bunu unserialize olacaktır.

Saklamak için:

$_SESSION['post'] = serialize($_POST);

Onu almak için:

$post = unserialize( $_SESSION['post'] );

Eğer echo dizide, PHP yerine dizi içeriğinin "Array" yazacaktır kullanın. print_r yerine kullanın.

Sizin atama yalnızca başvuruya göre o onun gibi görünüyor. Yerinden (bellek korumak için) bunu değiştirene kadar bir referans $_SESSION['post']. Onward Bu noktadan itibaren, iki ayrı değişken olacaktır.