2013-07-20 4 views
1

Я пытаюсь выяснить, как правильно отправить форму через PHP:Правильный способ отправки формы с PHP/JavaScript

В части у меня есть два вопроса: 1 конкретно о сайте, что я работаю на , и другой о форме, представляющей в целом.

Вопрос 1. Я использую php в качестве шаблона для своего сайта. поэтому у меня есть одна index.php страница с колонтитулы и все мое содержание втягивается из функции PHP как так:

 <article id="main"> 
     <?php 
      $page = $_GET['page']; 
       if(empty($page)){ 
        $page = 'home'; 
       } 

       $page.='.php'; 

       if(file_exists("pages/$page")) { 
        include("pages/$page"); 
       } else { 
        echo "$page no exist"; 
       } 

     ?> 
    </article> 

Это код, я использую для моей формы, и я использую его в головной метке моей страницы index.php:

 <head> 
<?php 
if ($_POST['submit'] && $human == '4') { 
    if (mail ($to, $subject, $body, $from)) { 
     echo '<p>Your message has been sent!</p>'; 
    } else { 
     echo '<p>Something went wrong, go back and try again!</p>'; 
    } 
} else if ($_POST['submit'] && $human != '4') { 
    echo '<p>You answered the anti-spam question incorrectly!</p>'; 
} 
?> 

</head> 

и HTML-коде формы:?

<form method="post" action="index.php"> 

    <legend>Contact Us</legend> 
    <fieldset> 
     <label>Name</label> 
     <input name="name" placeholder="Type Here"> 

     <label>Email</label> 
     <input name="email" type="email" placeholder="Type Here"> 

     <label>Message</label> 
     <textarea name="message" placeholder="Type Here"></textarea> 

     <label>*What is 2+2? (Anti-spam)</label> 
     <input name="human" placeholder="Type Here"> 
    </fieldset> 

    <input id="submit" name="submit" type="submit" value="Submit"> 

</form> 

Когда я отправить форму он освежает и помещает мое эхо-сообщение в мою index.php страница = домашняя страница вместо моей index.php? page = co ntact. Как бы я получил эхо, чтобы остаться на одной странице формы? (Я попробовал изменить action = "" часть формы, но, похоже, не смог заставить ее работать).

Вопрос 2. В общем, когда я осматривая другие веб-страницы, чтобы увидеть их код формы я видел это везде:

try 
{ 
    for(var lastpass_iter=0; lastpass_iter < document.forms.length; lastpass_iter++) 
    { 
     var lastpass_f = document.forms[lastpass_iter]; 
     if(typeof(lastpass_f.lpsubmitorig2)=="undefined") 
     { 
      lastpass_f.lpsubmitorig2 = lastpass_f.submit; 
      lastpass_f.submit = function(){ 
       var form=this; 
       var customEvent = document.createEvent("Event"); 
       customEvent.initEvent("lpCustomEvent", true, true); 
       var d = document.getElementById("hiddenlpsubmitdiv"); 
       for(var i = 0; i < document.forms.length; i++) 
       { 
        if(document.forms[i]==form) 
        { 
         d.innerText=i; 
        } 
       } 
       d.dispatchEvent(customEvent); 
       form.lpsubmitorig2(); 
      } 
     } 
    } 
} 
catch(e){} 

Кто-нибудь знаком с выше код? И если да, существует ли общий сценарий для правильной подачи форм?

Спасибо!

+0

Не могли бы вы просто использовать AJAX для отправки формы? – Shawn31313

+1

Вопрос 2: Вы уверены, что у вас есть не просто lastpass, а расширение, которое автоматически вводится в поля формы? Я думаю, именно поэтому вы видите его повсюду. – brbcoding

+0

У меня есть lastpass как расширение, я не понимал, что он бросает код на каждую страницу. Благодаря! – kknopper

ответ

0

Посмотрите, как ваш код начинается с $page = $_GET['page'];?

Это означает, что вы отправите переменную «страница» в качестве части URL-адреса. Так

изменить форму тег к этому

<form method="GET" action="index.php?page=contact"> 

и вы должны начать видеть, что вы ожидаете.

Метод GET указывает вашему браузеру отправлять данные формы как один длинный URL-адрес (так, видимый пользователю), в отличие от POST, где данные будут незаметно отправлены на сервер (гораздо безопаснее).

Но тогда вы используете $ _POST для извлечения данных GET, поэтому остальная часть вашего кода не будет работать.

, попробуйте вместо этого: перейти к index.php? Page = contact и он решит ваш первый вопрос.

+0

Спасибо, что сработали! – kknopper

0

Ваша форма должна «вспомнить» текущую страницу и отправить ее по так:

<input type='hidden' name='page' value='<?php echo $page; ?>'> 

, а также скрипт должен проверить, если текущий запрос является представление формы:

$page = (isset($_GET['page'])) ? $_GET['page'] : $_POST['page'] ; 
+0

Я пробовал это, и он по-прежнему загружает индексную страницу, когда вы пытаетесь отправить – kknopper

1

Я m не уверен в вашем втором вопросе, но для отправки формы контакта вы пытались установить действие формы на что-то вроде «index.php? page = contact»?

+0

. Это сработало спасибо! – kknopper

+1

Это правильный ответ. Вам не нужно изменять форму, используя POST для GET; вы можете отправить с POST URL-адрес с параметром запроса (т. е. 'page'). – Kyle

0

Я предполагаю, что Ваша форма находится на странице контактов? Страница извлекается на основе $_GET['page'] из других источников. Когда вы обновляете страницу, она снова запускает скрипт выбора страницы. Но так как вы не пришли туда из формы с method=post, то $_GET['page'] не существует, поэтому страница настроена на дом в соответствии с вашим кодом. Вам нужно сохранить имя страницы; либо как переменная $_SESSION, либо скрытый ввод в контактной форме (не забудьте изменить $_GET на $_REQUEST, если вы это сделаете).

Смежные вопросы