2013-10-25 2 views
0

Мне нужно, чтобы вы все знали, что я нахожусь на начальных этапах обучения веб-программированию. Я достаточно понимаю, чтобы прочитать код и узнать, что он делает. Я изучаю использование курсов, онлайн-тренингов и обучения «реального мира».PHP MySQLi Email Form

У меня возникла проблема с формой контакта, которую я пытаюсь создать. В компании, в которой я работаю, есть несколько веб-сайтов, которые используют контактные формы. Я использовал код контактной формы, который работал на другом веб-сайте, но мы изменили наш хост, начиная с этого нового хоста, и они используют MySQLi, а не MySQL. Когда я использую следующий код, он отправляется в базу данных и работает так, как ожидалось.

<?php 
//hake yachts contact 

//connection 

$con = mysqli_connect("localhost","hakeyachtcontact","hakeyachtcontact","hakeyachtcontact"); 
if (mysqli_connect_errno()) 
    { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } 

//insert 
$sql="INSERT INTO hakeyachtcontact (firstName, lastName, email, boatModel) 
VALUES 
('$_POST[firstName]','$_POST[lastName]','$_POST[email]','$_POST[boatModel]')"; 

if (!mysqli_query($con,$sql)) 
    { 
    die('Error: ' . mysqli_error($con)); 
    } 

mysqli_close($con); 

?> 

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

//email 
if(isset($_POST['email'])) { 

    // EDIT THE 2 LINES BELOW AS REQUIRED 
    $email_to = "[email protected]"; 
    $email_subject = "Hake Yachts Website Contact"; 


    function died($error) { 
     // your error code can go here 
     echo "We are very sorry, but there were error(s) found with the form you submitted. "; 
     echo "These errors appear below.<br /><br />"; 
     echo $error."<br /><br />"; 
     echo "Please go back and fix these errors.<br /><br />"; 
     die(); 
    } 


    // validation expected data exists 
    if(!isset($_POST['firstName']) || 
     !isset($_POST['lastName']) || 
     !isset($_POST['email']) || 
     !isset($_POST['boatModel'])) { 
     died('We are sorry, but there appears to be a problem with the form you submitted.');  
    } 

$firstName = $_POST['firstName']; // required 
$lastName = $_POST['lastName'];// required 
$email = $_POST['email'];// required 
$boatModel = $_POST['boatModel'];// required 


    $error_message = ""; 
    if (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)){ 
    $error_message .= 'The email you entered does not appear to be valid.<br />'; 
    } 
    $string_exp = "^[a-z .'-]+$"; 
    if(!eregi($string_exp,$firstName)) { 
    $error_message .= 'The name you entered does not appear to be valid.<br />'; 
    } 
    $string_exp = "^[a-z .'-]+$"; 
    if(!eregi($string_exp,$lastName)) { 
    $error_message .= 'The name you entered does not appear to be valid.<br />'; 
    } 
    if(strlen($error_message) > 0) { 
    died($error_message); 
    } 
    $email_message = "Form details below.\n\n"; 

    function clean_string($string) { 
     $bad = array("content-type","bcc:","to:","cc:","href"); 
     return str_replace($bad,"",$string); 
    } 

    $email_message .= "Name: ".clean_string($firstName)."\n"; 
    $email_message .= "email: ".clean_string($lastName)."\n"; 
    $email_message .= "phone: ".clean_string($email)."\n"; 
    $email_message .= "comments: ".clean_string($boatModel)."\n"; 

// create email headers 
$headers = 'From: '.$email_from."\r\n". 
'Reply-To: '.$email_from."\r\n" . 
'X-Mailer: PHP/' . phpversion(); 
@mail($email_to, $email_subject, $email_message, $headers); 

//send 
header("Location: thankyou.html"); 

У меня есть подозрение, что это из-за различий между MySQL и MySQLi, но я не уверен, что это так. Я искал использование Google и не нашел ничего, что помогло до этого момента, и я попробовал несколько различных решений, которые я нашел в Интернете. Я действительно в убытке, пытаясь понять это.

Я также открыт для других решений для отправки веб-форм по электронной почте.

Я по-настоящему ценю любую помощь, которую любой может предоставить. Я готов пройти через учебники или что-нибудь еще, что поможет мне учиться.

Спасибо!

+0

Бросает ли он какие-либо ошибки или вообще что-либо делает? В коде, который вы опубликовали, отсутствует закрывающая скобка из 'if (isset ($ _ POST ['email'])) {', но это могло быть просто остановлено в проводке. – aynber

+0

Это вовсе не ошибка. Просто перейдите на страницу «blank» contact.php. Он не отправляется в базу данных или не перенаправляется на страницу «Спасибо». Это действительно странно. Мы протестировали с использованием «эха» безрезультатно. «Echo» работает после первого бита текста, но он не работает, когда мы добавляем другой код. –

+0

Это была вонючая пропавшая закрывающая скобка. Он работает сейчас !!!!! ТЫ ВЕЛИКОЛЕПЕН!!!! Если вы добавите его в качестве ответа, я пометю его, как вы ответили. –

ответ

0

Существует недостающее закрывающая фигурная скобка на if(isset($_POST['email'])) {. Просто добавьте его, где вам нужно закрыть чек.

+0

Благодарим за предложение. Кажется, все работает отлично. –

0

Изменение:

$sql="INSERT INTO hakeyachtcontact (firstName, lastName, email, boatModel) 
VALUES 
('$_POST[firstName]','$_POST[lastName]','$_POST[email]','$_POST[boatModel]')"; 

if (!mysqli_query($con,$sql)) 
    { 
    die('Error: ' . mysqli_error($con)); 
    } 

к:

$firstname = $con->mysqli_real_escape_string($_POST['firstName']); 
$lastname = $con->mysqli_real_escape_string($_POST['lastName']); 
$email = $con->mysqli_real_escape_string($_POST['email']); 
$boatmodel = $con->mysqli_real_escape_string($_POST['boatModel']); 

$sql="INSERT INTO hakeyachtcontact (firstName, lastName, email, boatModel) 
VALUES 
('$firstname','$lastname','$email','$boatmodel')"; 

if ($con->query($sql) === FALSE) 
    { 
    die('Error: ' . mysqli_error($con)); 
    } 
+1

Или используйте параметризацию. – aynber

+0

Благодарим за помощь! –