Моят формуляр php не работи и не мога да разбера къде сгреших

Аз съм доста нов във всичко това, но създадох формуляр и това съм написал, за да го изпратя. Използвах "[email protected]" тук вместо истинския адрес

<?php

/* Set e-mail recipient */
$myemail  = "[email protected]";

/* Check all form inputs using check_input function */
$names = check_input($_POST['names'], "Please return to our Application Form and enter your and your future spouse's names.");
$weddingtype = check_input($_POST['weddingtype'], "Please return to our Application Form and fill in what kind of wedding you will be having.");
$religioussect = check_input($_POST['religioussect'], "Please return to our Application Form and tell us about your religion and wedding traditions.");
$dateone = check_input($_POST['dateone'], "Please return to our Application Form and give us the date for at least one event.");
$eventone = check_input($_POST['eventone'], "Please return to our Application Form and list at least one event.");
$locationone = check_input($_POST['locationone'], "Please return to our Application Form and give us the location for at least one event.");
$durationone = check_input($_POST['durationone'], "Please return to our Application Form and give us the duration of at least one event.");
$typeone = check_input($_POST['typeone'], "Please return to our Application Form and tell us whether you would like video, photo or both for at least one event.");
$datetwo = $_POST['datetwo'];
$eventtwo = $_POST['eventtwo'];
$locationtwo = $_POST['locationtwo'];
$durationtwo = $_POST['durationtwo'];
$typetwo = $_POST['typetwo'];
$datethree = $_POST['datethree'];
$eventthree = $_POST['eventthree'];
$locationthree = $_POST['locationthree'];
$durationthree = $_POST['durationthree'];
$typethree = $_POST['typethree'];
$datefour = $_POST['datefour'];
$eventfour = $_POST['eventfour'];
$locationfour = $_POST['locationfour'];
$durationfour = $_POST['durationfour'];
$typefour = $_POST['typefour'];
$guests1 = check_input($_POST['guests1'], "Please return to our Application Form and tell us how many guests will attend at least one event.");
$guests2 = $_POST['guests2'];
$guests3 = $_POST['guests3'];
$guests4 = $_POST['guests4'];
$concerns = $_POST['concerns'];


if(!isset($_POST['submit'])){

$subject = "Quote Application";


/*Message for the e-mail */
$message = "Hello!

Another happy couple has filled out a Quote Application Form :D Hooray!

Their names are $names.

What sort of wedding are they having?
'$weddingtype'.

What religious sect and wedding traditions are they following?
'$religioussect'.

Now for their wedding events... Ooh boy!

1.  $dateone    
$eventone
$durationone
$typeone
Estimated guests: $guests1

$locationone

2.  $datetwo    
$eventtwo
$durationtwo
$typetwo
Estimated guests: $guests2

$locationtwo

3.  $datethree  
$eventthree
$durationthree
$typethree
Estimated guests: $guests3

$locationthree

4.  $datefour 
$eventfour
$durationfour
$typefour
Estimated guests: $guests4

$locationfour


Any concerns the couple have follow here:
'$concerns'

You better be ready to get to work now!
And also, have a really good day :)
";

/* Functions used */
function check_input($data, $problem='')
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
if ($problem && strlen($data) == 0)
{
    show_error($problem);
}
return $data;
}


function show_error($myError)
{
?>


<b>We apologize for the inconvenience, an error occurred.</b><br />
<?php echo $myError; ?>


<?php
exit();
}

/* Send the message using mail() function */
mail($myemail, $subject, $message);

/* Redirect visitor to the thank you page */
header('Location: thanks.html');
exit();

?>

Моля, помогнете ми да намеря какво правя грешно, едва ли съм начинаещ тук. Благодаря предварително!


