Pregunta php $ _POST matriz vacía al enviar el formulario


Tengo un CMS personalizado que he construido que funciona perfectamente en mi cuadro de desarrollo (Ubuntu / PHP5 + / MySQL5 +).

Acabo de moverlo a la caja de producción para mi cliente y ahora todos los envíos de formularios se muestran como matrices $ _POST vacías.

Encontré un truco para verificar que los datos se pasen usando file_get_contents('php://input'); y los datos se muestran bien allí - el $_POST/$_REQUEST las matrices están siempre vacías.

También he verificado que los encabezados de tipo de contenido son correctos también a través de Firebug (application/x-www-form-urlencoded; charset=utf-8)

Este problema está sucediendo independientemente de si un formulario se envía a través de AJAX o de un envío de formulario regular.

¡Cualquier ayuda es muy apreciada!


73
2017-08-15 21:35


origen


Respuestas:


Sé que esta pregunta se refería a POST a través de un Formulario, pero vine aquí en busca de respuestas para un problema similar al realizar una POST con tipo de contenido JSON. Encontré la respuesta y quería compartirla, ya que me costó mucho tiempo.

Al usar el tipo de contenido JSON, la matriz $ _POST no se completará (creo que solo con formularios de varias partes)

Esto es lo que funcionó para corregir el problema:

$rest_json = file_get_contents("php://input");
$_POST = json_decode($rest_json, true);

¡Espero que esto ayude a alguien!


128
2018-02-10 04:58



Aquí hay otra posible causa: mi formulario se enviaba a domain.com sin la WWW. y yo había configurado una redirección automática para agregar el "WWW". La matriz $ _POST se vaciaba en el proceso. Entonces, para arreglarlo todo lo que tenía que hacer era enviarme a www.dominio.com


79
2017-10-27 16:22



Tuve un problema similar. Resultó ser una solución simple. En la forma que tenía

<form action = "directory" method = "post">

donde directorio era el nombre de ... el directorio. Mi matriz POST estaba totalmente vacía. Cuando miré la url en mi navegador, se mostró con una barra inclinada al final.

Agregando la barra inclinada hacia el final de mi acción hizo el truco -

<form action = "directory /" method = "post">

¡Mi array $ _POST estaba lleno otra vez!


16
2017-11-20 20:29



Asegúrese de hacerlo en php.ini:

  • track_vars (solo está disponible en versiones PHP muy antiguas) está configurado para On
  • variables_order contiene la carta P
  • post_max_size se establece en un valor razonable (por ejemplo, 8 MB)
  • (si usa parche suhosin) suhosin.post.max_vars y suhosin.request.max_vars son lo suficientemente grandes

Supongo que la segunda sugerencia mía resolverá tu problema.


11
2017-08-15 21:45



No tengo una solución elegante en este momento, pero quería compartir mis hallazgos para futuras referencias de otras personas que enfrentan este problema. La fuente del problema fue 2 valores php anulados en un archivo .htaccess. Simplemente agregué estos 2 valores para aumentar el límite del tamaño del archivo para las cargas de archivos de 8 MB por defecto a algo más grande. Observé que simplemente tener estos 2 valores en el archivo htaccess, ya sea mayor o menor que el predeterminado, causó el problema .

php_value post_max_size xxMB
php_value upload_max_filesize xxMB

Agregué variables adicionales para elevar los límites de todos los suhosin.post.xxx/suhosin.upload.xxx vars, pero estos no tuvieron ningún efecto sobre este problema, lamentablemente.

En resumen, realmente no puedo explicar el "por qué" aquí, pero he identificado la causa raíz. Mi sensación es que, en última instancia, se trata de un problema suhosin / htaccess, pero desafortunadamente no pude resolverlo más que para eliminar los 2 valores anulados de php anteriores.

Espero que esto ayude a alguien en el futuro ya que maté un puñado de horas averiguando esto. Gracias a todos los que se tomaron el tiempo para ayudarme con esto (MrMage, Andrew)


4
2017-08-16 18:09



Podría resolver el problema usando enctype = "application / x-www-form-urlencoded" ya que el valor predeterminado es "text / plain". Cuando ingresa $ DATA, el separador es un espacio para "texto / plano" y un carácter especial para "urlencoded".

Saludos cordiales Franco


4
2017-12-30 19:08



Descubrí que al publicar desde HTTP a HTTPS, $_POST viene vacío Esto sucedió mientras probaba el formulario, pero me tomó un tiempo hasta que me di cuenta de eso.


4
2017-08-09 14:50



Me encontré con un problema similar aunque levemente diferente y me llevó 2 días entender el problema.

  • En mi caso, también la matriz POST estaba vacía.

  • Luego se verificó con file_get_contents ('php: // input'); y eso también fue vacío.

Más tarde descubrí que el navegador no estaba solicitando la confirmación para volver a enviar los datos del formulario después de Si actualizo la página cargada después del envío de POST. Fue una página directamente refrescante. Pero cuando cambié la URL del formulario a una diferente, estaba aprobando POST correctamente y solicité volver a enviar los datos cuando intenté actualizar la página.

Luego verifiqué qué está mal con la URL real. No hubo errores en la URL, sin embargo, apuntaba a una carpeta sin index.php en la URL y estaba revisando POST en index.php.

Aquí dudaba que la redirección de / a /index.php cause la pérdida de los datos POST y la URL probada con la adición de index.php a la URL.

Eso funciono.

Lo publicó aquí para que alguien lo encuentre útil.


4
2018-04-23 12:40