2013-05-08 3 views
0

Я пытаюсь создать форму на веб-сайте (http://youngliferaffle.com/) с помощью HTML, PHP и загрузочного твиттера. Я просмотрел несколько руководств о том, как их создать, но я думаю, что у меня возникают проблемы с Locations - как при перемещении пользователя, если они делают ошибку или после отправки своих ответов. Я также очень новичок в PHP. Я очень благодарен за помощь! Спасибо!Создание формы с использованием HTML и PHP

Основные вопросы:

  • «Слишком много перенаправляет на веб-странице»/возможно из-за печенья
  • не получили письмо от представлений
  • Пользователь не перенаправлены на нужную страницу после подачи или из-за плохой подачи

Вот часть моей HTML формы:

<form method="POST" action="contact-form-submission.php"> 
    <fieldset> 
    <label><strong>Sign-Up</strong></label> 

    <input type="text" class="name" name="cname" id="name" placeholder="Full Name"></input> 

    <input type="text" class="phone" name="phone" id="phone" placeholder="Phone Number"></input> 

    <input type="text" class="email" name="email" id="email" placeholder="Email Address"></input> 
    <div class="form-actions"> 
     <input type="submit" name="save" value="Send"> 

    </div> 
    </fieldset> 
</form> 

Вот мой PHP форма

// check for form submission - if it doesn't exist then send back to contact form 
if (!isset($_POST['save']) || $_POST['save'] != 'contact') { 
    header('Location: contact-form-submission.php'); 
    exit; 
} 

// get the posted data 
$name = $_POST['contact_name']; 
$email_address = $_POST['contact_email']; 
$phone = $_POST['contact_phone']; 

// check that a name was entered 
if (empty($name)) 
    $error = 'You must enter your name.'; 
// check that an email address was entered 
elseif (empty($email_address)) 
    $error = 'You must enter your email address.'; 
// check for a valid email address 
elseif (!preg_match('/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/', $email_address)) 
    $error = 'You must enter a valid email address.'; 
// check that a phone number was entered 
elseif (empty($phone)) 
    $error = 'You must enter a phone number.'; 

// check if an error was found - if there was, send the user back to the form 
if (isset($error)) { 
    //Am I putting the wrong location? 
    header('Location: contact-form-submission.php?e='.urlencode($error)); exit; 
} 

// write the email content 
$email_content = "Name: $name\n"; 
$email_content .= "Email Address: $email_address\n"; 
$email_content .= "Phone:\n\n$phone"; 

// send the email 
mail ("myemail.com", "New Contact Message", $email_content); 

// send the user back to the form 
//And This is where I'm having trouble with! the Location part 
header('Location: contact-form-submission.phps='.urlencode('Thank you for your message.')); 
exit; 
+0

Какая конкретная проблема у вас есть? –

+0

Когда выполняется этот скрипт? Это после GET contact-form-submission.php, POST contact-form-submission.php или какого-либо другого URL-адреса? – Mateusz

+0

Если вы попытаетесь отправить форму, даже без правильного ввода, она перенаправляет вас и говорит, что на веб-страницу слишком много перенаправлений (http://youngliferaffle.com/contact-form-submission.php). Кроме того, даже если я правильно его заполнил, он говорит об этом, и я не получаю электронное письмо. – user2363671

ответ

0

В самой первой строке, вы держите заголовок назад в том же месте. Это создает цикл. Вам нужно отправить их обратно в форму. Возможно index.php?

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

Также помните свой? после .php как? сообщает веб-серверу, что он больше не является именем файла. Иначе он будет искать файл с именем thankyou.phps.

// check for form submission - if it doesn't exist then send back to contact form 
if (!isset($_POST['save']) || $_POST['save'] != 'contact') { 
header('Location: index.php'); exit; 
} 

// get the posted data 
$name = $_POST['contact_name']; 
$email_address = $_POST['contact_email']; 
$phone = $_POST['contact_phone']; 

// check that a name was entered 
if (empty($name)) 
$error = 'You must enter your name.'; 
// check that an email address was entered 
elseif (empty($email_address)) 
$error = 'You must enter your email address.'; 
// check for a valid email address 
elseif (!preg_match('/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/', $email_address)) 
    $error = 'You must enter a valid email address.'; 
// check that a phone number was entered 
elseif (empty($phone)) 
$error = 'You must enter a phone number.'; 

// check if an error was found - if there was, send the user back to the form 
if (isset($error)) { 
//Am I putting the wrong location? 
header('Location: contact-form-submission.php?e='.urlencode($error)); exit; 
} 

// write the email content 
$email_content = "Name: $name\n"; 
$email_content .= "Email Address: $email_address\n"; 
$email_content .= "Phone:\n\n$phone"; 

// send the email 
mail ("myemail.com", "New Contact Message", $email_content); 

// send the user back to the form 
// remember the ? after your file name! 
header('Location: thankyou.php?s='.urlencode('Thank you for your message.')); exit; 
1

последняя линия

header('Location: contact-form-submission.phps='.urlencode('Thank you for your message.')); exit; 

кажется, что вы имеете право имя. Зачем перенаправлять файл php самому себе. Вы должны использовать URL-адрес начальной формы, независимо от имени. Вероятно, эта строка создает ошибку цикла перенаправления, которую вы получаете.

1

Ну, первое, что в PHP-коде, это то, что он перенаправляет на себя. Переменная «save» не будет установлена ​​так, чтобы она перенаправлялась снова и снова бесконечно. Он проверяет, установлено ли «save», но оно не установлено в первый раз, поэтому оно снова перенаправляется на ту же страницу. Но переменная «save» не будет установлена ​​снова, потому что это просто перенаправление, а не представление формы. Так что это происходит снова и снова, поэтому вы получаете слишком много ошибок при переадресации.

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

simple_form.php

<?php 
    //Assume the form has one field called field1 and a 'save' variable to indicate form submission 
    $field1 = ""; 

    //Declare an array to store errors 
    $errors = array(); 

    if(isset($_POST['save'])) { 
     //Form has been submitted.. do validations etc. 
     $field1 = $_POST['field1']; 
     if(someValidationCheck($field1) == false) { 
      $errors[] = "Field1 is not valid"; 
     } 

     //After all field validations.. adding errors to $errors array.. 
     if(count($errors) == 0) { 
      //No errors so write database insert statments etc. here 
      //Also put a header("Location:...") redirect here if you want to redirect to a thank you page etc. 
     } 
    } 
?> 
<html> 
<body> 
<?php 
    //If there were errors, show them here 
    if(count($errors) > 0) { 
     //loop through $errors array .. print one by one. 
    } 
?> 
<form method="post" action="simple_form.php"> 
    <input type="text" name="field1" value="<?php echo($field1); ?>" /> 
    <input type="hidden" name="save" value="save" /> 
    <input type="submit" /> 
</form> 
</body> 
</html> 

Таким образом, если есть ошибки, пользователь увидит сообщение об ошибке в одной и той же странице, поля также сохраняют свои первоначальные значения. И он будет перенаправлен только на действительное представление без ошибок. В противном случае он останется на той же странице, отображая сообщения об ошибках.

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