Можно ли отправить письмо с одной страницы - PullRequest
0 голосов
/ 29 января 2011

Действие моей формы php переходит на другую страницу и выглядит не очень хорошо, я хочу показать форму, и всякий раз, когда пользователь заполняет форму, отправляйте ее с той же страницы, если некоторые входные данные пусты, я хочу выдать ошибку.

Вот мой от;

       <form method="post" action="#" name="emailform">
                <div class="rel">
            <div class="confor nab"><input class="cname" type="text" name="name"  value=""/></div>
            <div class="confor emb"><input class="cmail" type="text" name="email"  value=""/></div>
            <div class="confor phb"><input class="cphone" type="text" name="phone"  value=""/></div>
            <div class="confor evb"><input class="ceven" type="text" name="event"  value=""/></div>
            <div class="confor wdb"><input class="cwed" type="text" name="wdate"  value=""/></div>
            <div class="confor whb"><input class="chow" type="text" name="where"  value=""/></div>
            <div class="confort nob"><textarea class="ctho" name="notes" cols="" rows=""></textarea></div>
            <input name="submit" class="contactsend" type="submit" value="SEND" /></div>
         </form> 

Ответы [ 4 ]

3 голосов
/ 29 января 2011

Просто измените действие на:

<?=$_SERVER['PHP_SELF'];?>

Поскольку это отправит форму на ту же страницу, на которой он находится, и вы сможете выполнить проверку PHP и отправить код электронной почты вверху, например:

<?
// Here's your PHP validation and email sending code
?>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
        <meta name="description" content="" />
        <meta name="keywords" content="" />
        <link type="text/css" rel="stylesheet" href="/assets/css/styles.css" />
        <title></title>
    </head>
    <body>
        <form action="<?=$_SERVER['PHP_SELF'];?>" method="post">
            <!-- Here's all your form items -->
        </form>
    </body>
</html>
1 голос
/ 29 января 2011

Вот как я бы сделал это без проверки JavaScript, вроде как урезано, потому что я не собираюсь писать все для вас:

<?php
//various form validation functions for checking if an input is numeric, or a valid email, or whatever

function Post_Error(&$error,$name)
{
     if(is_array($error) && array_key_exists($name,$error))
     {
         echo '<span class="error">' . $error[$name] . '</span>';
     }
}
/* or you could do this
function Post_Error($name)
{
    global $error;
    if(is_array($error) && array_key_exists($name,$error))
    {
        //yadda yadda
    }
}
and then not pass the $error array each time*/

function Post_Fill($field)
{
     if(is_array($_POST) && array_key_exists($field,$_POST))
     {
          echo $_POST[$field];
     }
}

$error = array();  //Initialize error array outside of if statements, important because we are gonna be passing it below if there are errors or not, and if it is created inside one of the ifs then it might not be there when needed.
if($_POST['submit'])
{
     if(!Valid_Name($_POST['cname'])) //Valid_Name() is one of the fictional validation functions from above, could also do it manually
     {
          $error['name'] = 'Name not valid.  Field Required.  Blah blah blah.';
     }
     if(!Valid_Email($_POST['cmail']))  //Could also have a single validate() function that validates everything sent through $_POST, and returns an array of errors
     {
          $error['email'] = 'Email not valid.  Field Required.  Must be longer than 5 characters. Whatever.';
     }
     //etc. etc. for all the fields
}

if($_POST['submit'] && count($error) == 0)
{
     //Send Mail
     echo '<h1>Mail Sent!</h1>';  //Or whatever message to user that mail was sent
}
else
{
?>
       <form method="post" action="#" name="emailform">
       <div class="rel">
            <div class="confor nab"><input class="cname" type="text" name="name"  value="<?php Post_Fill('name');?>"/><?php Post_Error($error,'name');?></div>
            <div class="confor emb"><input class="cmail" type="text" name="email"  value="<?php Post_Fill('email');?>"/><?php Post_Error($error,'email');?></div>
            <div class="confor phb"><input class="cphone" type="text" name="phone"  value="<?php Post_Fill('phone');?>"/><?php Post_Error($error,'phone');?></div>
            <div class="confor evb"><input class="ceven" type="text" name="event"  value="<?php Post_Fill('event');?>"/><?php Post_Error($error,'event');?></div>
            <div class="confor wdb"><input class="cwed" type="text" name="wdate"  value="<?php Post_Fill('wdate');?>"/><?php Post_Error($error,'wdate');?></div>
            <div class="confor whb"><input class="chow" type="text" name="where"  value="<?php Post_Fill('where');?>"/><?php Post_Error($error,'where');?></div>
            <div class="confort nob"><textarea class="ctho" name="notes" cols="" rows=""><?php Post_Fill('notes');?></textarea><?php Post_Error($error,'notes');?></div>
            <input name="submit" class="contactsend" type="submit" value="SEND" /></div>
         </form> 
<?php
} //Close else
?>

О, также, это своего рода вставной типВо-первых, вы бы включили его в страницу, на которую пошла бы форма, так что у вас уже есть все элементы <head> и остальная часть макета страницы, внешняя по отношению к форме PHP.

Что будет делать этот код, так это то, что форма отправляется на ту же страницу, которая выполняет проверку, и либо удаляет форму и выдает сообщение о том, что письмо было отправлено пользователю, если на входе не было ошибок,или отобразить ошибки (в интервале class = "error") рядом с входами для тех входов, которые не были должным образом проверены при сохранении их предыдущего ввода для всех полей.

1 голос
/ 29 января 2011

Как отметил @joren, javascript / ajax - хороший инструмент для этого.См. этот пример jQuery для рабочего примера и других инструкций.

Конечно, это требует использования jQuery, но если это не веб-форма only , которую вы когда-либо напишите, вероятно, стоит потратить деньги на его изучение (или другую полнофункциональную библиотеку javascript:)

0 голосов
/ 29 января 2011

Чтобы не покидать текущую страницу и просто изменить раздел страницы, где расположена форма, вы можете использовать javascript / ajax для отправки в форме.

Библиотека javascript, такая как jQuery, упрощает работу с ajax, поэтому я рекомендую ознакомиться с разделом .post() документации jQuery.

Недостатком является то, что у посетителя должна быть включена поддержка JavaScript, но если у вас уже есть рабочая форма, она снизится до новой загрузки страницы, которую вы сейчас имеете, так что это не проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...