Descubre el error del formulario

  • Autor Autor NASH
  • Fecha de inicio Fecha de inicio
N

NASH

Dseda
SEO
Verificación en dos pasos activada
Verificado por Whatsapp
Hola a todos. Intenten utilizar el siguiente formulario y verán que les da un error al apretar el botón "Submit".

Este es el código del formulario:

Insertar CODE, HTML o PHP:
<h2 class="strip-title alignleft-text">
                            <span class="strip-inner">Send us a Message</span>
                        </h2>
                        <div class="three-fourth column">
                            <div id="ajax_message"> </div>                        
                            <form class="contact-frm" method="post" action="js/send.php">
                                <input type="text" value="Name" title="Name" class="Textbox" name="txtname" />
                                <input type="text" value="Email" title="Email" class="Textbox" name="txtemail" />
                                <input type="text" value="Phone" title="Phone" class="Textbox" name="txtphone" />
                                <textarea cols="20" rows="1" title="Enquiry" class="Textbox" name="txtenquiry">Enquiry</textarea>
                                <input type="submit" name="submit" value="submit" class="theme-btn large float-right" />
                            </form>
                        </div>


El contenido del archivo send.php es el siguiente:


Insertar CODE, HTML o PHP:
<?php
if(!$_POST) exit;


        $to 	  = 'email@email.com';
	$name	  = $_POST['txtname'];
	$email    = $_POST['txtemail'];
	$phone    = $_POST['txtphone'];	
	$subject  = 'Enquiry';
    $comment  = $_POST['txtenquiry'];
        
	if(get_magic_quotes_gpc()) { $comment = stripslashes($comment); }


	 $e_subject = 'You\'ve been contacted by ' . $name . '.';


	 $msg  = "You have been contacted by $name with regards to $subject.\r\n\n";
	 $msg .= "Phone No: $phone\r\n\n";		 
	 $msg .= "$comment\r\n\n";
	 $msg .= "You can contact $name via email, $email.\r\n\n";
	 $msg .= "-------------------------------------------------------------------------------------------\r\n";
								
	 if(@mail($address, $e_subject, $msg, "From: $email\r\nReturn-Path: $email\r\n"))
	 {
		 echo "<p class='ajax_success'>Thanks :)</p>";
	 }
	 else
	 {
		 echo "<p class='ajax_failure'>Sorry your message not sent, Try again Later.</p>";
	 }
?>

Vamos muchachos. El que descubra el error, ganará más prestigio en Forobeta por sus conocimientos. :encouragement:
 
elimina el @ en : if(@mail($address, $e_subject, $msg, "From: $email\r\nReturn-Path: $email\r\n")
para que puedas ver el error que te da la funcion mail...

Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\AppServ\www\ay.php on line 35


El poblema es sencillamente podria ser que no has configuado tu mailserver...

Saludos!
 
Básicamente es lo que dice [MENTION=34258]Jhoubert[/MENTION]: La arroba evita mostrar el error, así que para obtener más detalles deberías quitarlas.

Además, si ni siquiera aún así se muestran los errores puedes poner debajo de la línea if(!$_POST) exit; un
PHP:
ini_set('display_errors', 'On');

Finalmente, deberías de implementar algún tipo de validación del lado del servidor (por ejemplo, comprobar que los campos no están vacíos y que el email es un email), ya que la validación por javascript es muy fácil de saltar 😉
 
Muy Correcto lo que dices, pero no estoy evitando mostrar el error, estoy es mostrando su error.
y su principal error fue colocar el @ y no saber que falla...

Básicamente es lo que dice [MENTION=34258]Jhoubert[/MENTION]: La arroba evita mostrar el error, así que para obtener más detalles deberías quitarlas.

Además, si ni siquiera aún así se muestran los errores puedes poner debajo de la línea if(!$_POST) exit; un
PHP:
ini_set('display_errors', 'On');

Finalmente, deberías de implementar algún tipo de validación del lado del servidor (por ejemplo, comprobar que los campos no están vacíos y que el email es un email), ya que la validación por javascript es muy fácil de saltar 😉

Saludos!
 
Como bien lo han mencionado es posible que sea por la funcion mail() ... ya que puedes no tener activado un servidor de mail SMTP en tu servidor ... pero y que si lo tuvieras? ... bueno suponiendo que lo tienes ¿no crees que ese error nunca lo marcaría? ... es muy simple el mail() dentro del if() ...Ahi esta la respuesta si el if comprueba si funciona correctamente la funcion mail() y si no funciona es decir si hay algun error se iría a mostrar en este caso "<p class='ajax_failure'>Sorry your message not sent, Try again Later.</p>"; por lo tanto quiere decir que la apreciación de los usuarios de arriba es incorrecta ya que si es por la funcion mail o no que en ello pueden estar correcto no quiere decir que no funcione por lo que dicen ya que aun asi debería de volver "<p class='ajax_failure'>Sorry your message not sent, Try again Later.</p>"; ... esto quiere decir que si no es la funcion mail() es la conexion javascript.... sugiero que pongas un mensaje de alert con el mensaje devuelto por la petición asi efectivamente apreciaremos si es la funcion mail() .. o simplemente no hay respuesta de parte de AJAX ... ¿Que lioso esto de la programación cierto? ... vaya que cualquiera se iría a que es la funcion mail() ... pero falta profundizar mas y sacar mas posibles errores.... Aunque por revisar el source veo que tu no haz programado el codigo "supongo" ... por lo que posiblemente todo apunte a la funcion mail() ya que al ser codigo copiado apunta mas probablemente a que sea error tuyo y no hayas activado SMTP ... pero vale que si tu hiciste el codigo entonces es error AJAX.

Un saludo :encouragement:
 
Este tema ya está solucionado en otro post del mismo autor.

En la línea
Insertar CODE, HTML o PHP:
if(@mail($address, $e_subject, $msg, "From: $email\r\nReturn-Path: $email\r\n"))
debe cambiar $address por $to, ya que $address no esta definido en ninguna parte.
 
Muy Correcto lo que dices, pero no estoy evitando mostrar el error, estoy es mostrando su error.
y su principal error fue colocar el @ y no saber que falla...



Saludos!

Es lo que he dicho 😛 con la arroba evitas mostrarlo, así que quitándola lo muestras.
 
Atrás
Arriba