amad89 Napisano Kwiecień 15, 2019 Zgłoś Napisano Kwiecień 15, 2019 Cześć mam pytanie czy wie ktoś dlaczego napisany skrypt posługujący wysyłanie wiadomości email nie działa. Po naciśnięciu akcji wysyłania formularz, pojawia się biała strona. <?php //filtruje dane użytkownika $name = htmlspecialchars(trim($_POST['name'])); $email = htmlspecialchars(trim($_POST['email'])); $message = htmlspecialchars(trim($_POST['message'])); $send = $_POST['send']; //mail na który będa wysyłane wiadomości $odbiorca = "arekmadera@gmail.com"; //nagłówki $header = "Content-type: text/html; charset=utf-8\r\nFrom: $email"; //Sprawdzam czy istnieje ciastko, jeżeli tak wyświetlam komunikat if (isset($_COOKIE['send'])) $error ='Odczekaj '.($_COOKIE['send']-time()).' sekund przed wysłaniem kolejnej wiadomości'; if ($send && !isset($_COOKIE['send'])) { //Sprawdzam nick if (empty($imie)) { $error = "Nie wypełniłeś pola <strong>Nick !</strong><br/>"; } elseif (strlen($imie) > 20) { $error .="Za długi nick - max. 20 znaków <br/>";} //Sprawdzam mail if (empty($email)) { $error .= "Nie wypełniłeś pola <strong>E-mail !</strong><br/>"; } elseif (strlen($email) > 30) { $error .="Za długi e-mail - max. 30 znaków <br/>";} elseif (preg_match('/^[a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ0-9\-\_\.]+\@[a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ0-9\-\_\.]+\.[a-z]{2,4}$/',$email) == false) { $error .= "Niepoprawny adres E-mail! <br/>"; } //Sprawdzam wiadomosc if (empty($message)) { $error .= "Nie wypełniłeś pola <strong>Wiadomość !</strong><br/>"; } elseif (strlen($message) > 400) { $error .="Za długa wiadomość - max. 400 znaków <br/>";} //Sprawdzam czy są błędy i wysyłam wiadomość if (empty($error)) { $list = "Przysłał - $imie ($email) <br/> Treść wiadomości - $message"; if (mail($odbiorca, $temat, $list, $header)) { $error .= "Twoja wiadomość została wysłana"; setcookie("send", time()+60, time()+60); } else { $error .= "Wystąpił błąd podczas wysyłania wiadomości, spróbuj później.";} } } ?> dodam też kod html <form action="kontakt.php" method="post"> <input type="text" name="name" placeholder="Imię i nazwisko" required> <input type="email" name="email" placeholder="Twój email" required> <textarea name="message" placeholder="Napisz tu wiadomość" required></textarea> <input type="submit" name="send" value="Wyślij formularz"> </form> Cytuj
Bartosz Wójcik Napisano Kwiecień 15, 2019 Zgłoś Napisano Kwiecień 15, 2019 Bo twój kod de facto nic nie wyświetla, tylko ustawia zmienną $error. Dodaj sobie echo $error; żeby coś wyświetlić. Cytuj
Colorful CMS Napisano Niedziela o 09:34 Zgłoś Napisano Niedziela o 09:34 Cześć! Biała strona oznacza zwykle fatalny błąd PHP, więc włącz na czas testów error_reporting(E_ALL) i ini_set('display_errors',1) albo zajrzyj do error.log. W kodzie widzę kilka problemów: pobierasz dane do zmiennej $name, a walidujesz $imie, która nigdy nie powstaje, więc pole nick zawsze będzie puste. Dodatkowo $send = $_POST['send'] rzuci notice, jeśli klucza nie ma, użyj isset(). Nagłówek From: $email z danych użytkownika to też luka (header injection) i wiele serwerów odrzuca takie maile, lepiej ustaw From na adres z własnej domeny, a email użytkownika dodaj w Reply-To. Sprawdź też, czy mail() zwraca true i czy hosting w ogóle pozwala na jego użycie; w razie problemów warto sięgnąć po PHPMailer z SMTP. Cytuj
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.