Неработещ формуляр

ADO

Active Member
Здравейте колеги, трябва ми помощ от най опитен в тази насока. Проблемът е следния:

1. Имам наличен код за формуляр т.е. изграден формуляр във уеб сайт.
2. Обаче, доколкото разбрах трябва да се направи отделна PHP страница, където е разположен код, осъществяващ връзката между сървъра и подадената информация (заявка) от формуляра.

Търсенето на информация по темата ще отнеме много време, а аз малко бързам. Бих се зарадвал, ако някой разполага с готово решение на проблема.

Казано на прост език, имам двигател, но не знам какъв вид гориво да сложа в резервоара + добавки. :)

(Сайтове, които предлагат изработка на формуляр за 5 мин. безплатно вече съм ги разгледал).

Благодаря предварително!
 
Аз го разбирам, че има HTML форма, но няма back-end-а било PHP / JS / AJAX или някаква комбинация, така че самата форма да събмитва и да добавя инфото в база данни или да изпраща имейл или каквото там си е наумил човекът.
Пиши на лично, ако искаш, с по-подробно инфо какво имаш и какво трябва да се постигне.
 
  • Like
Реакции: ADO
Познавам пича, щеше да се изрази така, ако това беше. Но и аз не знам дали това е имал предвид. На това ми изглежда, но исках от него да знам. :) И една база няма да е зле да мисли. Някой MySQL. :)

Всъщност аз не се изразих правилно, Банко има право. В база от данни, MySQL навлизам тепърва, затова нямам познания в тази насока. Общо взето имах предвид обикновен контактен формуляр за контакти, който изпраща въведената информация към фирмената поща.

Блъскам си главата от няколко дена, но работата до тук изглежда така:

HTML кода е следния:

<form action="/msg_form.php" method="post">

<div>
<label for="name">Име, Фамилия:</label>
<input type="text" id="name" name="user_name" placeholder="Въвете имената си.. " required>
</div>

<div>
<label for="mail">E-mail:</label>
<input type="email" id="mail" name="user_email" placeholder="Въведете Email.." required>
</div>

<div>
<label for="msg">Съобщение:</label>
<textarea id="msg" name="user_message" placeholder="Тук напишете съобщението си.." required></textarea>
</div>
<div class="button">
<button type="submit">Изпрати</button>
</div>
</form>

А това е .php страницата, която уж обработва данните формуляра и осъществява връзка със сървъра и т.н.

<?php die(); ?> // това е функцията който е поставен временно, докато формуляра поработи правилно (ще се маха)

$name_error = $email_error = $phone_error = $url_error = "";
$name = $email = $phone = $message = $url = $success = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {

function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}

if (empty($_POST["name"])) {
$name_error = "Name is required";
} else {
$name = test_input($_POST["name"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
$name_error = "Only letters and white space allowed";
}
}

if (empty($_POST["email"])) {
$email_error = "Email is required";
} else {
$email = test_input($_POST["email"]);
// check if e-mail address is well-formed
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$email_error = "Invalid email format";
}
}

{
$message_body = '';
unset($_POST['submit']);
foreach ($_POST as $key => $value) {
$message_body .= "$key: $value\n";
}
}

//COX SMTP: smtp.west.cox.net, PORT: 25 (php.ini)
$to = '[email protected]';
$subject = 'Contact Form Submit';
if (mail($to, $subject, $message_body)){
$success = "Message sent, thank you for contacting us!";
//reset form values to empty strings
$name = $email = $message = '';
}

Отделно трябва и да се направило някакъв ini.php но, като цяло съм в гъбите. :) Тази php страница е просто за пример, предполагам трябва да се обработи наново, понеже данните не съвпадат.
 
На първо място имената на полетата в HTML формата не отговарят на това, което PHP-то обработва в POST-а.
Ама така в тема да решаваме такива въпроси ми се струва неуместно.
Както посочих, ако искаш, пиши на лично (дай Skype например или друга форма на по-лесен контакт), за да решим проблема бързо и точно.

В същото време - мейл функцията е малко обатачена поне за мен в PHP, колко съм се мъчил да пращам разни съобщения от скапани хостинг сървъри, които я не получавам, я отиват в спама. Не съм фен на flow-а form -> email, по-умно според мен е form -> database и оттам си гледаш и отговаряш.
 
На първо място имената на полетата в HTML формата не отговарят на това, което PHP-то обработва в POST-а.
Ама така в тема да решаваме такива въпроси ми се струва неуместно.
Както посочих, ако искаш, пиши на лично (дай Skype например или друга форма на по-лесен контакт), за да решим проблема бързо и точно.