person user1081524    schedule 28.06.2012    source източник
comment
Какво значи не работи? Получавате ли грешки?   -  person j08691    schedule 29.06.2012
comment
по-малките примери спомагат за желанието да разгледате кода. Съмнявам се, че трябва да проверяваме ръчно всяка POST var you are settings... И минимизирането на кода, който създава проблеми, често дава отговора автоматично;)   -  person Wrikken    schedule 29.06.2012
comment
Моля, публикувайте грешките, които получавате, когато публикувате този формуляр, това ще ни помогне много.   -  person Amaerth    schedule 29.06.2012
comment
Моля, моля, моля, не използвайте собствена поща... Осъзнавам, че тепърва започвате, но вашите съобщения ще бъдат изпратени в контейнера за спам/доставяне, тъй като този подход, който имате, не изпраща никакви заглавки. Потърсете PHPmailer за лесна бърза библиотека, която да помогне на вашите съобщения и SMTP сървъра да останат здрави.   -  person DeaconDesperado    schedule 29.06.2012
comment
Изчакайте гореща секунда. stackoverflow .com/questions/8601790/   -  person ionFish    schedule 29.06.2012


Отговори (2)


PHP Parse error:syntax error, unexpected $end in /var/www/test.php on line 133

Коригирайте, като поставите липсващ '}' преди последния затварящ PHP таг ?>

Това разкрива: PHP Fatal Error: Call to undefined function check_input() in /var/www/test.php on line 7

Преместване на това в горната част:

function check_input($data, $problem='')
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
if ($problem && strlen($data) == 0)
{
    show_error($problem);
}
return $data;
}

Разкрива, че трябва да преместим другата точно под другата функция.

function show_error($myError)
{
?>
<b>We apologize for the inconvenience, an error occurred.</b><br />
<?php echo $myError; ?>
<?php
exit();
}

И е поправено. Пълен фиксиран код (доста небрежен, не го почистих): [link]

person ionFish    schedule 28.06.2012

Опитах се да помогна да изчистите кода си и да поправите логически грешки. Не съм тествал този код, така че не забравяйте да го тествате. Също така бих ви препоръчал да отделите минута, за да проверите използваните езикови конструкции като foreach, тъй като изписването на дълъг списък от променливи като този може да бъде много болезнено за отстраняване на грешки.

<?php

if(! isset($_POST['submit'])) exit;

// Error messages
$error_messages = array(
    'names'         => 'Please return to our Application Form and enter your and your future spouse\'s names.',
    'weddingtype'   => 'Please return to our Application Form and fill in what kind of wedding you will be having.',
);

$errors = array();

foreach ($_POST as $key => &$value) {
    // If value is empty and error message exists, add error to the list
    if (empty($value) AND in_array($key, $error_messages)) {
        $errors[] = $error_messages[$key];
        continue;
    }

    // Variable variables, worth learning. $_POST['key'] becomes $key in your script.
    ${$key} = htmlspecialchars(trim($value), ENT_QUOTES, 'UTF-8');
}

// Errors existed, let's show them all
if (! empty($errors)) {
    echo '<b>We apologize for the inconvenience but there were errors:</b><br />';

    foreach ($errors as &$error) {
        echo $error . '<br />';
    }

    exit;
}

// All good, let's send
$email  = "[email protected]";
$subject = "Quote Application";

$message = "
    Hello!

    Another happy couple has filled out a Quote Application Form :D Hooray!

    Their names are $names.

    What sort of wedding are they having?
    '$weddingtype'.

    What religious sect and wedding traditions are they following?
    '$religioussect'.

    Now for their wedding events... Ooh boy!

    1.  $dateone    
    $eventone
    $durationone
    $typeone
    Estimated guests: $guests1

    $locationone

    2.  $datetwo    
    $eventtwo
    $durationtwo
    $typetwo
    Estimated guests: $guests2

    $locationtwo

    3.  $datethree  
    $eventthree
    $durationthree
    $typethree
    Estimated guests: $guests3

    $locationthree

    4.  $datefour 
    $eventfour
    $durationfour
    $typefour
    Estimated guests: $guests4

    $locationfour


    Any concerns the couple have follow here:
    '$concerns'

    You better be ready to get to work now!
    And also, have a really good day :)
";

mail($email, $subject, $message);

header('Location: thanks.html');
exit;

?>
person Seralize    schedule 28.06.2012