Skocz do zawartości
"Idzie nowe..." - o zmianach i nie tylko ×
Przeniesienie zakupów z IPS Marketplace / Moving bought items from IPS Marketplace ×

ROZWIĄZANY: Formularz kontaktowy PHP


Amfidiusz

Rekomendowane odpowiedzi

Panowie,

Jestem na etapie budowania nowej strony internetowej. Jednym z jej elementów ma być formularz kontaktowy. I o ile sam formularz umiem zrobić, to nie za bardzo wiem jak te wiadomości przesłać na wybrany adres e-mail :thumbsup:

W formularzu mam kilka pól: imie i nazwisko, adres e-mail, telefon kontaktowy, strona internetowa i treść samego maila.

Jakiego kodu powinienem użyć, abym na swoje maila otrzymał wiadomość mniej więcej taką:

Nadawca: imie i nazwisko

email: [email protected]

Telefon:

Strona: ize.pl

Treść wiadomości.

Dodam, że ważne dla mnie jest, aby sam dokument mógł być zapisany pod rozszerzeniem html, a nie php.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

Pod .html niewiele zdziałasz, no chyba, że akcja formularza w tym pliku będzie przenosić na plik .php a ten z powrotem na ten plik .html. Ewentualnie plik .html zamień na .php, a potem regułą rewrite pokaż owy plik .html jako .php :thumbsup: Mam nadzieję, że nie zamotałem.

A teraz wysyłanie - mail():

$txt = 'treść wiadomości'l
mail('[email protected]', 'Tytuł maila', $txt );

  • Lubię to 1

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Odnośnik do komentarza
Udostępnij na innych stronach

Hmm... Pomysł z redirectem na html mi się podoba :thumbsup:

Problem właśnie w tym, że wszystkie tutoriale w sieci pokazują jak utworzyć plik php, a ja za wszelką cenę chciałem tego uniknąć. Będę kombinował teraz w ten sposób. Dzięki.

A jeszcze powiedz mi, jak moge wrzucić gotową templatkę html w plik php?

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager
<?php

# kod PHP


# uwaga, zaczynamy HTML!

$show .= <<<EOF

<div>lalalla lololo lelele lili</div>

EOF;


echo $show; # 

  • Lubię to 1

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Odnośnik do komentarza
Udostępnij na innych stronach

Teoretycznie możesz wymusić PHP w plikach HTML, jedyny mankament tego sposobu to fakt że musisz mieć dostęp do plików konfiguracyjnych apache:

apache2/conf/httpd.conf

Szukasz linijki na wzór:

AddType application/x-httpd-php .php

i na końcu dodajesz .html

Choć nie wiem czy jest najmniejszy sens się męczyć, skoro można "przepisać" plik *.php na *.html w .htaccess.

RewriteEngine On
RewriteRule (.*)\.php$ $1\.html

Wracając do samego formularza, to mozesz zrobić to też tak, że sam formularz będzie w pliku html, a skrypt odpowiadający za wysyłkę w php.

<form id="Formularz" name="Formularz" method="post" action="wyslij.php">
<fieldset>
       <legend>Pole</legend>
       <label for="Imie">Imię:</label><input type="text" name="Imie" id="Imie" value="" />        
       <label for="Nazw">Nazwisko:</label><input type="text" name="Nazw" id="Nazw" value="" />            
       <label for="Mail">E-mail:</label><input type="text" name="Mail" id="Mail" value="" />
       <label for="Tel">Telefon:</label><input type="text" name="Tel" id="Tel" value="" />
       <label for="Str">Strona:</label><input type="text" name="Str" id="Str" value="ize.pl" />
       <label for="Tresc">Tresc:</label><textarea NAME="Tresc" rows=10 cols=30></textarea>
</fieldset>            
<fieldset>        
       <input type="submit" value="Zapisz" />
</fieldset>        
</form>

wyslij.php:

<?php

   $message = "Nadawca: $_POST[imie] $_POST[Nazw]\nE-mail: $_POST[Mail]\nTelefon: $_POST[Tel]\nStrona: $_POST[str]\n\n$_POST[Tresc]";

   $header = "From: $_POST[imie] <$_POST[Mail]>";


   if (@mail("twó[email protected]","Wiadomosc ze strony WWW","$message","$header")){
   header('Location: kontakt.html'); // zakładam że po wysłaniu wiadomości z forumlarza ten ma wrócić z powrotem na stronę kontaktu
   }

?>

Zakładając że serwer zamulał nie będzie i email zostanie wysłany szybko (a tak powinno być bo załączników mniemam nie masz), to przekierowanie na stronę wyslij.php nie da się będzie zauważyć, bo zaraz po wysłaniu zostanie użytkownik przerzucony z powrotem do formularza - małe zabezpieczenie w postaci głupiego ciacha i problem ze spamem znika :thumbsup:

Edytowane przez Portek
  • Lubię to 1
Odnośnik do komentarza
Udostępnij na innych stronach

Portek, dzięki wielkie! Właśnie o coś takiego mi chodziło. Nie wiem czy jeszcze dzisiaj, ale jutro na pewno będę testował Wasze propozycje.

Mógłbyś napisać coś więcej (lub odesłać do lektury) na temat tych cookies?

Idąc w kierunku gotowca - swoją drogą dokumentacja też zapomina że sesje trzeba trzeba rozpocząć poprzez session_start() :thumbsup:

Zakładając że nic nie poknociłem - a na pewno poknociłem bo skupić się nie mogę...

<?php
@session_start();
if (!isset($_SESSION['wyslanoT']))
{
$_SESSION['wyslanoT'] = strtotime ("now");
$wyslano = 0;
} else {
       $wyslano = (strtotime("wyslano") - $_SESSION['wyslanoT']) / 60;
       settype($wyslano, "int");
      }

if (isset($_SESSION['wyslanoT'])) {
	$_SESSION['wyslano'] = true;
}
if ($wyslano > 0){
	$_SESSION['wyslano'] = true;
} else if($wyslano > 60) { $_SESSION['wyslano'] = false; $wyslano = 0; $_SESSION['wyslanoT'] = strtotime ("now");}

if ($_SESSION['wyslano'] == false) {
   $message = "Nadawca: $_POST[imie] $_POST[Nazw]\nE-mail: $_POST[Mail]\nTelefon: $_POST[Tel]\nStrona: $_POST[str]\n\n$_POST[Tresc]";

   $header = "From: $_POST[imie] <$_POST[Mail]>";


   if (@mail("twó[email protected]","Wiadomosc ze strony WWW","$message","$header")){
   header('Location: kontakt.html'); // zakładam że po wysłaniu wiadomości z forumlarza ten ma wrócić z powrotem na stronę kontaktu
   }
} else {
header('Location: kontakt.html');
}

?>

Odnośnik do komentarza
Udostępnij na innych stronach

  • 3 tygodnie później...

Skorzystałem z tego rozwiązania przesłanego przez Portka. Wszystkie wiadomości dochodzą tam, gdzie powinny. Pojawia się jednak problem z kodowaniem. Polskie znaki wpisane w pliku php wyświetlają się poprawnie (temat), ale już te wpisane przez użytkownika w formularzu html zamieniane zostają w krzaki (nadawca i treść):

pre_1288354832__mail.png

Nie za bardzo wiem, gdzie szukać rozwiązania. Pomożecie?

Odnośnik do komentarza
Udostępnij na innych stronach

Bo ja bym jeszcze dorzucił nagłówek o kodowaniu (do maila) i upewnił się że kodowanie skryptu wysyłającego jest ok.

To:

$header = "From: $_POST[imie] <$_POST[Mail]>";

Zmienić na:

$header = "'Content-type: text/html; charset=utf-8'". "\r\n";
$header .= "From: $_POST[imie] <$_POST[Mail]>". "\r\n";

[+] Dodałbym jeszcze zabezpieczenie antybotowe typu radio wybierz czy jesteś człowiekiem ^_^

Edytowane przez unbreak

userbar1.jpg

Twiztid Tribe ®

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

Tam chyba nowe linie są dziwnie oznaczane. Co używasz, jako nowa linia ^_^ \n ?

W jaki sposób mogę wyświetlić dane podane przez usera w pliku php?

W sensie?

print_r($_POST);

?

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Odnośnik do komentarza
Udostępnij na innych stronach

Dla nowych linii zostały użyte \n

Nadawca: $_POST[imie] $_POST[nazwisko]\nE-mail: $_POST[email]\nTelefon: $_POST[telefon]\n\n

W sensie?

Nie wiem w jakim sensie. Dla mnie to czarna magia. unbreak zasugerował wyświetlenie danych podanych przez użytkownika w pliku wysyłającym...

Odnośnik do komentarza
Udostępnij na innych stronach

U mnie działa ok: pre_1288356404__untitled-1.pngTyle że ja mam swój skrypt

@DawPi, masz tam w treści, używa \n

 $message = "Nadawca: $_POST[imie] $_POST[Nazw]\nE-mail: $_POST[Mail]\nTelefon: $_POST[Tel]\nStrona: $_POST[str]\n\n$_POST[Tresc]";

Faktycznie to chyba nie kodowanie ^_^

userbar1.jpg

Twiztid Tribe ®

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

Tam jednak coś nadal siedzi. Może znaki tabulacji \r? Usuń je:

$c = str_replace( '\r', '', $c );

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Odnośnik do komentarza
Udostępnij na innych stronach