В същото време - мейл функцията е малко обатачена поне за мен в PHP, колко съм се мъчил да пращам разни съобщения от скапани хостинг сървъри, които я не получавам, я отиват в спама. Не съм фен на flow-а form -> email, по-умно според мен е form -> database и оттам си гледаш и отговаряш.
ква е разликата?
 
ква е разликата?
В кое бе хейтъре? За flow-а ли питаш?
Е нали съм обяснил - тъпи хостинги, бъгави мейл сървъри от което следва: неизпратени имейли или такива отиващи в спам...

Или за решаването на въпроса в постове в тема във форум (бавно и минава 1 ден докато разберем какъв е проблемът после още 2-3 докато го решим, а по Skype или някаквъ друг директен контакт за 30 минути да сме го оправили)?
 
Здравейте колеги, трябва ми помощ от най опитен в тази насока. Проблемът е следния:

Казано на прост език, имам двигател, но не знам какъв вид гориво да сложа в резервоара + добавки. :)
По-скоро имаш едни тенекии от които искаш да сглобиш автомобил.
 
Докато пиех сутрешното кафе, се замислих, че подобен код рядко се вижда послените години. По-характерен е за зората на php 4.
С подходяща работна рамка се спретва за 15-тина минути. И ще работи дори mail функцията на хостинга да не е достъпна. (smtp например). Да преработя този код до нещо работещо ми отне около половин час. Срам за мен :) Отвикнал съм така да се каже, даже имаше моменти на голямо чудене защо не иска да тръгне.
Изводи: Използвайте съвременните технологии. Да и двете неща най-вероятно ще свършат работа. Въпросът е като спре да работи кое ще тръгне ще се оправи по--бързо. Този код като цяло е труден за поддръжка поради ред причини. Най-малкото за да слениш получателя трябва да го редакттираш.
Код:
<?php
$errors = [];
$name = $email = $phone = $message = $url = $success = '';
if (isset($_POST)) {
   function test_input($key) {
       if (isset($_REQUEST[$key]) && $_REQUEST[$key]) {
           return filter_var($_REQUEST[$key], FILTER_SANITIZE_STRING);
       }
       return null;
   }
   if (!$name = test_input('name')) {
       $errors['name'] = "Name is required.";
   } else if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
       // check if name only contains letters and whitespace
       $errors['name'] = "Only letters and white space allowed.";
   }
   if (!($email = test_input('email')) || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
       $errors['email'] = "Incorrect Email.";
   }
   if (!$message = test_input('message')) {
       $errors['message'] = "Message is required.";
   }
   
   if (count($errors) == 0) {
       //COX SMTP: smtp.west.cox.net, PORT: 25 (php.ini)
       $to = '[email protected]';
       $subject = 'Contact Form Submit';
       if (mail($to, $subject, $message)){
           $success = "Message sent, thank you for contacting us!";
           //reset form values to empty strings
           $name = $email = $message = '';
       }
   }
}
?>
<?php if ($success) { ?>
   <?php echo $success;?>
<?php } ?>
<form action="" method="post">
   <div>
       <label for="name">Име, Фамилия:</label>
       <input type="text" id="name" name="name" placeholder="Въвете имената си.. " required="required" value="<?php echo htmlspecialchars($name);?>">
       <?php if (isset($errors['name'])) { ?>
           <?php echo $errors['name'];?>
       <?php } ?>
   </div>
   <div>
       <label for="mail">E-mail:</label>
       <input type="email" id="email" name="email" placeholder="Въведете Email.." required="required" value="<?php echo htmlspecialchars($email);?>">
       <?php if (isset($errors['email'])) { ?>
           <?php echo $errors['email'];?>
       <?php } ?>
   </div>
   <div>
       <label for="msg">Съобщение:</label>
       <textarea id="msg" name="message" placeholder="Тук напишете съобщението си.." required="required"><?php echo $message?></textarea>
       <?php if (isset($errors['message'])) { ?>
           <?php echo $errors['message'];?>
       <?php } ?>
   </div>
   <div class="button">
   <button type="submit">Изпрати</button>
   </div>
</form>
 
@imagination , благодаря за труда от твоя стана. Много се радвам, че се опитваш да дадеш светлина на нещата. Качих кода в сайта, това е линка http://www.adobiz.eu/test_form.php

Пробвах тест, чаках, но не пристигна мейл. Най-вероятно не съм направил нещо както трябва. Не съм човек, който разбира от PHP, а БД почвам чак сега да уча и да се упражнявам. Сам скоро няма да успея, то е ясно. Но не съм от тези, които се отказват лесно, така че съм отворен за всякакви предложения и съвети.
Огромни благодарности към теб. :)

