Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: formularz - wyświetlanie błędów
Forum PHP.pl > Forum > Po stronie przeglądarki
timmyyy
Witam, czy mógłby mi ktoś przerobić ten kod tak, aby błędy/komunikaty pojawiały się pod formularzem, a nie na oddzielnej "białej" stronie, będę bardzo wdzięczny.



Kod
<?php
//--- początek formularza ---
if(empty($_POST['submit'])) {
?>

<?php
} else {
//twoje dane
$email = '';
//dane z formularza
$formName = $_POST['formName'];
$formEmail = $_POST['formEmail'];
$formXfire = $_POST['formXfire'];
$formText = $_POST['formText'];
if(!empty($formName) && !empty($formEmail) && !empty($formText)) {
//--- początek funkcji weryfikującej adres e-mail ---
function checkMail($checkmail) {
  if(filter_var($checkmail, FILTER_VALIDATE_EMAIL)) {
    if(checkdnsrr(array_pop(explode("@",$checkmail)),"MX")){
        return true;
      }else{
        return false;
      }
  } else {
    return false;
  }
}
//--- koniec funkcji ---
if(checkMail($formEmail)) {
  //dodatkowe informacje: ip i host użytkownika
  $ip = $_SERVER['REMOTE_ADDR'];
  $host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
  
  //tworzymy szkielet wiadomości
  //treść wiadomości
  $mailText = "Treść wiadomości: nie wazne..."
  
  //adres zwrotny
  $mailHeader = "From: $formName <$formEmail>";
  
  //funkcja odpowiedzialna za wysłanie e-maila
  @mail($email, 'Formularz kontaktowy', $mailText, $mailHeader) or die('Błąd: wiadomość nie została wysłana');
  
  //komunikat o poprawnym wysłaniu wiadomości
  echo 'Wiadomość została wysłana';
} else {
  echo 'The e-mail adress is incorrrect ';
}
} else {
  //komunikat w przypadku nie powodzenia
  echo 'Wypełnij wszystkie pola formularza';
}
//--- koniec formularza ---
}




?>


Turson
Na podstawie tego kawałka kodu nie da się tego zrobić.
timmyyy
aha rozumiem, w takim razie może ktoś ma jakiegoś gotowca w którym te komunikaty będą się wyświetlały pod formularzem?
@Turson
zajrzałem na Twojego bloga i znalazłem to
Kod
http://turson.pl/blog/php-formularz-kontaktowy-wysylanie-wiadomosci-e-mail

czy tutaj komunikaty wyświetlają się pod formularzem czy na oddzielnej stronie?
Turson
Nad formularzem.
Ale to kwestia zamiany 2 linijek.

Np. zamiast
Kod
echo "Adres e-mail jest niepoprawny.";
form();

bedzie
Kod
form();
echo "Adres e-mail jest niepoprawny.";
timmyyy
ok dzięki wink.gif

edit:
jest jeden problem, po wysłaniu wiadomości komunikat "Wiadomość została wysłana" pojawia się na "białej" stronie a nie pod formularzem, czy da się to jakoś zmienić?

f5
Turson
Pokaż kod
timmyyy
Kod
http://turson.pl/tutorials/mail/source.txt
Turson
Coś skopsałeś

btw. jak po tylu miesiącach patrzę na ten kod, to aż mi się śmiać chce. Zrobię kiedyś jakiś update biggrin.gif co nie zmienia faktu, że powinien działać.
timmyyy
nie zmieniałem nic oprócz maila na który idzie wiadomość.
Wszystkie inne komunikaty pięknie wyświetlają się pod formularzem a ten o wysłaniu wiadomości na innej stronie.
Jeżeli znalazł byś chwile czasu i poprawił to w kodzie to będę bardzo wdzięczny.
Turson
Włącz raportowanie błędów
timmyyy
włączyłem ale nie wiem czemu to ma służyć, tak jak napisałem wcześniej wszystko jest super, tylko po kliknięciu "wyślij" komunikat o poprawnym wysłaniu wiadomości wyświetla się na białej stronie, a nie np. pod formularzem
Turson
Zrobiłem update kodu, więc spróbuj tego:
http://turson.pl/blog/php-formularz-kontak...domosci-e-mail/
timmyyy
Turson, użyłem tego kodu po update i teraz nic się nie wyświetla - biała strona
nic nie zmieniałem, mam dwa pliki jeden form.php drugi contactform.class.php
Turson
Masz tutaj napisane jak włączyć raportowanie błędów, bo biała strona to sugeruje Temat: Jak poprawnie zadac pytanie
timmyyy
Fatal error: Can't use function return value in write context in /var/www/contactform.class.php on line 20

