BG Development


Страници: (4) « първа ... 2 3 [4]   ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> Да направим контактна форма за сайт по стандартите, Семпла и работеща форма на HTML5 и PHP
goro
Публикувано на: 10-02-2024, 20:31
Quote Post



Име:
Група: Потребител
Ранг: Активен

Мнения: 150
Регистриран на: 31.05.09



Видях нещо за йероглифи и затова се включвам.
Моят опит
В някой случаи работи само едно от двете (имам предвид края на ред)
CODE
."To: <$address>\r\n"
."To: <$address[>\n"

$headers .='Content-type:text/html; charset=utf-8'."\r\n";
$headers .='Content-type:text/html; charset=utf-8'."\n";

Защо? Не знам.

Напоследък предпочитам това
CODE
$headers .='Content-Transfer-Encoding: base64'."\n";


Не забравяй и -f
CODE
mail($to,$subject,$message,$headers, "-f$site_mail");


Иначе... mail функцията си работи отлично.
Отлично работи и това:

CODE
function smtp_mail($to, $from, $mssg, $user, $pass, $host, $port) {
      if ($h = fsockopen($host, $port))
      {
            $data = array(
                  0,
                  "EHLO $host",
                  'AUTH LOGIN',
                  base64_encode($user),
                  base64_encode($pass),
                  "MAIL FROM: <$from>",
                  "RCPT TO: <$to>",
                  'DATA',
                  $mssg
            );

            foreach($data as $c)
            {
                  $c && fwrite($h, "$c\r\n");
                  while(substr(fgets($h, 256), 3, 1) != ' '){}
            }

            fwrite($h, "QUIT\r\n");
            return fclose($h);
      }
}


Това мнение е било редактирано от goro на 10-02-2024, 20:32
PM
Top
Бай Аз
Публикувано на: 10-02-2024, 21:28
Quote Post



Име:
Група: Потребител
Ранг: Активен

Мнения: 277
Регистриран на: 04.02.21




goro,

Благодаря за включването! Ще ги огледам и тези неща, които си написал!

---------------------

А иначе, аз се включвам да съобщя, че съм готов с окончателния вариант на контактната форма. На тоя етап ще ползвам само функцията mail.

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

Никога не се доверявам само на едно мнение! Дори да е на най-големия експерт в дадената област. Трябва да има потвърждение от поне още 1-2 източника, за да му се доверя!

Ето кодът във файла sendmail.php:

CODE
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
   $name = htmlspecialchars($_POST["name"]);
   $email = htmlspecialchars($_POST["email"]);
   $subject = htmlspecialchars($_POST["subject"]);
     
   $message = "Име: $name\r\n";
   $message .= "E-mail: $email\r\n";
   $message .= "Тема: $subject \r\n\n"; // оставям допълнителен празен ред
   $message .= "Съобщение: ".$_POST["message"]."\r\n";
   $message = wordwrap($message, 70);
      
   $headers = "MIME-Version: 1.0\r\n";
   $headers .= "Content-Type: text/plain; charset=UTF-8\r\n";
   
   // Изпращане на e-mail с проверка
   $send = mail("mymail@mysite.com", $subject, $message, $headers);
   // Ако има грешка при изпращането - извеждаме съобщение
   if ($send != 'true') {
      echo "Грешка при изпращането! Моля, опитайте отново!";
   }
}
?>
<html>
     <head>
           <meta charset="utf-8">
           <title>Успешно изпратено съобщение</title>
           <style>
                 h2 {
                       color: #00698c;
                       font-family: Arial, sans-serif;
                       font-size: 2em;
                       font-weight: bold;
                       text-align: center;
                 }
           </style>
     </head>
     <body>
           <br><br><h2>Вашето съобщение бе изпратено успешно!</h2><br><br>
           <h2>За да се върнете обратно - натиснете <a style="color: #59b300;" href="contacts.html"> тук</a>!</h2>
     </body>
</html>


Някои пояснения по кода:

- за да работи при вас - трябва да смените примерния имейл, който аз съм написал: mymail@mysite.com с вашия имейл
Говорим в реда: $send = mail("mymail@mysite.com", $subject, $message, $headers);

- Включил съм функцията htmlspecialchars() само за първите три полета, а в полето за съобщението - не, за да може да се пише и код в него. Който иска - може да я включи и там, или да не я включи изобщо.

- Включих и полето тема - да фигурира в полученото съобщение

- проверката при изпращане на имейла я правим само за грешка. Ако всичко е наред влизаме в HTML частта и ни се изписва съобщението:
CODE
Вашето съобщение бе изпратено успешно!

За да се върнете обратно - натиснете тук!

И след като кликнете върху връзката - се връщате на страницата контакти.
(Направил съм го така, за да бъде без използване на Javascript!)

Това е всичко. Контактната форма е изпробвана десетки пъти - и работи!

п.с. Кодът в HTML файла contacts.html е същият, даден e в първия пост от темата.

Това мнение е било редактирано от Бай Аз на 10-02-2024, 21:42
PMEmail Poster
Top
ici
Публикувано на: 10-02-2024, 22:19
Quote Post


Group Icon
Име: Ивайло Илчев
Група: VIP
Ранг: Почетен член

Мнения: 18514
Регистриран на: 06.06.04



Сега работи, ама на друг сървър може и да не работи. Аргумента $additional_headers в mail функцията може да е масив. Използвай масив вместо оная грозотия "\r\n" и конкатенация.
Не виждам никъде проверка за ".." в стринга за съобщението.


Това мнение е било редактирано от ici на 10-02-2024, 22:22


--------------------
Ние не сме в една лодка, ние сме в една буря. Лодките са различни.

