Ver Mensaje Individual
  #3 (permalink)  
Antiguo 29/12/2010, 09:06
Avatar de Gambinoh
Gambinoh
 
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 13 años, 5 meses
Puntos: 11
Respuesta: Alternativas a die() en este código

Cita:
Iniciado por repara2 Ver Mensaje
Tal y como lo planteas no hay alternativa al die, acaso puedes implementar una validación de esos datos. Si hay error devuelves al usuario a la página del form o algo similar. Para validar mails utiliza [url]http://www.forosdelweb.com/f18/pequenisimo-aporte-funcion-para-validar-emails-848993/[/url]

Una versión muy simple con validación sería algo así:
Código PHP:
<?php
if (isset($_POST['submit']))
{

    
//AGREGAR VARIABLE PARA APUNTAR LOS POSIBLES ERRORES
    
$error "";
    
$nombre $_POST["nombre"];
    
$remitente $_POST["email"];
    
$asunto$_POST["asunto"];
    
$mensaje$_POST["mensaje"];

    
$mensaje wordwrap($mensaje70);

    
$encabezados "From: $remitente" "\r\n" "Reply-To: $remitente" "\r\n" 'Content-type: text/plain; charset=iso-8859-1';

    if(empty(
$remitente)){
        
$error .= "Remitente vacío.";
    } elseif (empty(
$mensaje)){
        
$error .= "Msg vacío.";
    } elseif (empty(
$asunto)) {
        
$error .= "Asunto vacío.";
    } elseif (empty(
$nombre)) {
        
$error .= "Nombre vacío.";
    } else {
        
$destino "[email protected]";
    }
    
    if(
$error!=""){
    
mail($destino$asunto$mensaje$encabezados) or die ("Mensaje no enviado");
    echo 
"Mensaje enviado";
    }
    else{
        echo 
$error;
    }

    
}
?>
Espero que sirva, saludos
Hey muchas gracias eres un crack, funciona perfectamente solo que te confundiste en if($error!="") así que puse if($error=="") y ya va todo.

Por una cuestión matemática se ve que el if elseif else lee desde el principio hasta que un resultado en su lista de posibilidades coincide, así que hice esto:

Cita:
<?php
if (isset($_POST['submit']))
{
$error = "";
$nombre = $_POST["nombre"];
$remitente = $_POST["email"];
$asunto= $_POST["asunto"];
$mensaje= $_POST["mensaje"];

$mensaje = wordwrap($mensaje, 70);

$encabezados = "From: $remitente" . "\r\n" . "Reply-To: $remitente" . "\r\n" . 'Content-type: text/plain; charset=iso-8859-1';

if(empty($nombre) && empty($asunto) && empty($mensaje) && empty($remitente)) {
$error .= "Hay campos sin rellenar";
} elseif (empty($nombre) && empty($asunto) && empty($remitente)) {
$error .= "Hay campos sin rellenar";
} elseif (empty($nombre) && empty($asunto) && empty($mensaje)) {
$error .= "Hay campos sin rellenar";
} elseif (empty($nombre) && empty($remitente) && empty($mensaje)) {
$error .= "Hay campos sin rellenar";
} elseif (empty($remitente) && empty($asunto) && empty($mensaje)) {
$error .= "Hay campos sin rellenar";
} elseif (empty($asunto) && empty($remitente)) {
$error .= "Hay campos sin rellenar";
} elseif (empty($nombre) && empty($asunto)) {
$error .= "Hay campos sin rellenar";
} elseif (empty($nombre) && empty($remitente)) {
$error .= "Hay campos sin rellenar";
} elseif (empty($nombre) && empty($mensaje)) {
$error .= "Hay campos sin rellenar";
} elseif (empty($asunto) && empty($mensaje)) {
$error .= "Hay campos sin rellenar";
} elseif (empty($remitente) && empty($mensaje)) {
$error .= "Hay campos sin rellenar";
} elseif (empty($mensaje)){
$error .= "Mensaje vacío";
} elseif (empty($asunto)) {
$error .= "Asunto vacío";
} elseif (empty($nombre)) {
$error .= "Nombre vacío";
} elseif(empty($remitente)){
$error .= "Email vacío";
} else {
$destino = "[email protected]";
}

if($error == ""){
mail($destino, $asunto, $mensaje, $encabezados) or die ("Mensaje no enviado");
echo "Mensaje enviado";
}
else{
echo $error;
}

}
?>
Ahora solo me falta controlar el campo del email que tenga un formato correcto con tu pequeña aportación o con la función predefinida esa que un poco más abajo sugieren.