Por favor ayudenme,estoy creando un formulario para enviar a un e-mail, con el siguiente script php:
 
<?php 
 
  ## VARIABLES
  ## Dirección de tu correo
$micorreo="[email protected]"; 
  ## Asunto axiliar si no lo introduce un asunto que identifique la procedencia del correo.
$xasunto="Correo desde tu pagina";
 ## Pagina final de gracias. Si el formulario no incluye este campo oculto del formulario. 
$gracias_defecto="http://www.xxxxx.com"; 
  ## Página final si se produce un error al enviar el correo
$error_correo="http://www.error.html"; 
  ## variable auxiliar, que produce un salto de línea
$retorno="\r\n";
 
  ## CABECERAS DE CORREO
  ## $nombre $correo son variables que contienen los valores de: nombre y correo del formulario.
$headers = "MIME-Version: 1.0\r\n" ;
  ## campos y variables nombre, $nombre y correo $correo. No pueden ser modificados
  ## Han de mantenerse en el formulario para utilizar el mismo script con distintos formularios 
$headers .= "From: $nombre<$correo>\r\n";
  ## Responder al correo
$headers .= "Reply-To: $correo<$correo>\r\n";
  ## Otras cabeceras que pueden ponerse si ocurren problemas u omitirse si todo va bien.
  ## Obligatoriamente, cada elemento de la cabecera termina en \r\n Nueva línea.
  ## $headers .= "X-Mailer: PHP/" . phpversion();
  ## $headers .= "X-Sender: $correo<$correo>\r\n";
  ## $headers .= "Return-Path: <$correo>\r\n";
  ## $headers .= "Cc: $nombre<$correo>\r\n"; 
 
  ## CUERPO DEL MENSAJE INICIO
  ## Obtención de la IP del visitante
  ## Empezamos a contruir el mensaje final, sumando los elementos del mensaje
$mfinal.="IP visitante: ";
  ## Guardamos la IP del visitante
$mfinal.=$HTTP_SERVER_VARS['REMOTE_ADDR'];
$mfinal.=": ";
  ## Y el puerto del usuario
$mfinal.=$HTTP_SERVER_VARS['REMOTE_PORT'];
  ## añadimos dos retornos de línea
$mfinal.=$retorno;
$mfinal.=$retorno; 
 
  ## CUERPO DEL MENSAJE AÑADIDO DE CAMPOS AL MENSAJE
  ## $vareliminar Número de botones del formulario y campos ocultos (últimos elementos) + 1 --> en este caso (1+1)
  ## Si queremos eliminar del mensaje el campo oculto de la página final $vareliminar=3;
$vareliminar=2;
  ## Almacenar en un array los nombres de variables del formulario enviado
$claves_array=array_keys ($HTTP_GET_VARS);
  ## de i=0 hasta el número de campos del formulario, - variables a eliminar
for ($i=0;$i<=(count($HTTP_GET_VARS)-$vareliminar);$i++){
  ## Obtenemos el nombre de cada campo en concreto
$nombrevar=$claves_array[$i];
  ## Sumamos el nombre de campo de formulario al mensaje final
$mfinal .= $nombrevar;
$mfinal .= ": ";
  ## Y añadimos el contenido que haya introducido nuestro visitante
$mfinal .= $HTTP_GET_VARS[$nombrevar]; 
  ## Separamos cada campo por dos retornos, podemos eliminar uno
$mfinal .= $retorno;
$mfinal .= $retorno;
}
  ## Si no hay asunto, o no contiene nada, le damos al email un asunto defecto
if (is_null($asunto)){ $asunto2="correo desde la web";}
  ## Si hay asunto, añadimos un prefijo propio para identificar que es correo desde la web.
else { $asunto2 ="Asunto-> $asunto"; }
 
  ## ENVÍO DEL CORREO
  ## Para finalizar, envíamos el correo, y comprobamos el resultado
$resultado=mail($micorreo, $asunto2, $mfinal, $headers);
  ## Si quisiésemos enviar un mensaje de acuso de recibo, añadimos esta línea, sabiendo que:
  ## tenemos que asignar estas variables $asuntoreply (Asunto), $mreply (mensaje), $headers2(mensaje)
  ## de modo similar a como hemos construido las variables anteriores
  ## $resultado2=mail($correo, $asuntoreply, $mreply, $headers2);
 
  ## COMPROBACIÓN
  ## Si no se ha podido enviar el correo.
if ($resultado ==true) 
{
  ## Si no hay página de gracias carga las página de defecto
if (is_null($pagina_gracias)){ header( "Location: $gracias_defecto" );}
else{ 
  ## Si hay página de gracias, cárgala
header( "Location: $pagina_gracias" );
}
}
  ## Si se ha producido un error, advierte al usuario
else header( "Location: $error_correo" );
?>
 
 
 
 
 
 
con el siguiente formulario:
 
 
 
 
 
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Documento sin titulo</title>
</head>
 
<body>
 
<!-- Encabezamiento del formulario. Antes de enviarlo, ejecuta la rutina de validación JScript -->
<!-- Si el JScript retorna falso, no se produce el envío de correo -->
<!-- Modificar la trayectoria del scipt mail.php si lo tenemos en otro directorio ACTION="directorio/mail.php" -->
<!-- para ASP, utilizar ACTION="mail.asp" -->
<!-- <FORM name = "formulario" ACTION="mail.asp" METHOD="POST" onSubmit="return validate1(this)"> -->
<FORM name = "formulario" ACTION="mail.php" METHOD="POST" onSubmit="return validate1(this)">
 