Следващият път когато се почувстваш ненужен, грозен и недооценен, помни че освен това си и тъп.
PMEmail PosterUsers Website
Top
relax4o
Публикувано на: 11-02-2024, 00:19
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2801
Регистриран на: 04.04.07



Оправи този ред:

CODE

if ($send != 'true') {


на

CODE

if (!$send) {


'true' не е реална булева стойност, а просто текст "true". Ще се интерпретира като булева стойност true, но не е същото и трябва да избягваш да го правиш иначе ще срещнеш проблеми.

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

CODE

$var = true; // булева стойност
$var === true // изхода е булево true
// но
$var === 'true' // изхода ще е булев false


Във втория случай получаваш false, защото типа на 'true' е string,а не boolean, въпреки че всеки низ, който не е празен се интерпретира към булев true.


--------------------
Бисери :D

QUOTE (oveRLuckEd)
Ползваш някоя нова версия на PHP, която е вече ооп ориентирана и заради това ти я изкарва тази грешка.


QUOTE (nbacool2)
Щом няма input полета, значи няма откъде да се направи SQL инжекция Very Happy
PM
Top
Бай Аз
Публикувано на: 11-02-2024, 00:19
Quote Post



Име:
Група: Потребител
Ранг: Активен

Мнения: 277
Регистриран на: 04.02.21




ici,

Аргументът $additional_headers в mail функцията е опционален, първите три са задължителни.
Ще помисля все пак и за този вариант, който предлагаш.

А проверка за празен стринг не правя, защото тя се прави в HTML файла, в самата форма!
с required
CODE
<textarea id="textarea-message" name="message" rows="8" required></textarea><br>


п.с. Може и да направя такава проверка и в PHP файла!

Това мнение е било редактирано от Бай Аз на 11-02-2024, 00:47
PMEmail Poster
Top
relax4o
Публикувано на: 11-02-2024, 00:22
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2801
Регистриран на: 04.04.07



QUOTE (Бай Аз @ 11-02-2024, 00:19)
А проверка за празен стринг не правя, защото тя се прави в HTML файла, в самата форма!

Урок номер 2.

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

Бек енда винаги трябва да се валидира, въпреки че слагаш валидация отпред.


--------------------
Бисери :D

QUOTE (oveRLuckEd)
Ползваш някоя нова версия на PHP, която е вече ооп ориентирана и заради това ти я изкарва тази грешка.


QUOTE (nbacool2)
Щом няма input полета, значи няма откъде да се направи SQL инжекция Very Happy
PM
Top
Бай Аз
Публикувано на: 11-02-2024, 00:30
Quote Post



Име:
Група: Потребител
Ранг: Активен

Мнения: 277
Регистриран на: 04.02.21



relax4o,

Ще слея отговорите си към теб, че стана много разпръснато:

QUOTE (relax4o @ 11-02-2024, 00:19)

Оправи този ред:

CODE

if ($send != 'true') {


на

CODE

if (!$send) {



relax4o,

ОК, ще го коригирам!

Просто това го промених в последния момент, защото не исках да изписва съобщение, когато всичко е наред, а само когато има грешка! И някъде го видях така написано и го копнах icon_lol.gif

Благодарско!

QUOTE (relax4o @ 11-02-2024, 00:22)
QUOTE (Бай Аз @ 11-02-2024, 00:19)
А проверка за празен стринг не правя, защото тя се прави в HTML файла, в самата форма!

Урок номер 2.

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

Бек енда винаги трябва да се валидира, въпреки че слагаш валидация отпред.


Да, това го препоръчват навсякъде!
(Но не ми се правеше, защото не исках кода да се раздува прекалено много!)

Ще го дообмисля и вероятно ще го променя!

Това мнение е било редактирано от Бай Аз на 11-02-2024, 00:47
PMEmail Poster
Top
rvc
Публикувано на: 20-02-2024, 13:43
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2638
Регистриран на: 13.05.11



QUOTE (Бай Аз @ 10-02-2024, 00:13)
BIGBUGEX,

Не, не съм опитен! Разбирам добре само HTML и CSS!
От PHP имам само бегла представа, но нямам време и желание да го уча и него, и ползвам само някои PHP скриптове, когато са необходими.

...

наричаш себе си разбирач на HTML и CSS а не знаеш че по-старите браузъри псуват когато срещнат непознато CSS свойство?

по скалата от 1 до 10... колко точно разбираш от CSS?
PMEmail PosterUsers Website
Top
Бай Аз
Публикувано на: 20-02-2024, 14:01
Quote Post



Име:
Група: Потребител
Ранг: Активен

Мнения: 277
Регистриран на: 04.02.21



QUOTE (rvc @ 20-02-2024, 13:43)

наричаш себе си разбирач на HTML и CSS а не знаеш че по-старите браузъри псуват когато срещнат непознато CSS свойство?

по скалата от 1 до 10... колко точно разбираш от CSS?


Естествено, че знам за старите браузъри, и че по принцип се слагат префикси за тях...
Друг е въпросът колко хора действително ползват прекалено стари версии на браузърите си? Почти не познавам такива!

Аз лично ползвам само най-новите версии на Опера и Мозила. А когато тествам - и на Хрома.

Казал съм, че разбирам добре HTML и CSS! А не, че съм супер експерт!

Продължавам да чета книги, статии, да гледам видеоуроци, да работя по свои проекти, да се уча!

Самооценки - нямам намерение да си давам или да давам отчет за това на някого!

Това мнение е било редактирано от Бай Аз на 20-02-2024, 14:08
PMEmail Poster
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (4) « първа ... 2 3 [4]  Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2019 | BG Development | All Rights Reserved
RSS 2.0