2011-01-29 7 views
0

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

Вот мой от;

 <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> 
+0

Что вы ищете - это javascript/ajax. – jeroen

+0

ему не нужен ajax/javascript для этого, но это сделает пользователя намного приятнее! – Alfred

+1

@ Alfred Вы можете быть правы, но это только моя интерпретация вопроса; Я думал о * другой странице * в смысле перезагрузки/обновления страницы. – jeroen

ответ

3

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

<?=$_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> 
+0

, если вы не фильтруете этот '$ _SERVER ['PHP_SELF']' вы можете попасть в беду! Я думал, что просто использовать 'action =". "Достаточно. – Alfred

+1

@Ahmed Nuaman Возможно, вы захотите добавить, что ваш примерный код требует включения коротких тегов. – jeroen

+0

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

1

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

Конечно, это требует использования JQuery, но если это не является только веб-формы вы когда-нибудь написать, это, вероятно, стоит инвестиций, чтобы узнать его (или другой полнофункциональный Java-библиотеки :)

0

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

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

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

+0

привет, мне очень нужна простая вещь прямо сейчас. просто не хочу, чтобы он перешел на другую страницу, и если вход пустой, дайте мне window.alert. Я хочу учиться в будущем, но у меня нет времени. Если кто-нибудь может помочь мне с кодом, который будет потрясающим – Extelliqent

1

Вот как я хотел бы сделать это без проверки 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.

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

+0

+1 Впечатляет, не так много сегодня? ;-) – jeroen

+0

Нет, у меня уже есть код запаса, который я написал, что я могу быстро изменить для людей. – Phoenix