formulario php ( help! )

Publicado en 'Programación' por unknown20000, 26 Dic 2015.





  1. unknown20000

    unknown20000 Miembro frecuente

    Registro:
    17 Ago 2012
    Mensajes:
    93
    Likes:
    7




    Hola a todos.

    Por favor necesito ayuda URGENTE para programar un formulario en PHP. No sé por qué mi código no funciona. He subido documentos de prueba a un hosting que tengo y de ahí envió los mensajes pero nunca llegan a su destino. Ya revisé mi código varias veces y no encuentro error, lo he hecho tal y como en los turotiales que he visto ( a ellos sí les sale pero a mí no ).
    Otra duda que tengo es si el correo de destino debe ser corporativo o normal ( hotmail, outlook, gmail, etc ).
    ¿Alguien me puede ayudar por favor?
    Lo necesito para un trabajo para el lunes, desde ayer estoy intentando pero nada.
    Aquí el código de prueba :

    HTML :
    <form action="action.php" method="post">
    <input type="text" name="nombre" />
    <input type="email" name="correo" />
    <textarea name="mensaje"></textarea>
    <input type="submit" value="submit" />
    </form>

    PHP :
    <?php

    $t = "correo@hotmail.com" ;

    $f = $_POST['nombre'] . '<br />' . $_POST['correo'] . '<br />' . $_POST['mensaje'] ;

    $headers = 'From : ' . $_POST['correo'] . "\r\n" .
    'Reply-To :' . $t . "\r\n" .
    'X-Mailer : PHP/' . phpversion() ;

    mail( $t, 'Consulta', $f, $headers ) ;
    ?>
     


  2. Epikurolibre

    Epikurolibre Miembro de plata

    Registro:
    3 Oct 2010
    Mensajes:
    2,669
    Likes:
    819
    te compila bien usando un host local?
    quiza debas quitar los espacios entre los puntos, a veces me tiraba error por hacer eso.
     
  3. ferbj

    ferbj Miembro maestro

    Registro:
    17 May 2012
    Mensajes:
    325
    Likes:
    28
    Aconsejo que el correo de envio sea de gmail.com para hacer la prueba con su servidor smtp en localhost.
    Como en localhost no existe un servidor smtp (para envío de correos) entonces tienes que editar el archivo Php.ini buscar la linea ;sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t" (quitarle el ; para descomentar ) y la linea que esta descomentada sendmail_path="C:\xampp\mailtodisk\mailtodisk.exe" agregarle un ; delante osea debe quedar asi ;sendmail_path="C:\xampp\mailtodisk\mailtodisk.exe"
    si tu miras esta carpeta xampp\mailoutput debes ver archivos de texto, si no has editado el archivo php ini como lo indico significa que si se esta enviando correos por defecto el xampp viene con el envío de correo desactivado para smtp, por eso se debe configurar.
    luego editar archivo sendmail.ini esta dentro de sendmail, modificas la siguiente linea smtp_server=smtp.gmail.com y luego el puerto que dice smtp_port=25 cambia el 25 por 587 y luego en
    auth_username=tucorreodeenvio@gmail.com
    auth_password=contraseña
    guardas los archivos luego detienes el servidor y luego lo reinicias para que surjan los cambios , si no funciona con el puerto 587 puedes probar con el 465, espero haberte ayudado.
     
  4. unknown20000

    unknown20000 Miembro frecuente

    Registro:
    17 Ago 2012
    Mensajes:
    93
    Likes:
    7
    Hola.
    Gracias por la respuesta.
    Un favor inmenso ; ayer resolví el problema del fallo de envío de correos, pero aún necesito asegurarme de que mi código sea correcto porque es la primera vez que hago un formulario y para mañana debo entregar el trabajo ( en realidad era para hoy día ).
    ¿Podrías por favor revisar mi nuevo código y decirme si es correcto o si le falta algo?
    EL problema que tenía era que los correos no llegaban porque estaba enviándolos a hotmail. Cuando cambié la cuenta a un correo corporativo se arregló. Pero así está bien porque el cliente tiene ese tipo de correo ( aunque no sé cómo haría si quisiera enviar a hotmail, outlook, gmail o yahoo ).
    Este es mi nuevo código :

    HTML :
    <form action="contact.php" method="post">
    <input type="text" name="nombre" placeholder="Nombre y apellido" required="">
    <input type="email" name="correo" placeholder="Correo" required="">
    <select name="sele">
    <option value="op1">op1</option>
    <option value="op2">op2</option>
    <option value="op3">op3</option>
    </select>
    <textarea name="mensaje" placeholder="Mensaje" required="" maxlength="500"></textarea>
    <input type="submit" value="Enviar">
    </form>

    PHP :
    <?php

    $e1 = "contacto@cualquiercosa.com" ;
    $e2 = "contacto2@cualquiercosa.com" ;
    $e3 = "contacto3@cualquiercosa.com" ;

    $n = $_POST["nombre"] ;
    $c = $_POST["correo"] ;
    $s = $_POST["sele"] ;
    $m = $_POST["mensaje"] ;

    $w = "Nombre : ".$n."\n\nCorreo : ".$c."\n\nMensaje :\n\n".$m ;

    $h = "Content-Type: text/plain ; charset=UTF-8" ;

    if ( $s == "op1" ) {

    $e = $e1 ;

    } elseif ( $s == "op2" ) {

    $e = $e2 ;

    } elseif ( $s == "op3" ) {

    $e = $e3 ;

    }

    if ( mail( $e, "Consulta", $w, $h ) ) {

    echo "Mensaje enviado." ;

    } else {

    echo "Falló. Vuelve a intentarlo." ;

    }

    ?>

    Se supone que cuando seleccione una opción del select me enviará los datos a un correo diferente. Ya lo probé en un hosting gratuito y sí funciona pero igual te agradecería que lo revisaras por si acaso. Gracias.

    Ya los quité también por si acaso, gracias.
     
  5. ferbj

    ferbj Miembro maestro

    Registro:
    17 May 2012
    Mensajes:
    325
    Likes:
    28
    Podrias mejorar al menos la presentación del formulario, esta mal declarado required="" no es necesario las comillas , solo se pone required y poner el formulario en una tabla para mejorar la presentación o sino aplicarle css, me parece que es una tarea de la universidad ?, te falta ponerle los labels (etiquetas para cada campo), declarar <!DOCTYPE html> para que funcione el html5, ahi te envio las modificaciones.
    Si es para un trabajo de la universidad normal funciona, pero debes saber que si lo vas a colocar en la web, debes sanitizar los campos de tus post y hacer las validaciones correspondientes, sino te van a hackear tu web, busca en internet sobre filter_sanitize y filter_validate.
    En la funcion de tu php la de email te falto el headers, From:Correodeenvio@gmail.com


    Si tu correo de envío es uno solo, porque pones un select opcion? y el campo de correo el input text ahi es donde debe colocarse el mail del destinatario, bueno salvo que quieras hacer un fake mailer.
    espero haberte ayudado, saludos.

    <!DOCTYPE html>
    <html>
    <head>
    <title>Formulario Envio</title>
    <meta charset="utf-8">
    </head>
    <body>

    <form action="contact.php" method="post" style="width:400px; padding:50px;">
    <fieldset>
    <legend>Introduzca datos requeridos</legend>
    <label for "nombre">Nombre y Apellido</label>
    <input type="text" name="nombre" placeholder="Nombre y apellido" id="nombre"required><br><br>

    <label for "correo">Email</label>
    <input type="email" name="correo" placeholder="Correo" id="correo" required><br><br>
    <label for "sele">Seleccione una opcion</label>
    <select name="sele">
    <option value="op1">op1</option>
    <option value="op2">op2</option>
    <option value="op3">op3</option>
    </select>

    <br><br>
    <label for "mensaje">Mensaje</label>
    <textarea name="mensaje" placeholder="Mensaje" required maxlength="500" rows=15 cols=35 id="mensaje"></textarea><br><br>

    <input type="submit" value="Enviar">
    </fieldset>
    </form>
    </body>
    </html>


    <?php

    $e1 = "contecto1@cualquiercosa.com";
    $e2 = "contacto2@cualquiercosa.com";
    $e3 = "contacto3@cualquiercosa.com";

    $n = $_POST["nombre"];
    $c = $_POST["correo"];
    $s = $_POST["sele"];
    $m = $_POST["mensaje"];

    $w = "Nombre : ".$n."\n\nCorreo : ".$c."\n\nMensaje :\n\n".$m;

    $h = "Content-Type: text/plain;charset=UTF-8"."\r\n";
    $h.="From:correoenvio@hotmail.com"."\r\n";

    if ( $s == "op1" ) {

    $e =$e1;
    }
    elseif ( $s == "op2" ) {

    $e = $e2;


    }
    elseif ( $s == "op3" ) {

    $e = $e3;

    }
    $correo=mail($e,"Consulta",$w,$h);

    if ($correo)

    {
    echo "Mensaje enviado.";

    } else
    {
    echo "Falló. Vuelve a intentarlo.";
    }

    ?>


     
  6. unknown20000

    unknown20000 Miembro frecuente

    Registro:
    17 Ago 2012
    Mensajes:
    93
    Likes:
    7
    Mi formulario sí tiene estilo sólo que no puse el código CSS aquí.
    Required lo puse así porque a pesar de que estoy usando HTML5 me gusta escribir el código estrictamente como en XHMTL ( pero ahora que lo pienso de repente no se puede escribir así :S ).
    ¿El label es indispensable?
    Lo de sanitizar no tengo idea de qué es O_O Buscaré info al respecto porque definitivamente no quiero que hacken la web ( sobre todo porque no es mía ).
    Y por último, tengo que hacer un formulario que envíe información a tres correos distintos según la opción seleccionada, por eso hice el <select>.

    PD : No entendí esa parte de fake mailer.
     
  7. MPQRS

    MPQRS Miembro frecuente

    Registro:
    28 Jun 2011
    Mensajes:
    219
    Likes:
    21
    php UFF! que antiguo.
     
  8. unknown20000

    unknown20000 Miembro frecuente

    Registro:
    17 Ago 2012
    Mensajes:
    93
    Likes:
    7
    ¿Cuál usas, Python?
    Una vez intenté aprenderlo porque decían era bien sofisticado y permisivo y además más completo que PHP ya que no se limitaba sólo a la web, pero, al final no entendí cómo incrustar el código en mi página XD ( o sea no sabía cómo relacionarlo con mi web. Era diferente a los lenguajes que "conocía" ( js, php ), supongo que eso me asustó un poco u_u.
     
  9. dheybigrover

    dheybigrover Miembro frecuente

    Registro:
    25 Oct 2009
    Mensajes:
    111
    Likes:
    18
    PHP sigue vigente, solo que ahora es mas usual usar frameworks. O CMS, para no volver inventar la rueda y agilizar los trabajos.