20 linijka:
Kod
if (empty(trim($_POST['name'])))


Turson
Sorry, już poprawiłem kod.
nospor
@Turson moglbys sprawdzac kod, ktory publikujesz w artach a nie robic kupe bledow.
Kolejny blad to:
$success = false;
Nigdzie tej zmiennej nie ustawiasz na true, przez co zawsze wysylka konczy sie "niepowodzeniem"

edit:
z racji, ze nie da sie komentowac normalnie na Twoim blogu, co juz ci zglaszalem, ale zostalem olany, napisze tutaj:
value="<?php if(isset($_POST['name'])) echo $_POST['name'] ?>"
Przez takie kody strona robi się podatna na ataki XSS. Naprawde nie jest wielkim problemem napisac:
value="<?php if(isset($_POST['name'])) echo htmlspecialchars($_POST['name']) ?>"
Skoro juz ludzie mają brac przyklad z Twoich kodow, niech to bedzie mialo rece i nogi.

edit2: albo bylem slepy, albo dopisales te $success. Nie wykluczam żadnej z opcji wink.gif
timmyyy
Turson mógłbyś poprawić ten kod, żeby wszystko śmigało? Będę bardzo wdzięczny.
Turson
Poprawiłem na szybko.

@nospor
w końcu kiedyś ogarnę te komentarze biggrin.gif
timmyyy
ok śmiga ale dalej komunikat o poprawnym wysłaniu wiadomości wyświetla się na białej stronie (jeżeli nie wiesz o co chodzi - http://www.speedyshare.com/wH7X6/turson.avi)
dasz radę zrobić tak aby np. po naciśnięciu "wyślij wiadomość" formularz został wyczyszczony a komunikat pojawił się pod nim? (http://qs.lc/5obhq - mniej więcej chodzi mi o coś takiego)
Nie bardzo ogarniam php więc nie wiem czy jest to trudne do zrobienia i ile zajmuje czasu, nie spieszy mi się. Jeżeli znalazłbyś trochę wolnego czasu, chęci i zrobił mniej więcej tak jak napisałem było by super.
Turson
Pojawia się biała strona bo... po wysłaniu wiadomości po prostu formularz nie jest pokazywany.

Nie testowałem
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>Formularz kontaktowy</title>
  6. </head>
  7. <body>
  8. <?php
  9. require_once 'contactform.class.php';
  10. $errors = false;
  11. $success = false;
  12. if(isset($_POST['sent'])){
  13. $contactForm = new ContactForm;
  14. $success = $contactForm->execute();
  15. $errors = $contactForm->getErrors();
  16. }
  17. if($errors)
  18. echo implode('<br>', $errors);
  19. ?>
  20. <form action="" method="post">
  21. <input type="text" name="name" value="<?php if(isset($_POST['name']) && $errors) echo ($_POST['name']) ?>" placeholder="Imię i nazwisko" required><br/>
  22. <input type="email" name="email" value="<?php if(isset($_POST['email']) && $errors) echo htmlspecialchars($_POST['email']) ?>" placeholder="Adres e-mail" required><br/>
  23. <textarea name="content" placeholder="Treść wiadomości" required><?php if(isset($_POST['content']) && $errors) echo htmlspecialchars($_POST['content']) ?></textarea><br/>
  24. <input type="submit" name="sent" value="Wyślij wiadomość">
  25. </form>
  26. <?php
  27. if($success)
  28. echo 'Wiadomość wysłana';
timmyyy
teraz śmiga smile.gif
dzięki, jesteś wielki

@Turson
czy dodanie do tego formularza prostej captchy to dużo roboty?
Jak byś znalazł chwilkę i dodał to będę bardzo wdzięczny.

da radę?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.