<!-- Los nombres de campos correo, y nombre, son obligatorios para todos los formularios -->
<font color="#000000" size="2"><b> Correo</b></font> 
<input type="text" name="correo" size="52">
<BR>
 
<FONT color="#000000" size="2"><b>Nombre</b></FONT>
<INPUT TYPE="text" NAME="nombre" size="40">
<BR>
 
<!-- El resto de campos, puede tener un nombre cualquiera-->
<font color="#000000" size="2"><b>Asunto</b></font> 
<input type="text" name="asunto" size="52">
<!-- Puedes poner otros campos como de tipo oculto que el usuario no ve -->
<!-- <input type="hidden" name="asunto" VALUE="Asunto que quieras poner en el mensaje"> -->
<BR>
 
<!-- Campo de lista de selección -->
<FONT size="2"><b>Pagina web</b></FONT> 
<SELECT name="selectweb">
<!-- Campo seleccionado inicialmente -->
<OPTION value="Ninguna" selected>Ninguna</OPTION>
<OPTION value="Chollolinks">Chollolinks</OPTION>
<!-- útil para obtener un ancho mayor para la lista de selección (toma la cadena mas grande) -->
<!-- otra alternativa es utilizar estilos css <SELECT name="selectweb" style="width:300px;"> donde px son pixeles, y 300 su ancho-->
<OPTION>__________________</OPTION>
</SELECT>
<BR>
 
<!--Campo que puede omitir, añadir, o modificar a conveniencia -->
<FONT size="2"><b>Valoracion</b></FONT>
<!-- Campo cuadro selección -->
<!-- podríamos omitir el valor, value="x ", para esta función nos basta con un nombre descriptivo ó utilizar el mismo nombre para todos los cuadros. Entonces, si que necesitamos especificar un valor -->
<B>
<!-- Inicialmente, tenemos seleccionado No sabe, no contesta-->
<INPUT name="Ns/Nc" type="checkbox" id="Ns/Nc" value="checkbox" checked> Ns/Nc
<INPUT name="v1" type="checkbox" id="v1" value="1"> 1
<INPUT name="v2" type="checkbox" id="v2" value="2"> 2
</B>
 
<BR>
<!--Campo que puede omitir, añadir, o modificar a conveniencia -->
<FONT size="2"><b>Consulta</b></FONT>
<!--Grupo de Campo Alternos. Solo permite seleccionar un estado siempre que tengan el mismo name, en este caso grupo de opciones -->
<LABEL>
<B>
<!--Inicialmente, tenemos seleccionado el valor General. Solo se envía un valor, el seleccionado-->
<INPUT type="radio" name="GrupoOpciones" value="General" checked>
General</B></LABEL>
<B>
<LABEL>
<INPUT type="radio" name="GrupoOpciones" value="Cambio Enlaces">
Cambio Enlaces</LABEL>
<LABEL>
<INPUT type="radio" name="GrupoOpciones" value="Publicidad">
Publicidad</LABEL>
</B>
 
<BR>
<!--Campo de líneas múltiples de 50 columnas (caracteres) y 10 filas (líneas) -->
<textarea name="mensaje" cols="50" rows="10">Contenido de tu mensaje </textarea>
 
<BR>
<!-- Campo oculto con la dirección de la página de gracias final-->
<!-- Permite individualizar la página final para cada formulario-->
<INPUT TYPE="hidden" NAME="pagina_gracias" VALUE="http://www.gracias.com">
 
<!-- Puedes quitar variables del script, como la página de error y ponerlo como un campo oculto con el mismo nombre, pero sin $ en el caso del php. Recuerde, que php, distingue entre mayúsculas y minúsculas. --> 
<!--Lo tengo así porque resulta mas sencillo. Lo importante del script, es que maneja cualquier número de campos sin modificar el script -->
 
<!-- Botón de enviar . Los botones siempre al final, para que los elimine nuestro script php-->
<INPUT name="submit" TYPE="submit" VALUE="Enviar">
 
</FORM>
 
 
 
<script language="JavaScript">
<!--//
  // La variable form, de la función, contiene los datos del objeto formulario, y permite manipular sus propiedades.
function validate1 (form) {
 
  // VARIABLES
  // Variable para controlar si los campos estaban cumplimentados
r=1;
 
  // TEST DE CAMPOS
  // Si vale "" , se alerta, r=0, alerta al usuario y coloca el foco en el campo nombre
if (form.nombre.value==""){r=0;alert("Porfa, dime tu nombre!");form.nombre.focus};
  // Comprueba si este campo de correo tiene al menos una @
if (form.correo.value.indexOf('@',0)==-1) {r=0;alert("Sin correo para responder, No te Comes Nada !");form.correo.focus};
  // Para cada campo a comprobar, copiar y pegar esta línea reemplazando el nombre del campo mensaje
if (form.mensaje.value==""){r=0;alert("Me escribes ¿pero no me cuentas nada?");form.mensaje.focus};
 
  // RETORNAR AL ENVÍO
  // Si ha hay campos sin cubrir, interrumpimos el envío del correo -return false-
if (r==0) { return false; }
  // Si todo está bien, te dispones a enviar el contenido del formulario al script php, -return true-
  // Además, alertas al usuario para que no pulse mas veces, aún así, la gente, no se cansa.
else { alert ("con una vez es bastante gracias. Su mensaje se está procesando");return true; }
} 
//---->
</script>
 
</body>
</html>
 
 
 
 
 
El problema es que al enviar los datos solo guarda los datos del encabezado:
    - Correo    
    - Nombre
    - Asunto
el Ip del visitante y el puerto del usuario, pero no guarda los demas campos.
Que debo corregir, alguien ayudenme por favor 
  
 
 