Faktycznie to chyba nie kodowanie ;)

Jeśli nie kodowanie, to w czym leży problem? ^_^

$c = str_replace( '\r', '', $c );

Teraz plik wygląda tak i nadal są problemy z kodowaniem:

<?php

   $message = "Nadawca: $_POST[imie] $_POST[nazwisko]\nE-mail: $_POST[email]\nTelefon: $_POST[telefon]\n\n$_POST[wiadomosc]";

   $header = "'Content-type: text/html; charset=utf-8'". "\r\n";
   $header = "From: $_POST[imie] $_POST[nazwisko] <$_POST[email]>";


   if (@mail("[email protected]","Wiadomość ze strony WWW","$message","$header")){
   header('Location: kontakt2.html');
   }

   $c = str_replace( '\r', '', $c );
?>

Odnośnik do komentarza
Udostępnij na innych stronach

Nie wiem w jakim sensie. Dla mnie to czarna magia. unbreak zasugerował wyświetlenie danych podanych przez użytkownika w pliku wysyłającym...
Daj co to DawPi podał:
 print_r($_POST);

 $c = str_replace( '\r', '', $c);

zmień na:

 $message = str_replace( '\r', '', $message);

Edytowane przez unbreak

userbar1.jpg

Twiztid Tribe ®

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

Nie myślisz. ^_^

<?php

   $message = "Nadawca: $_POST[imie] $_POST[nazwisko]\nE-mail: $_POST[email]\nTelefon: $_POST[telefon]\n\n$_POST[wiadomosc]";
   $message  = str_replace( '\r', '', $message );
   $header = "'Content-type: text/html; charset=utf-8'". "\r\n";
   $header = "From: $_POST[imie] $_POST[nazwisko] <$_POST[email]>";


   if (@mail("[email protected]","Wiadomość ze strony WWW","$message","$header")){
   header('Location: kontakt2.html');
   }


?>

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Odnośnik do komentarza
Udostępnij na innych stronach

źle! Tak:

<?php

   $message = "Nadawca: $_POST[imie] $_POST[nazwisko]\nE-mail: $_POST[email]\nTelefon: $_POST[telefon]\n\n$_POST[wiadomosc]";
   $message  = str_replace( '\r', '', $message );
   $header = "'Content-type: text/html; charset=utf-8'". "\r\n";
   $header .= "From: $_POST[imie] $_POST[nazwisko] <$_POST[email]>";


   if (@mail("[email protected]","Wiadomość ze strony WWW","$message","$header")){
   header('Location: kontakt2.html');
   }


?>

Nie wyświetlisz tych zmiennych ot tak, dopiero teraz zauważyłem że skrypt od razu Cie przekierowuje.

Edytowane przez unbreak

userbar1.jpg

Twiztid Tribe ®

Odnośnik do komentarza
Udostępnij na innych stronach

źle! Tak:

Skopiowałem treść i nadal same krzaczki ;)

Maile dochodzą, złapały tylko filtr antyspamowy ^_^ Teraz wysyłam na gmaila.

Teraz lecimy w ten sposób?

<?php

   $message = "Nadawca: $_POST[imie] $_POST[nazwisko]\nE-mail: $_POST[email]\nTelefon: $_POST[telefon]\n\n$_POST[wiadomosc]";
   $message  = str_replace( '\r', '', $message );
   $header = "'Content-type: text/html; charset=utf-8'". "\r\n";
   $header .= "From: $_POST[imie] $_POST[nazwisko] <$_POST[email]>";


   if (@mail("[email protected]","Wiadomość ze strony WWW","$message","$header")){
   print_r($_POST);
   }


?>

Odnośnik do komentarza
Udostępnij na innych stronach

W sumie faktycznie tutaj coś nie tak ze znakiem nowej linii, przecież w tej wiadomości nie ma nawet polskich znaków. Amfi, możesz wysłać jakąś wiadomość z polskimi znakami? Wtedy będzie wiadomo ^_^

żeby usunąć przekierowanie zmień ifa i dodaj wyświetlenie:

<?php

   $message = "Nadawca: $_POST[imie] $_POST[nazwisko]\nE-mail: $_POST[email]\nTelefon: $_POST[telefon]\n\n$_POST[wiadomosc]";
   $message  = str_replace( '\r', '', $message );
   $header = "'Content-type: text/html; charset=utf-8'". "\r\n";
   $header .= "From: $_POST[imie] $_POST[nazwisko] <$_POST[email]>";


  mail("[email protected]","Wiadomość ze strony WWW","$message","$header");

print_r($_POST);
?>

A kodowanie formularza masz dobrze?

Edytowane przez unbreak

userbar1.jpg

Twiztid Tribe ®

Odnośnik do komentarza
Udostępnij na innych stronach

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.