Проблем с контактна форма

vinsbg

Registered
Здравейте,
имам една контактна форма, която си работи, както трябва с изключение на това, че едно от полетата е празно, когато получа мейла..
Полето е телефон.. в мейла, който получавам е празно.
Ето как изпращам:
Код:
$name = check_input($_POST['inputName'], "Невалидно или грешно име");
$email = check_input($_POST['inputEmail'], "Невалиден или грешен E-mail адрес");
$phone = check_input($_POST['inputPhone'], "Грешен телефонен номер");
$message = check_input($_POST['inputMessage'], "Невалидно попълнено поле");

if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $email))
{
show_error("Невалиден e-mail адрес");
}
//съобщението в емайла
$phone = "";

$message = "

Някой ви изпрати ново писмо през контактната форма на

Име: $name
Email: $email
Телефон: $phone

Съобщение:
$message

";

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

header('Location: success.php');
exit();
А това е полето за телефон във формата
HTML:
<div class="form-group">
   <label for="inputPhone" class="col-lg-2 control-label">Телефон</label>
       <div class="col-lg-10">
          <input type="tel" class="form-control" id="inputPhone" name="inputPhone" placeholder="Въведете телефон за контакт">
       </div>
</div>
Пробвах на type - number, text, tel ... все така. Някакви идеи?[/html]
 
anonimen каза:
А това защо е??? :D:D:D
Код:
//съобщението в емайла
$phone = "";
Питай ме... забравил съм да го коментирам и него.. :D

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

Пример:
Решавам да изпратя имейл. Попълвам формата и ми дава 'грешен номер'. Попълвам я втори път със същия номер и се изпраща нормално. Много странно.
 
Какво прави check_input? Спира скрипта при грешка ли? Или просто ескейпва кавички или какво?
 
anonimen каза:
Какво прави check_input? Спира скрипта при грешка ли? Или просто ескейпва кавички или какво?
Ето я функцията
Код:
function check_input($data, $problem=' ')
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
if ($problem && strlen($data) == 0)
{
show_error($problem);
}
return $data;
}
 
Пробва ли с друг браузър/изчистване на кеша? Ако така не стане дай да видим и show_error(). Друго нещо - за телефонен номер е хубаво да сложиш фиксирана дължина + проверка дали е само от числа:

PHP:
$name = check_input($_POST['inputName'], "Невалидно или грешно име");
$email = check_input($_POST['inputEmail'], "Невалиден или грешен E-mail адрес");
if(!isset($_POST['inputPhone']) || !ctype_digit($_POST['inputPhone']) || strlen($_POST['inputPhone']) != 10) {
show_error('Невалиден телефон.');
}
$phone = $_POST['inputPhone'];
$phone = check_input($_POST['inputPhone'], "Грешен телефонен номер");
$message = check_input($_POST['inputMessage'], "Невалидно попълнено поле");
 
anonimen каза:
Пробва ли с друг браузър/изчистване на кеша? Ако така не стане дай да видим и show_error(). Друго нещо - за телефонен номер е хубаво да сложиш фиксирана дължина + проверка дали е само от числа:
,....

Благодаря за проверката за дължина на номера и дали е числа.

Мисля, че разбрах къде е грешката, но нямам идея защо и как да се оправи.
Значи аз имам страница contact.php с формата, когато през нея изпращам мейл тя ми зарежда нова страница. Ако мейла е успешно изпратен success.php,а ако има грешка - mailer.php, където виждам вече грешката и имам пак форма за контакт.

Винаги от contact.php ми вади тази грешка ... редиректва към mailer.php, където ми показва грешката и съответно имам отново форма за контакт(същата) и от там, като я попълня наново няма проблем.

Двете форми са идентични. Разликата е, че в contact.php на бутона action="mailer.php", a на mailer.php си е action="" ..

Дано стана ясно от това обяснение.

