No me funciona $HTTP_POST_VARS en PHP

Tengo un problema al recibir datos de un formulario enviado y recogido por PHP. El problema es que parece como si mi formulario no se estuviera...

La FAQ No me funciona $HTTP_POST_VARS en PHP tiene

Pertenece a la categoría:
Pregunta
Tengo un problema al recibir datos de un formulario enviado y recogido por PHP. El problema es que parece como si mi formulario no se estuviera enviando... Yo hago esto para saber si estoy recibiendo datos de formulario:


if (!$HTTP_POST_VARS){


Pero siempre parece como si no se estuvieran enviando datos. Osea, como si no se enviase el formulario. Yo estoy seguro que los datos del formulario se envían por post, con lo que esta variable debería funcionar y decirme que sí se recibe alguna cosa. ¿Qué puede estar pasando?

Respuesta de Miguel Angel Alvarez
Algunas versiones de PHP modernas (PHP 5 o posteriores) tienen o no activada esa variable $HTTP_POST_VARS.

Resulta que esa variable es antigua y hace tiempo se sustituyó por $_POST que es lo mismo, pero más corto. Así que prueba con $_POST y debería funcionar.

$HTTP_POST_VARS funcionaba en otros servidores porque esa variable estaría activada, debe poder hacerse desde el php.ini, pero es mejor que la vayas sustituyendo por la nueva $_POST para asegurarte que tus scripts PHP van a funcionar en cualquier servidor moderno.
Volver al árbol de categoríasVolver al árbol de categorías

Comentarios

Juan Ismael Venegas Cáceres

17/3/2009
También puedes usar en la página destino la función extract(): extract($_POST); y extract($_GET); estas te permitirán pasar fácilmente las variables de tu formulario origen.

Carlos Aimacaña Toledo

17/3/2009
Tu instrucción debería ser:

if (!$_POST){
.
.
.}

Las variables como $HTTP_POST_VARS,$HTTP_GET_VARS, $HTTP_ENV_VARS, $HTTP_SESSION_VARS, $HTTP_COOKIE_VARS, entre otras, se usaron en la configuración por defecto de PHP previas a la versión 4.1.0, en esta versión esas variables quedaron reemplazadas por $_GET, $_POST, $_COOKIE, $_SESSION, $_ENV, etc.

Se puede habilitar las variables anteriores (no es aconsejable por seguridad) editando la directiva en el archivo PHP.ini del ser servidor (claro si se tiene privilegios de hacerlo).

Chefo

17/3/2009
Efectivamente, como te han comentado, es mejor recurrir a $_POST para datos enviados por método post y a $_GET para datos enviados por método get. Las matrices de entorno $HTTP_POST_VARS y $HTTP_GET_VARS se consideran deprecadas y, aunque no hay nada oficial, se comenta que en próximas versiones podrían desaparecer.
Por otro lado, asegúrate no solo de que tu formulario se envíe por método post, sino de que los campos definidos en XHTML tengan asignada la propiedad name, que es la que contiene el nombre que php recogerá. No te vale la propiedad id, que es para uso de JavaScript.
Trata de identificar todas las varibles que te lleguen añadiendo unas líneas de prueba, así:

echo "<pre>";
var_dump($_POST);
echo "</pre>";

Eso te permite ver todo lo que llegue por post a tu script. Luego, cuando ya lo tengas todo claro, quita esas líneas.

Espero que te sirva de algo.

fran

17/5/2010
fran
Hola,

no puedo enviar datos desde una plantilla flash que he comprado.
mi server tiene php5 instalado. este es el código del php


**********************
<?
//Send Mail PHP
//
//Upload this file to the root of your web directory

if(!empty($HTTP_POST_VARS['sender_mail']) || !empty($HTTP_POST_VARS['sender_message']) || !empty($HTTP_POST_VARS['sender_name']))

{
//Insert Address(s) to send the mail to
$to = "pep@pep.com,pep@pep.es";

//Subject
$subject = "Message from nastplas.com.com";

//Body
$body = stripslashes($HTTP_POST_VARS['sender_message']);

$body .= " --------------------------- ";

$body .= "Mail sent by: " . $HTTP_POST_VARS['sender_name'] . " <" . $HTTP_POST_VARS['sender_mail'] . "> ";

$body .= " ";

$body .= " service powered by nastplas.com ";

$header = "From: " . $HTTP_POST_VARS['sender_name'] . " <" . $HTTP_POST_VARS['sender_mail'] . "> ";

$header .= "Reply-To: " . $HTTP_POST_VARS['sender_name'] . " <" . $HTTP_POST_VARS['sender_mail'] . "> ";

$header .= "X-Mailer: PHP/" . phpversion() . " ";

$header .= "X-Priority: 1";

//Mail Sentinel
if(@mail($to, $subject, $body, $header))

{
//Return Mail Status to Flash Form
echo "output=sent";

} else {

echo "output=error";

}

} else {

echo "output=error";

}

?>

********************

he probado también con $_POST y no funciona.

ya no se que hacer.

un saludo

ray_felix

13/7/2011
Gracias
Gracias por explicar se te agradese
FAQ relacionadas
Volver al árbol de categoríasVolver al árbol de categorías