@John Galt, благодаря също и а теб. Можеш да пишеш на мейл адреса ми userado at protonmail dot com
на вацап мога да ти пиша чак след 19:00 тази седмица (ще ти дам връзка и по този канал)

Само да спомена, че бих се отблагодарил с каквото мога към всички колеги, отзовали се на каузата. Оставам в чакане до нови предложения и похвати.
 
@imagination , благодаря за труда от твоя стана. Много се радвам, че се опитваш да дадеш светлина на нещата. Качих кода в сайта, това е линка http://www.adobiz.eu/test_form.php

Пробвах тест, чаках, но не пристигна мейл. Най-вероятно не съм направил нещо както трябва. Не съм човек, който разбира от PHP, а БД почвам чак сега да уча и да се упражнявам. Сам скоро няма да успея, то е ясно. Но не съм от тези, които се отказват лесно, така че съм отворен за всякакви предложения и съвети.
Огромни благодарности към теб. :)

@John Galt, благодаря също и а теб. Можеш да пишеш на мейл адреса ми userado at protonmail dot com
на вацап мога да ти пиша чак след 19:00 тази седмица (ще ти дам връзка и по този канал)

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

Дай направо с база данни да го направим, хем ще се упражняваш, хем ще имаш нещо, което не зависи толкова от тъпи мейл сървъри. Какво ще кажеш?
 
  • Like
Реакции: ADO
В кое бе хейтъре? За flow-а ли питаш?
Е нали съм обяснил - тъпи хостинги, бъгави мейл сървъри от което следва: неизпратени имейли или такива отиващи в спам...

Или за решаването на въпроса в постове в тема във форум (бавно и минава 1 ден докато разберем какъв е проблемът после още 2-3 докато го решим, а по Skype или някаквъ друг директен контакт за 30 минути да сме го оправили)?
И каква е разликата ако го пратиш след запис в базата?!
 
С база или без е добре първо да се определи дали писмото не се изпраща или писмото не пристига.
Да видим какво връща функцията mail() макар, че тя в 90% от случаите връща true;
Код:
if (mail($to, $subject, $message)){
          $success = "Message sent, thank you for contacting us!";
          //reset form values to empty strings
          $name = $email = $message = '';
} else {
         $success = "Възникна грешка при ИЗПРАЩАНЕ на писмото";
         print_r(error_get_last());
}
това, че едно писмо не пристига може да се дължи на много фактори. Логично е да не се е изпратрило, но е много вероятно и да е в спам-а.
Диагностиката защо функцията mail() не изпраща без достъп до хостинга е загубена кауза. Добре е да се погледне какво пише в error_get_last()

Силно препоръчвам https://github.com/PHPMailer/PHPMailer и изпращане на писмата през СМТП. Има примерни кодове.
Напоследък имам много случаи за временна невъзможност за доставяне на писмата. В този случай те се втъщат на подателя със съответната причина. Може да се помисли за тяхната обработка и ако се прецени да се изпратят повторно. Тогава щем не щем ще трябва да си направим опашка от съобщения (примерно в база от данни) и да следим техният статус, ако се наложи да бъдат изпратени повторно. Като цяло става сложно :)

Поздрави.
 
  • Like
Реакции: ADO
И каква е разликата ако го пратиш след запис в базата?!
1. Идеята ми е да не го пращаш въобще, но все пак...
2. Ако го запишеш първо в базата и след това го изпратиш с mail() дори да не пристигне по мейла, то ще го имаш в базата откъдето ще можеш да го погледнеш и да отговориш???

Не можеш или не искаш да схванеш идеята на контакт формата? Който и от двата случая да е, надявам се да е вторият, ще ти я обясня: когато потребител да влезе в сайта ти и си каже "многу яку, искам да знам повече", попълва контакт формата.
Ти, разбира се, искаш да знаеш какво е написал този човек, та да можеш да му отговориш на запитването. Съответно ако mail-а не сработи (за да ти изпрати запитването му до твоя имейл) всичко е една загубена кауза: няма да разбереш какво го е интересувало и го губиш като потенциален клиент, защото никъде нямаш записано копие на питането му.
А клиента сякаш много го вълнува дали ще му пратиш автоматичен имейл след като попълни формата в който му казваш "благодаря ви, че попълнихте формата"

По принцип сте умни хора хейтърите...
 
Последно редактирано:
  • Like
Реакции: ADO

Горе