Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zmiana na formularz
Forum PHP.pl > Forum > PHP
max110
Witam,

Otóż potrzebuję zmienić to:

  1. <form action="" method="post" style="margin:0px; padding:0px;">
  2. <p align="center"><input type="text" style="width:70%; border:1px solid #ccc; color:#999999; padding:2px;" name="email" /></p>
  3. <p align="right"><input type="submit" style="border:0px; background:0px; color:#CC0000; font-weight:bold;" value=" wyślij " /></p>
  4. </form>


Na formularz tylko do podania swojego adresu i po wysłaniu, żeby dany adres e-mail był przesyłany do jakiegoś pliku lub na mój e-mail.
Zupełnie nie wiem jak to zrobić, gdyż się na tym nie znam.

Znalazłem coś takiego:

  1. <?php
  2. // sprawdzamy, czy zmienna $submit jest pusta
  3. if (empty($_POST['submit'])) {
  4. // wyświetlamy formularz
  5. echo "<table border=\"0\"><form method=\"post\">
  6. <tr>
  7. <td>Treść wiadomości</td>
  8. <td><textarea name=\"tresc\" style=\"width: 250px; height: 100px\"></textarea></td>
  9. </tr>
  10. <tr>
  11. <td>Imię, nazwisko lub nick</td>
  12. <td><input type=\"text\" name=\"imie\" style=\"width: 250px\"></td>
  13. </tr>
  14. <tr>
  15. <td>Adres e-mail</td>
  16. <td><input type=\"text\" name=\"email\" style=\"width: 250px\"></td>
  17. </tr>
  18. <tr>
  19. <td>&nbsp;</td>
  20. <td><input type=\"submit\" name=\"submit\" value=\"Wyślij\">&nbsp;
  21. <input type=\"reset\" value=\"Od nowa\"></td></form>
  22. </tr>
  23. </table>";
  24. }
  25. // sprawdzamy, czy zmienne przesłane z formularza nie są puste
  26. elseif (!empty($_POST['tresc']) && !empty($_POST['imie']) && !empty($_POST['email'])) {
  27. // jeżeli powyższy warunek jest spełniony tworzona jest wiadomość
  28. // zmienna $message zawiera treść wiadomości
  29. $message = "Treść wiadomości:\n$_POST[tresc]\nWysłał: $_POST[imie]\ne-mail: $_POST[email]";
  30. // zmienna $header zawiera przede wszystkim adres zwrotny
  31. $header = "From: $_POST[imie] <$_POST[email]>";
  32. // funkcja mail() za pomocą której wiadomość zostanie wysłana
  33. @mail("adres@domena.pl","Wiadomosc ze strony WWW","$message","$header")
  34. or die('Nie udało się wysłać wiadomości');
  35. // wyświetlenie komunikatu w przypadku powodzenia
  36. echo "<div align=\"center\"><strong>Wiadomość została wysłana poprawnie!</strong></div>";
  37. }
  38. // lub w przypadku nie wypełnienia formularza do końca
  39. else echo "<span style=\"color: #FF0000; text-align: center;\">Wypełnij wszystkie pola formularza!</span>";
  40.  
  41. ?>


I nie wiem, które wykreślić pola, żeby wysyłało tylko adres e-mail bez nazwiska, imienia i treści.

Czy możecie mi jakoś z tym pomóc? Bardzo proszę, gdyż nie znam się na tym...
Wiktor P.
Cytat(max110 @ 4.10.2009, 01:51:47 ) *
Witam,

Otóż potrzebuję zmienić to:
(...)

Na formularz tylko do podania swojego adresu i po wysłaniu, żeby dany adres e-mail był przesyłany do jakiegoś pliku lub na mój e-mail.
Zupełnie nie wiem jak to zrobić, gdyż się na tym nie znam.


  1. <form action="" method="post" >
  2. <input type="text" name="email" />
  3. <input type="submit" name="register" value="Wyślij" />
  4. </form>


  1. <?php
  2. if ( isset($_POST('email') ) ) # Sprawdzamy, czy istnieje podany w formularzu email (opcja)
  3.  
  4. $email = $_POST['email']; #Pobieramy przesłaną zmienną $email z tablicy superglobalnej $_POST (konieczne).
  5. #Jeśli wysłałbyś w formularzu przez method="get" to musiałbyś pobrać zmienną z $_GET (czyli $email = $_GET['email']; ).
  6.  
  7. #Reszta podobnie jak w skrypcie który znalazłeś, czyli:
  8.  
  9. $message = $email;
  10. $header = "From: <$_POST[email zwrotny]>";
  11.  
  12. mail("adres@domena.pl","Wiadomosc ze strony WWW","$message","$header") or die('Nie udało się wysłać wiadomości');
  13. ?>


Ponieważ w formularzu atrybut action jest ustawiony na ="" więc dane z formularza rafią do tego samego skryptu, z którego zostały wysłane.
Powyższy kod php powinien być w związku z tym w tym samym pliku co formularz.