show_error() функцията е
Код:
function show_error($myError)
{
?>
<html>
....
<p>Следното поле е грешно:</p>
                        <div class="error">
                        <strong><?php echo $myError; ?></strong>
                        </div>
                        <p>Моля, попълнете формата отново.</p>
                      </div>  

/// тука формата пак с разликата, че тук вече php кода, който изпраща мейла е вече в този файл... най-отгоре преди <html>-a
</html>
<?php
exit();
}
?>

edit:
С тази проверка дали е число и дали е по-малко от 10 цифри ... нищо не минава. Винаги е Невалиден телефон.
 
Двете форми са идентични. Разликата е, че в contact.php на бутона action="mailer.php", a на mailer.php си е action="" ..
Винаги от contact.php ми вади тази грешка ... редиректва към mailer.php
Разбра ли? :Д

Е, ако не си се сетил:


Всъщност не е грешка и не е редирект, просто ти винаги му задаваш да изпраща към mailer.php
В contact.php action-a трябва също да е action=""
 
anonimen каза:
Двете форми са идентични. Разликата е, че в contact.php на бутона action="mailer.php", a на mailer.php си е action="" ..
Винаги от contact.php ми вади тази грешка ... редиректва към mailer.php
Разбра ли? :Д

Е, ако не си се сетил:


Всъщност не е грешка и не е редирект, просто ти винаги му задаваш да изпраща към mailer.php
В contact.php action-a трябва също да е action=""
Но ако в contact.php actiona="" няма да се изпълни нищо.. нещо се обърках
 
Нали в contact.php правиш проверката за валидност и ако е валиден, пренасочваш към success.php, в противен случай - mailer.php?

Тоест:
1.contact.php => попълва се форма (action="")
2.contact.php =>проверява се ^
3a. успех -> редирект към success.php
3b. неуспех->редирект към mailer.php
4. mailer.php ->показва се форма(action="mailer")
5.mailer.php -> проверка
 
anonimen каза:
Нали в contact.php правиш проверката за валидност и ако е валиден, пренасочваш към success.php, в противен случай - mailer.php?

Тоест:
1.contact.php => попълва се форма (action="")
2.contact.php =>проверява се ^
3a. успех -> редирект към success.php
3b. неуспех->редирект към mailer.php
4. mailer.php ->показва се форма(action="mailer")
5.mailer.php -> проверка

1. contact.php => попълва се форма (action="mailer.php"), тъй като тук имам само html .. само формата ми е тук
2. mailer.php => проверка
2а. успех => success.php
2b. неуспех => остава си mailer.php, където има отново форма за попълване с action="", тъй като в mailer.php е самия код за изпращане.
 
Явно аз не съм разбрал...
Е щом не работи само първия път, не може ли да махнеш contacts.php и да остане само mailer.php? Защо да не бъде само една форма, няма ли да е по-просто?
 
anonimen каза:
Явно аз не съм разбрал...
Е щом не работи само първия път, не може ли да махнеш contacts.php и да остане само mailer.php? Защо да не бъде само една форма, няма ли да е по-просто?
По-скоро аз не можах да го обясня, като хората в началото.
То от там идва целия проблем, че имам една на индекса, която няма вариант и при всички случай трябва да е с action="mailer.php" .. вече тази, която е в самата страница 'Контакт' може нямам проблеми да е mailer..

едит:
А идея, защо като пробвам с твоя код, който проверява дали е число и за дължината му винаги гърми с грешка, че номера е грешен?
Код:
show_error('Невалиден телефон.');
 
С моята проверка ще провери дали $_POST['inputPhone'] съдържа точно десет символа, които трябва да са единствено цифри. Но сега се зачетох по-подробно в php.net и открих това:
$integer = 42;
ctype_digit($integer); // false (ASCII 42 is the * character)
Така че май е по-добре да бъде така:

PHP:
if(!isset($_POST['inputPhone']) || !preg_match('/^08\d{8}$/', $_POST['inputPhone'])) {
show_error('Невалиден телефон.');
}
Ще мине само при 08 + осем цифри.
 
Да сега го пробвах и няма проблеми. Благодаря за това.. По другия проблем ще го мисля. :?:
Благодаря за хелпа :o
 

Back
Горе