2015-03-18 3 views
1

Я работаю над формой контакта для моего сайта Music Project.Contact.php отправить электронное письмо, но не перенаправлять

Форма контакта, похоже, работает нормально. Если я ввожу каждое поле, он отправляет электронное письмо (я уверен, что он включен в мою учетную запись gmail), и если я не буду вводить каждое поле, оно выдаст сообщения об ошибках. Но странно, что после того, как я ударил, я получаю пустую страницу (адрес: MySiteRoot/contact.php), и она не перенаправляется. Если я затем нажимаю кнопку браузера «Назад», я получаю правильные сообщения об ошибке «Ошибка» или отправленное сообщение.

Почему нет перенаправления? Есть идеи?

Я попытался добавить

exit(); 

после

header('Location: /index.php'); 

, но он не сделал каких-либо изменений.

У меня есть как index.php, так и контакт php в корневой папке моего сайта.

вот код моего contact.php

<?php 

session_start(); 

require_once 'libs/phpmailer/PHPMailerAutoload.php'; 

$errors = []; 

if(isset($_POST['name'], $_POST['email'], $_POST['message'])) { 

    $fields = [ 
     'name' => $_POST['name'], 
     'email' => $_POST['email'], 
     'message' => $_POST['message'] 
    ]; 

    foreach($fields as $field => $data) { 
     if(empty($data)) { 
      $errors[] = 'The ' . '<b>' . $field . '</b>' . ' field is required.'; 
     } 
    } 

    if(empty($errors)) { 
     $m = new PHPMailer; 

     $m -> isSMTP(); 
     $m -> SMTPAuth = true; 

     /*$m -> SMTPDebug = 1;*/ 

     $m -> Host = 'smtp.gmail.com'; 
     $m -> Username = ''; /* TOOK THEM OUT HERE ON THE POST ONLY */ 
     $m -> Password = ''; /* TOOK THEM OUT HERE ON THE POST ONLY */ 
     $m -> SMTPSecure = 'ssl'; 
     $m -> SMTPKeepAlive = true; 
     $m -> Port = 465; 

     $m -> isHTML(true); 

     $m -> Subject = '4Elements Message'; 
     $m -> Body = 'From: ' . $fields['name'] . ' (' . $fields['email'] . ')<p>' . $fields['message'] . '</p>'; 

     $m -> FromName = '4Elements Contact'; 

     $m -> AddAddress('[email protected]', 'Anatis'); 

     if($m -> Send()) { 
      $errors[] = 'Thanks! Your message was sent!'; 
      header('Location: /index.php'); 
     } else { 
      $errors[] = 'Sorry, could not send email. Please try again later.'; 
     } 
    } 

} else { 
    $errors[] = 'Something went wrong.'; 
} 

$_SESSION['errors'] = $errors; 
$_SESSION['fields'] = $fields; 

header('Location: /index.php'); 

на моем index.php я есть в начале:

<?php 

session_start(); 

require_once 'security.php'; 

$errors = isset($_SESSION['errors']) ? $_SESSION['errors'] : []; 
$fields = isset($_SESSION['fields']) ? $_SESSION['fields'] : []; 

?> 

<!DOCTYPE HTML> 
... THEN COMES SOME HTML CONTENT 

Позже приходит ФОРМА:

<?php if(!empty($errors)): ?> 
    <div class="panel"> 
     <ul><li><?php echo implode('</li><li>', $errors); ?></li></ul> 
    </div> <!-- end of .panel --> 
<?php endif; ?> 

<form action="contact.php" method="post"> 
    <label> 
     <input type="text" name="name" autocomplete="off" placeholder="Name" <?php echo isset($fields['name']) ? ' value="' . e($fields['name']) . '"' : ''?>> 
    </label> 

    <label> 
     <input type="email" name="email" autocomplete="off" placeholder="Email" <?php echo isset($fields['email']) ? ' value="' . e($fields['email']) . '"' : ''?>> 
    </label> 

    <label> 
     <textarea name="message" rows="10" placeholder="Message"><?php echo isset($fields['message']) ? e($fields['message']) : ''?></textarea> 
    </label> 

    <input id="submitbutton" type="submit" value="send"> 

    </form> 

, а затем в конце index.php i все еще есть:

<?php 
    unset($_SESSION['errors']); 
    unset($_SESSION['fields']); 
?> 

я работаю на моем локальном сервере, с MAMP управлением PHP 5.6.2

Любые идеи о том, что происходит? Благодаря!

+0

Вы пытались использовать абсолютный URL вместо /index.php? –

+0

Как я могу сделать это на моем локальном сервере? что-то вроде "http: // localhost: 8888/SITEROOT/index.php"? TRIED сейчас. все равно то же самое, он остается на пустом контакте.php – LuisBento

+0

заголовок («местоположение: h t t p:// localhost: 8888/SITEROOT/index.php»); (без пробелов) –

ответ

2

попытаться удалить заголовок ('Местоположение: /index.php'); внутри m-> Send() и разрешить только один в конце скрипта. Даже замените $ errors = [] на $ errors = Array() в начале.

+0

не имеет никакого значения. все еще получаю пустой contact.php ... – LuisBento

+0

Возможно, у вас есть некоторые ошибки, и сценарий заканчивается до конца. использовать error_reporting (E_ALL); для отображения ошибок –

+0

следует добавить error_reporting (E_ALL); до конца файла contact.php? – LuisBento

1

Вы пытались использовать javascript вместо заголовка ('Location: /index.php');

echo '<script>window.location.href="/index.php";</script>' 

Кроме того, вы проверили любой файл журнала предупреждений или ошибок. Если вы получаете сообщение об этом типе сообщения «Невозможно изменить информацию заголовка - уже отправленные заголовки», попробуйте эту ссылку How to fix "Headers already sent" error in PHP

Я надеюсь, что это сработает для вас.

+0

спасибо, это действительно была ошибка «уже отправлена» ...;) – LuisBento

+0

Добро пожаловать. Но я не поддержал свой ответ. –

+0

Я еще не могу проголосовать. Мне нужна репутация 15 ... извините – LuisBento

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