Kilka uwag:
1. Nie używaj znaku @ np. @mail("adres@domena.pl","..... - linia nr 33) jeśli jesteś początkujący. Przez to nie wywali ci komunikatu o błędzie i nie będziesz wiedział co jest grane.
2. Te style i tabelki - po co one w kodzie, jak mowa o formularzu i mailach a nie o stylach ? Zamęczysz ludzi takimi kodami na forum sciana.gif
max110
Dziękim wielkie za pomoc.
Z tym, że teraz wyskoczył mi taki błąd:
Fatal error: Can't use function return value in write context in ... on line 36

Linia 36:

  1. if ( isset($_POST('email') ) ) # Sprawdzamy, czy istnieje podany w formularzu email (opcja)
Wiktor P.
A sprawdź bez tej linii blinksmiley.gif
ADeM
  1. if ( isset($_POST['email'] ) ) # Sprawdzamy, czy istnieje podany w formularzu email (opcja)

Dodałbym jeszcze sprawdzenie, czy zmienna nie jest pusta.

EDIT:

  1. <?php
  2. if ( isset($_POST['email']) and !empty($_POST['email']) ){ # Sprawdzamy, czy istnieje podany w formularzu email (opcja)
  3.  
  4. $email = $_POST['email']; #Pobieramy przesłaną zmienną $email z tablicy superglobalnej $_POST (konieczne).
  5. #Jeśli wysłałbyś w formularzu przez method="get" to musiałbyś pobrać zmienną z $_GET (czyli $email = $_GET['email']; ).
  6.  
  7. #Reszta podobnie jak w skrypcie który znalazłeś, czyli:
  8.  
  9. $message = 'Wiadomość'; #Treść maila.
  10. $header = "From: [email zwrotny]";
  11.  
  12. mail($email,"Wiadomosc ze strony WWW",$message,$header) or die('Nie udało się wysłać wiadomości');
  13. }
  14. ?>
Wiktor P.
Cytat(ADeM @ 4.10.2009, 15:50:16 ) *
Dodałbym jeszcze sprawdzenie, czy zmienna nie jest pusta.

Ja bym jeszcze dodał walidację danych, próby włamania, sprawdzenie poprawności maila poprzez wyrażenia regularne i kilka innych ale nie o to się rozchodzi - założyciel postu jest raczej początkujący.
  1. $email = $_POST['email'];
  2. $message = $email;
  3. $header = "From: <email zwrotny>";
  4. mail("adres@domena.pl","Wiadomosc ze strony WWW","$message","$header") or die('Nie udało się wysłać wiadomości');
max110
Przyznam szczerze, że nie udało mi się w ten sposób niczego stworzyć, ale i tak wielkie dzięki za pomoc.

Znalazłem coś takiego:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <title>Zaproszenia na Lockerz.com</title>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. </head>
  6. <form action="wysylanie.php" method="post"><p>Wpisz swój adres e-mail: <input class="mail" name="mail" type="text"/><input type="submit" value="Wyślij"/></p></form>
  7. </body>
  8. </html>

plik wysylanie.php
  1. <?php
  2. $headers = 'MIME-Version: 1.0' . "\r\n";
  3. $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
  4. $mail_lockerz = $_POST['mail'];
  5. $to = 'twojmail@host.pl';
  6. $subject = 'mail';
  7. $message = 'Cześć. Mój mail to: ' .$mail_nazwa . '';
  8. if ($mail_nazwa <> '') {
  9. if (mail($to, $subject, $message, $headers)) {
  10. echo "<meta HTTP-EQUIV='REFRESH' content='2; url=index.php'><center><font color='green'><b>Mail wysłany. </b></font><br>Za chwilę zostaniesz przeniesiony na poprzednią stronę...</center>";
  11. }
  12. else {
  13. echo "Mail nie wysłany. Nieznany problem";
  14. }
  15. }
  16. else {
  17. echo "<meta HTTP-EQUIV='REFRESH' content='2; url=index.php'><center><font color='red'><b>Musisz wpisać mail przed wysłaniem!</b></font><br>Za chwilę zostaniesz przeniesiony na poprzednią stronę...</center>";
  18. }
  19. ?>


Działało świetnie, ale niestety od jakichś dwóch godzin już nie dostaję tych wiadomości. Nic nie zmieniałem ani na stronie ani w skrypcie.
Czego może być to wina? Coś z serwerem? e-mail na gmailu

Wyślwietla komunikat, że wysłało, a niestety tej wiadomości nie dostaję. Możliwe jest, że dojdzie za kilka godzin, choć jeszcze dwie godziny temu dochodziły w kilka sekund?
cojack
Sprawdź spam winksmiley.jpg


@eidt
Wszystko się mogło zdarzyć. Jak się logów nie dorwiesz, to możemy gdybać, działa? Działa, nie ruszaj.
max110
Sprawdzałem. Przeniosłem skrypt na inny serwer i teraz działa.
Czy tamten serwer mógł zablokować wysyłanie e-maili?
Wiktor P.
Cytat(max110 @ 4.10.2009, 23:39:47 ) *
Wyślwietla komunikat, że wysłało, a niestety tej wiadomości nie dostaję. Możliwe jest, że dojdzie za kilka godzin, choć jeszcze dwie godziny temu dochodziły w kilka sekund?

Nie raz spotkałem się z takim zachowaniem.
Dlatego nie jest wskazane używanie funkcji mail() tylko osobnej klasy wysyłającej maile jak np. phpMailer
http://phpmailer.worxware.com/

Funkcję mail() raczej powinno się traktować jak programowanie w Turbo Pascalu - do ćwiczeń.
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.