Regresar a la página www.ComoCrearTuWeb.com
Resultados 1 al 6 de 6

Tema: Dos actions en un form.

  1. #1
    Recien Llegado! Pasaba por aquí...
    Fecha de Ingreso
    14 abr, 12
    Mensajes
    2
    Poder de Reputación
    0

    Post Dos actions en un form.

    Hola! Llevo un tiempo probando el tema de hacer páginas Web y para aprender estoy "copiando" una pequeña web de una empresa. La web tiene una página de contacto con un formulario. Yo quiero que cuando un cliente rellena el formulario, sus datos y consulta queden registrados en una base de datos y también recibir un correo electrónico en mi bandeja de entrada. Como estoy con plan gratuito del hosting RazyHosting (y estoy muy contento) me encuentro con que no me deja enviar emails para evitar spam.
    Para salir del paso y, sobre todo, para aprender, estoy utilizando el servicio gratutito Melodysoft (que he encontrado en este foro). El problema con el que me encuentro ahora es que mis capacidades me permiten recibir el email o guardar la consulta en la base de datos, no hacer ambas cosas a la vez...
    Me he pasado la tarde buscando por internet como solucionar el tema y no he conseguido sacar nada en claro... Hablan de usar session, de algún script en javascript y más cosas que no entiendo... Mi nivel es el de los manuales de esta web xD. :D
    Analizando el problema tengo lo siguiente:
    Si primero guardo los datos en la base de datos, ¿como hago para enviar de nuevo el form a otra página?. Mi duda podría ser cómo hacer de forma automática y mediante código un submint. Creo que si soluciono lo del submint podría enviar fácilmente los datos del formulario a las dos página haciendo esto (Aquí llegamos mediante el submint "manual" de una página .html y después de que el usuario haya introducido los datos) de todas formas, no se si esto funcionaría:

    Código PHP:
    <?php
    $USUARIO
    ="$_POST[USUARIO]";
    //Aquí iria todo el código para guardar los datos en la base de datos...

    //Y después, este otro código para enviar los datos del formulario a melodysoft y que me llegue el correo:
    echo "<form method=\"post\" action=\"http://forms.melodysoft.com\">";
    echo 
    "<input type=\"hidden\" name=\"id\" value=\"nombre_de_mi_encuesta\">";    
    echo 
    "<input type=\"hidden\" name=\"NOMBRE\" value=\"$USUARIO\">";
    echo 
    "<p><input type=\"submit\" value=\"Enviar\"></p>"//Aquí iria el submit automático y no lo que está escrito... t.t
    echo "</form>";
    ?>
    ¿Se os ocurre alguna solución sencilla y elegante?

    Mil gracias!

  2. #2
    Esto empieza a ser un vicio... Habitante Avatar de codomodragon
    Fecha de Ingreso
    11 nov, 09
    Ubicación
    Venezuela
    Mensajes
    1,252
    Poder de Reputación
    14
    Una pregunta amigo el sistema de correo el cual mencionas como funciona?
    ¿Debes pasar todos los datos através del método post o también lo puedes hacer através del método get?

    Esto lo pregunto debido que asta donde se esto no es posible de realizar con php y creo que con java seria un enorme problema.
    Si el servidor de correo admite envíos de formularios por el método get es mucho mas sencillo de lo que crees XD
    OMG WTF BBQ
    Disculpen cualquier error o metidota de pata, la universidad me tiene loco y candado.

    www.mangasve.com.ve el lugar venezolano del manga

    http://www.rauch.cl/cctw.jpg

  3. #3
    Esto empieza a ser un vicio... Habitante
    Fecha de Ingreso
    02 may, 11
    Ubicación
    Santiago, Chile
    Mensajes
    1,554
    Poder de Reputación
    14
    Hola:

    No deberías tener problemas con el guardado de los datos y el envío del email al mismo tiempo. Son dos cosas distintas que no influyen en gran cantidad el rendimiento del servidor, así que no creo que el servidor haya bloqueado ambos procesos a la vez, yo creo que hay un error en tu código. Supongamos tienes el siguiente formulario:

    Código HTML:
    <html>
    <head>
      <title>Envio de datos</title>
    </head>
    <body>
    <form action="process.php" method="post">
      <input type="text" name="nombre" />
      <input type="password" name="pass" />
      <input type="submit" />
    </form>
    </body>
    </html>
    El archivo process.php será el que reciba los datos dentro del arreglo $_POST. Para acceder a cada dato lo haces así (supongo que ya lo sabes, pero por si no lo tienes claro): $_POST['nombre'] y/o $_POST['pass']. Lo primero que haces es guardar los datos en la base de datos y luego enviar el correo:

    Código PHP:
    <?php
      
    if( isset( $_POST['nombre'] ) && isset( $_POST['pass'] ) ) {
        
    $name strip_tags$_POST['nombre'] );
        
    $pass strip_tags$_POST['pass'] );
        
    $con mysql_connect'dominio_base_datos''usuario_db''password_db' );
        if( ! 
    $con ) {
          echo 
    "<p>Ocurri&oacute; un error al conectarse a la base de datos:<br />" mysql_error() . "</p>";
        } else {
          
    // Si usas mysql_select_db( 'base_datos' ); no es necesario escribir base_datos.tabla en la siguiente línea, bastaría con el nombre de la tabla:
          
    $query "INSERT INTO base_datos.nombre_tabla (name, password) VALUES ('$name', '$pass')";
          
    // Ejecutas la consulta:
          
    $result mysql_query$query$con );
          if( 
    $result ) { // Se insertó al menos una fila y envías el correo
            
    $remitente 'tu correo electrónico';
            
    $destinatario 'el email del cliente supongo';
            
    $asunto 'Tus datos';
            
    $contenido_html '<p><span style="font: italic 16px Arial;">Nombre usuario</span>: ' $name '</p><p><span style="font: italic 16px Arial;">Password</span>: ' $pass '</p>';
            
    $contenido_plano strip_tags$contenido_html );
            if( 
    sendit$destinatario$remitente$asunto$contenido_html$contenido_plano ) ) {
              echo 
    "<p>Mensaje enviado y datos guardados</p>";
            } else {
              echo 
    "<p>Ocurri&oacute; un error al enviar el mensaje por e-mail.</p>";
            }
          } else { 
    // No se insertó ni una sola fila, por ende muestras el error que corresponda
        
    }
      } else {
        echo 
    "<p>Todos los campos son obligatorios.</p>";
      }

      
    // Esta es una función más elaborada para enviar emails
      
    function sendit$to$from ''$subject 'Sin asunto'$contenido_html ''$contenido_plano ''$CC ''$BCC ''$sIP '') {
        
    $eol     PHP_EOL;
        if(
    $sIP == '')
          
    $sIP md5($subject.date('dmY'));
        if(
    $from == '')
          
    $from '<noreply@' .$_SERVER['SERVER_NAME']. '>'.$eol;
        
    $header  'From: ' .$from.$eol;
            
    // Responder a:
        
    $header .= 'Reply-To: ' .$from.$eol;
            
    // Responder acuse de recibo a:
        
    $header .= 'Return-Receipt-To: ' .$from.$eol;
            
    // Responder:
        
    $header .= 'Return-Path: ' .$from.$eol;
            
    // Con copia:
        
    if($CC != '')
          
    $header .= 'CC: ' .$CC.$eol;
            
    // Con copia ciega (Blind Carbon Copy, conceal ):
        
    if($BCC != '')
          
    $header .= 'BCC: ' .$BCC.$eol;

        
    $header .= 'Message-ID: <' .time(). ' no-reply@' .$_SERVER['SERVER_NAME']. '>' .$eol;
        
    $header .= 'Content-Type: multipart/alternative; boundary="' .$sIP'"' .$eol.$eol;
        
    $header .= 'MIME-Version: 1.0' .$eol;
        
        
    // PLAIN TEXT
        
    $msg  "Content-Type: multipart/alternative".$eol;
        
    $msg .= '--' .$sIP.$eol;
        
    $msg .= 'Content-Type: text/plain; charset=utf-8' .$eol;
        
    $msg .= 'Content-Transfer-Encoding: 7bit' .$eol.$eol;
        
    $msg .= $contenido_plano $eol $eol;
        
    $msg .= 'Para ver correctamente este mensaje, usted necesita activar el contenido HTML.'.$eol;
        
    $msg .= 'Si usted está leyendo esto, por favor actualice su cliente de correo electrónico o active el contenido HTML.'.$eol;
        
        
    // HTML MESSAGE
        
    $msg .= '--'.$sIP.$eol;
        
    $msg .= 'Content-Type: text/html; charset=utf-8'.$eol;
        
    $msg .= 'Content-Transfer-Encoding: 7bit'.$eol.$eol;
        
    $msg .= $contenido_html $eol $eol;
        
    $msg .= '--' .$sIP.$eol;

        
    ini_set('sendmail_from'$from);
        if (
    mail($to$subjectwordwrap($msg70$eol), $header)) {
          @
    ini_restore('sendmail_from');
          return 
    true;
        }
        else {
          @
    ini_restore('sendmail_from');
        }
        
        return 
    false;
      }
    ?>
    Lo anterior debería funcionar a no ser de que la función mail de PHP no este habilitada (lo sabrás cuando se ejecute el script).

    Saludos.

  4. #4
    Recien Llegado! Pasaba por aquí...
    Fecha de Ingreso
    14 abr, 12
    Mensajes
    2
    Poder de Reputación
    0
    Cita Iniciado por codomodragon Ver Mensaje
    Una pregunta amigo el sistema de correo el cual mencionas como funciona?
    ¿Debes pasar todos los datos através del método post o también lo puedes hacer através del método get?
    Perdona! xD Pensaba que como lo saqué del foro sabíais de que hablaba xD La web del servicio es http://www.melodysoft.com/ Me temo que dejan solo el envío de datos a través de post... Lo que se hace es enviar el formulario a una web de MelodySoft y no a una web tuya .php. Después ellos se encargan de enviarte el email la dirección que hayas configurado previamente y, si quieres, de redirigir al usuario a otra pagina.

    @skaparate Aggh, ya se que RazyHosting no me deja enviar emails xD por eso todo el follón de melodysoft...

    El problema que se me plantea es que tengo que enviarles el form a MelodySoft. Puedo controlar la web a la que me redirigen pero no puedo controlar el código de su Web y no puedo guardar los datos en la base de datos. Entonces si digo que después de enviar el email me reenvíen a cualquier página mía .php habré perdido los datos (si no me equivoco) y no podré guardarlos en la base de datos...
    Las soluciones que se me ocurren son dos. Una es la que expuse en mi primer post:

    1. Recopilar los datos mediante el formulario en mi web .html y enviarlos a otra web mía en .php. En esta web .php guardo los datos en la base de datos y después tengo que encontrar la forma de reenviar el formulario a MelodySoft.

    2. Recopilar los datos mediante el formulario en mi web .html y mandarlos directamente a MelodySoft. Decirle a MedolySfot que me redirijan a una web mía en .php y guardar los datos en la base de datos. Para esto habré tenido que encontrar la forma de mantener los datos que el usuario me ha facilitado mediante el formulario... ¿quizá mediante el tema este de sessions, del que no tengo ni idea?

    ¿Alguna solución alternativa?
    ¿Alguna forma de hacer lo que propongo...?
    Gracias por vuestra respuesta (que ha sido muy rápida)

  5. #5
    Esto empieza a ser un vicio... Habitante Avatar de codomodragon
    Fecha de Ingreso
    11 nov, 09
    Ubicación
    Venezuela
    Mensajes
    1,252
    Poder de Reputación
    14
    amm lamentablemente amigo creo que esto no lo podrás realizar, tal archivo es imposible de realizar en php y en java no estoy seguro si lo permitirá.
    aparte mi única sugerencia es que consigas otro servidor, tal vez 000wbhost.com que asta donde se permite el envió de correos.
    OMG WTF BBQ
    Disculpen cualquier error o metidota de pata, la universidad me tiene loco y candado.

    www.mangasve.com.ve el lugar venezolano del manga

    http://www.rauch.cl/cctw.jpg

  6. #6
    Esto empieza a ser un vicio... Habitante
    Fecha de Ingreso
    02 may, 11
    Ubicación
    Santiago, Chile
    Mensajes
    1,554
    Poder de Reputación
    14
    2. Recopilar los datos mediante el formulario en mi web .html y mandarlos directamente a MelodySoft. Decirle a MedolySfot que me redirijan a una web mía en .php y guardar los datos en la base de datos. Para esto habré tenido que encontrar la forma de mantener los datos que el usuario me ha facilitado mediante el formulario... ¿quizá mediante el tema este de sessions, del que no tengo ni idea?
    Eso es fácil, sólo debes poner en la primera línea del script session_start();. Luego, debes utilizar el arreglo $_SESSION para guardar los datos:

    // La siguiente línea debe aparecer antes que cualquier línea que muestre algo por pantalla o modifique los headers enviados (como echo o print):
    session_start(); // si no incluyes esta línea no puedes guardar ni acceder al arreglo $_SESSION
    $_SESSION['dato1'] = $dato1;
    $_SESSION['dato2'] = $dato2;
    $_SESSION['datoN'] = $datoN;

    Donde dato[1|2|N] puede ser cualquier nombre, es simplemente el nombre del índice dentro del arreglo. Luego utilizas el valor así: $variable = $_SESSION['datoN'];

    A todo esto ¿cómo envías los datos a melody?

Temas Similares

  1. JavaScript o FORM de HTML????
    Por chovi en el foro Foro General
    Respuestas: 1
    Último Mensaje: 09/04/2011, 04:09
  2. datos del form en un div
    Por gjulian en el foro Formularios
    Respuestas: 0
    Último Mensaje: 03/09/2010, 07:41
  3. CSS FORM AYUDA!!!
    Por kishama28 en el foro Todo sobre Estilos CSS
    Respuestas: 1
    Último Mensaje: 29/05/2010, 03:06

Etiquetas para este Tema

Permisos de Publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •