2009-12-04 12 views
8

Soy un principiante de PHP y estoy teniendo un problema con la variable POST que algunas veces está vacía cuando las envío. La parte que me está haciendo esto difícil de entender es que esto no sucede todo el tiempo, y generalmente puedo obtener los datos de la publicación en mi programa PHP simplemente refrescando la página. Algunas veces tomará algunas veces, pero una vez que los datos hayan llegado una vez, continuarán bien.

Otras aplicaciones PHP (Wordpress y otras) funcionan bien y nunca dan ningún error, así que estoy bastante seguro de que hay un problema con mi aplicación php.

tengo PHP 4.2.9 instalado en un servidor CentOS 5.2, y tienen KeepAliveTimeout establece en 1.

El código de la aplicación en la que procesar los datos presentados:

<?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); 
?> 

Cualquier ayuda en absoluto sería apreciado

Editar: He encontrado una diferencia entre las solicitudes de trabajo y las que fallan. Firebug me dice que cuando la publicación falla, el estado es un redireccionamiento 302 en lugar de 200 correcto. No estoy seguro de qué puede causar eso, pero tengo el control de caché de encabezado en el formulario de envío tal como aparece en el fragmento de código anterior.

¿Alguna idea?

+0

¿Cómo se ve el formulario con el que está realizando la transferencia? –

+0

¿Esto sucede en todos los navegadores? – DisgruntledGoat

+0

también puede verificar la variable $ _REQUEST que contiene los contenedores y obtener datos – NDM

Respuesta

0

Puede verificar la variable $ _REQUEST, que es una combinación de arrays $ _POST y $ _GET. Si las variables no están allí, no se han enviado y probablemente el problema esté en el lado del cliente.

Puede usar herramientas de análisis de tráfico de red, p. Pestaña Firebug's Net para ver lo que realmente se envió al servidor.

+0

He marcado la variable REQUEST y el resultado es el mismo. También revisé la solicitud de publicación con Firebug, y las variables siempre se pasan correctamente. Es solo la aplicación php que no los está recibiendo. – Marc

+1

Parece que la aplicación PHP está cambiando las variables dentro de sí misma. También colocaría un cheque en el punto de entrada (las variables deberían estar bien ahí) y luego averiguaría qué parte del código es "deshacerse" de ellos. –

+0

He intentado hacer esto, sin embargo, el problema todavía ocurre cuando lo único que tengo en mi código php es var_dump ($ _ POST); – Marc

0

La variable $_POST es cumplimentada por el motor PHP, no por ninguna aplicación. Por lo tanto, si está vacío, está vacío y su código debe tenerlo en cuenta, de la misma manera que lo hace con las variables $_SESSION y $_SERVER.

7

Olvidó el parámetro name = en su etiqueta INPUT.

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

Esta respuesta debe marcarse como la causa más probable para un principiante. Acabo de tener exactamente ese problema, al trabajar en javascript, tenía todas las etiquetas "id" especificadas y estaban funcionando, pero cuando la página se envió al servidor, esperaba que el valor de $ _POST fuera la identificación. Agregar etiquetas de "nombre" lo solucionó de inmediato. – Bill

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

Por defecto, este enviará el código de estado 302 también. La mayoría de los navegadores solicitarán el objetivo de un 302 con una solicitud GET, independientemente del tipo de solicitud original. Si se desea que ambas solicitudes para contener los datos POST entonces usted podría intentar un 307:

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

Pero puede que esto no funciona en todos los navegadores (que debería funcionar en cualquier cosa no antigua). Si bien es posible que desee volver a examinar su lógica aquí, no es normal exigir a los clientes un doble POST.

Además, ¿sabe que leyó $_SESSION['username'] pero parece que nunca le escribe?

Cuestiones relacionadas