PHP $ _POST değişkenler bazen boş

4 Cevap php

Ben bir PHP acemi ve ben onları gönderirseniz ben POST değişkeni bazen boş olması ile ilgili bir sorun yaşıyorum. Bu zor beni anlamaya için yapıyor kısmı bu her zaman olmaz, ve ben genellikle sadece sayfayı yenileyerek benim PHP programda sonrası verileri alabiliriz. Bazen birkaç kez alacak, ama bir kez veri yoluyla gelmek bir kez, o para üzerinden gelmeye devam edecek.

Diğer PHP uygulamaları (Wordpress ve diğerleri) ince iş ve hataları asla pes, bu yüzden benim php uygulaması ile ilgili bir sorun var eminim.

PHP 4.2.9 bir CentOS 5.2 sunucu üzerinde yüklü ve KeepAliveTimeout 1'e ayarlanmış.

I gönderilen verileri işleme hangi uygulama için kodu:

<?php
    session_start(); 
    if (isset($_SESSION['username'])) {
        $expire = time() + (60*60*24*30);
        setcookie("username", $_SESSION['username'], $expire);
    }

    header("Cache-control: no-cache");

    if (!isset($_SESSION['username'])) {
        header('Location: ./login.php');
        die();
    }

    if(empty($_SERVER['CONTENT_TYPE'])){
        $type = "application/x-www-form-urlencoded";
        $_SERVER['CONTENT_TYPE'] = $type;
    }

    var_dump($_POST);
    echo "\n";
    var_dump($_SERVER);
?>

Hiç bir yardım mutluluk duyacağız

Edit: I have found one difference between working post requests and the ones that fail. Firebug tells me that when the post fails, the status is a 302 redirect instead of 200 ok. Im not really sure what can cause that, but I have the header cache control in sending form just as it appears in the above code snippet.

Herhangi bir fikir?

4 Cevap

Sen GİRİŞ etiketi üzerinde isim = parametresini unuttum.

<input type="text" id="xyz" name="xyz" value="123"/>

Sen $ _POST ve $ _GET dizileri bir arada $ _REQUEST değişkeni kontrol edebilir. Değişkenler yoksa, bunlar gönderilmedi ve sorun istemci tarafında muhtemelen.

Ağ trafiğini analiz araçlarını kullanabilirsiniz örneğin Aslında sunucuya gönderildi neler olduğunu görmek için Firebug'ın Net sekmesi.

$_POST değişken değildir, herhangi bir uygulama, PHP motoru tarafından doldurulur. Boş ise Yani, sadece boş ve senin kod zaten $_SESSION ve $_SERVER değişkenler için olduğu gibi aynı şekilde, o hesaba almak gerekiyor.

header('Location: ./login.php');

Varsayılan olarak bu gibi bir durum kodu 302 gönderecektir. Çoğu tarayıcı ne olursa olsun özgün istek türü, bir GET isteği ile bir 302 hedef isteyecektir. Eğer her iki istekleri POST verileri içermesini istiyorsanız, o zaman bir 307 deneyebilirsiniz:

header('Location: ./login.php', true, 307);

Ama bu (non-antik şey çalışmak gerekir) tüm tarayıcılarda çalışmıyor olabilir. Bunu müşterilerine çift POST gerektirmeyen normal değil, ama burada mantığını yeniden incelemek isteyebilirsiniz.

Ayrıca, size $_SESSION['username'] okumak farkındayız ama hiç bu kadar yazmak için görünmüyor?