Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Formularz kontaktowy - funkcja mail i chyba problemy z przekazywanie zmiennych
Volume
post
Post #1





Grupa: Zarejestrowani
Postów: 283
Pomógł: 11
Dołączył: 11.10.2004
Skąd: 3c

Ostrzeżenie: (0%)
-----


napisalem sobie taki kod:
  1. if(empty($_POST['wyslij']))
  2. {
  3. <form method="post">
  4. <fieldset>
  5. <legend>Formularz kontaktowy</legend>
  6. <label for="nick">Imie Nazwisko (*)</label>
  7. <br />
  8. <input onfocus="this.style.backgroundColor=\'#fff\'" onblur="this.style.backgroundColor=\'#dfdfdf\'" name="nick" type="text" />
  9. <br />
  10. <label for="mail">Mail</label>
  11. <br />
  12. <input onfocus="this.style.backgroundColor=\'#fff\'" onblur="this.style.backgroundColor=\'#dfdfdf\'" name="mail" type="text" />
  13. <br />
  14. <label for="tresc">Treść (*)</label>
  15. <br />
  16. <textarea onfocus="this.style.backgroundColor=\'#fff\'" onblur="this.style.backgroundColor=\'#dfdfdf\'" name="tresc" cols="63" rows="10"></textarea>
  17. <br />
  18. <input id="submit" name="wyslij" type="submit" value=" Wyślij " />
  19. </fieldset>
  20. </form>
  21. <p>Przypisy:</br>* - pola obowiązkowe</p><p>W przypadku braku podania maila prosimy w treści wiadomości podać inną formę kontaktu.</p>
  22. ';
  23. }
  24. else if(!empty($_POST['nick']) && !empty($_POST['tresc']))
  25. {
  26. function EmAil()
  27. {
  28. global $nick;
  29. global $mail;
  30. global $tresc;
  31. $tresc_cal="Widamosc od: ".$nick." (mail - ".$mail.")\n\nTreść:\n".$tresc;
  32. @mail('s1518@tlen.pl','Wiadomość ze strony zooter.pl',$tresc_cal)or die('<p>Nie udalo się wysłać wiadomości.</p>');
  33. echo '<p class="kontakt">Wiadomość wysłano - <a href="index.php?s=kontakt">Powrót do formularza.</a></p>';
  34. }
  35. if(empty($_POST['mail']))
  36. {
  37. echo EmAil();
  38. }
  39. else if(!empty($_POST['mail']) && preg_match('/^([a-z0-9]{1})([^\s\t\.@]*)((\.[^\s\t\.@]+)*)@([a-z0-9]{1})((([a-z0-9-]*[-]{2})|([a-z0-9])*|([a-z0-9-]*[-]{1}[a-z0-9]+))*)((\.[a-z0-9](([a-z0-9-]*[-]{2})|([a-z0-9]*)|([a-z0-9-]*[-]{1}[a-z0-9]+))+)*)\.([a-z0-9]{2,6})([.]?)$/Diu', $_POST['mail']))
  40. {
  41. echo EmAil();
  42. }
  43. else echo '<p class="kontakt"><strong>UWAGA! - adres email musi mieć poprawny format</strong> - <a href="java script:history.back();">Cofaj</a>.</p>';
  44. }
  45. else
  46. {
  47. echo '<p class="kontakt"><strong>UWAGA! - wymagane jest wypełnienie pól z imieniem/nazwiskiem oraz treścią</strong> - <a href="java script:history.back();">Cofaj</a>.</p>';
  48. }
  49.  
  50. ?>
Na jednym serwerze dziala bez problemu - chociaz tez byly problem ale global dla zmiennych pomoglo, natomaist a na drugim serwerze na ktorym formularz ma byc nawet to nie pomoglo... Co jeszcze moze byc nie tak z tymi zmiennymi ze nie chca sie przekazywac. Funkcja mail na tym serwerze dziala bo wysyla bez problemu wszystkie dane jak wpisze bezposrednio bez zmiennych do funkcji mail(...) do tego wszystko co jest poza zmiennymi sie wysyla, wiec problem chyba musi byc w tych zmeinnych....


edit: ok prodzailem sobie - wszystkie zmienne przekazywane dalem w postacie $_POST['']

Ten post edytował Volume 7.11.2009, 20:15:58
Go to the top of the page
+Quote Post
vokiel
post
Post #2





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


A skąd bierzesz te zmienne?
  1. global $nick;
  2. global $mail;
  3. global $tresc;


--------------------
Go to the top of the page
+Quote Post
thek
post
Post #3





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Ludzie sobie niepotrzebnie tak utrudniają... Mail jest użyty tylko raz to po kiego grzyba robisz z tego osobną funkcję? W ten sposób nie musisz się grzebać w żadna srale-globale winksmiley.jpg Tylko walidujesz odpowiednie pola POST i ładujesz we właściwe miejsce w kodzie. Takie wariactwa z pisaniem funkcji, które wykonują się raz to ja też widziałem i przekopać się przez kod tego typu to tragedia. Albo piszesz całość porządnie, albo robisz osobne pliki (jeszcze lepiej po prostu jeden) z używanymi funkcjami i je includujesz w razie potrzeby. Niestety z takimi serwisami miałem do czynienia i nadal mam sad.gif 20 plików srodek(kolejny_numer_począwszy_od_1).php i w każdym na nowo definiowana ta sama funkcja sciana.gif Do tego samego zmierzasz? Takie serwisy robili ludzie nie rozumiejący php jakieś 5 lat temu na tabelkach. Nie idź ich śladem.

Ten post edytował thek 7.11.2009, 22:30:15


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
Volume
post
Post #4





Grupa: Zarejestrowani
Postów: 283
Pomógł: 11
Dołączył: 11.10.2004
Skąd: 3c

Ostrzeżenie: (0%)
-----


Cytat(vokiel @ 7.11.2009, 22:09:22 ) *
A skąd bierzesz te zmienne?
  1. global $nick;
  2. global $mail;
  3. global $tresc;

wartosci parametrow name="..." w formularzu - masz na mysli ze ta zmienna np. $nick nie jest tym samym co $_POST['nick']?

Cytat
Ludzie sobie niepotrzebnie tak utrudniają... Mail jest użyty tylko raz to po kiego grzyba robisz z tego osobną funkcję? W ten sposób nie musisz się grzebać w żadna srale-globale Tylko walidujesz odpowiednie pola POST i ładujesz we właściwe miejsce w kodzie. Takie wariactwa z pisaniem funkcji, które wykonują się raz to ja też widziałem i przekopać się przez kod tego typu to tragedia. Albo piszesz całość porządnie, albo robisz osobne pliki (jeszcze lepiej po prostu jeden) z używanymi funkcjami i je includujesz w razie potrzeby. Niestety z takimi serwisami miałem do czynienia i nadal mam 20 plików srodek(kolejny_numer_począwszy_od_1).php i w każdym na nowo definiowana ta sama funkcja Do tego samego zmierzasz? Takie serwisy robili ludzie nie rozumiejący php jakieś 5 lat temu na tabelkach. Nie idź ich śladem.

Uzywam 2x tej funkcji EmAil(); Wlasnie zrobilem to po to by nie pisac 2x tego samego kodu, najpierw uzywam ta funkcje gdy pole z mailem jest puste a potem drugi raz jak nie jest puste - wtedy dodatkowo jest sprawdzanie czy email ma poprawny format zapisu. Chyba ze masz co innego na mysli, ja nie wpadlem na lepszy pomysl choc zapewne jest inne rozwiazanie ale ciagle poczatkuje w php, nie mam zbyt duzo czasu na jego scisle studiowanie a szczerze powiem ze by mi sie przydalo :/

Ten post edytował Volume 8.11.2009, 13:30:30
Go to the top of the page
+Quote Post
vokiel
post
Post #5





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


Cytat(Volume @ 8.11.2009, 13:25:20 ) *
masz na mysli ze ta zmienna np. $nick nie jest tym samym co $_POST['nick']?

Otóż to, w większości konfiguracji właśnie nie jest, a nawet jeśli masz konfigurację, że jest, to zmień ją na taką żeby nie było

Cytat(Volume @ 8.11.2009, 13:25:20 ) *
Uzywam 2x tej funkcji EmAil();

To na prawdę nie jest bardzo skomplikowana funkcja, żeby wrzucać ją w oddzielną, ale skoro już tak chcesz to zrób to bardziej tak:

  1. function EmAil($nick, $mail, $tresc){
  2. $tresc_cal="Widamosc od: ".$nick." (mail - ".$mail.")\n\nTreść:\n".$tresc;
  3. @mail('s1518@tlen.pl','Wiadomość ze strony zooter.pl',$tresc_cal)or die('<p>Nie udalo się wysłać wiadomości.</p>');
  4. return '<p class="kontakt">Wiadomość wysłano - <a href="index.php?s=kontakt">Powrót do formularza.</a></p>';
  5. }
  6. // użycie:
  7. echo EmAil($_POST['nick'],$_POST['mail'],$_POST['tresc']);


--------------------
Go to the top of the page
+Quote Post
thek
post
Post #6





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Nie rozumiem sensu wysyłania mail gdy ktoś nie podał danych do maila winksmiley.jpg Wtedy przecież do wysyłki maila nie dojdzie. Bo jak wyślesz wiadomość, gdy ktoś ci nie poda adresu mail lub treści? O czymś takim jak walidacja formularza słyszałeś? Sprawdzasz wypełnienie pól. Prawidłowe wszystkie wymagane - wszystko się wykona. Brak czegoś - zwróci błąd i nie wyśle maila. Wtedy się okaże, że maila wysyłasz tylko raz i żadne grupowanie w funkcje nie jest potrzebne.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
Volume
post
Post #7





Grupa: Zarejestrowani
Postów: 283
Pomógł: 11
Dołączył: 11.10.2004
Skąd: 3c

Ostrzeżenie: (0%)
-----


W penym sensie masz racje ale pod formularzem robie zmianke ze w razie braku maila - co sie zdaza - prosze o inna forme kontaktu w tresci widaomosci np. nr telefonu
Go to the top of the page
+Quote Post
thek
post
Post #8





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




W takim razie te informacje idą jeszcze do bazy jak mniemam, do Twojej wiadomości tylko bo jak inaczej chcesz zachować przesłaną treść nie wysyłając jej do nikogo z powodu braku maila kontaktowego? winksmiley.jpg
Ja to zaś widzę jeszcze prościej. Już na starcie informuję użytkownika w jakimś miejscu nad polami formularza:
"Informacje zostaną przesłane na podany mail. W razie jego braku należy umieścić w treści zgłoszenia numer telefonu lub inną, dogodną formę kontaktu" i całość walę do ramki opatrzonej literką i w dymku oraz na niebieskim tle z ciemnoniebieską ramką. Taki dobór sugeruje informację dla użytkownika smile.gif Teraz tylko sprawdzam przy walidacji czy mam podanego maila. Jeśli tak to wysyłam userowi maila. W razie czego mogę jeszcze do siebie ukrytą kopię posłać lub jako log do bazy danych. W razie braku maila kontaktowego log do bazy i info o tej sytuacji na mojego maila. Tyle, że takie maile informujące mnie to zwykły plain/text i nie muszę wariować z tworzeniem funkcji specjalnie bo starczy mail( "admin@domena.pl", "Kontakt bez maila", "W logach kontakt bez maila o czasie: ".date("Y-m-d H:i:s") );
Ewentualnie jakaś wariacja tego. Formatowanie więc jest tylko dla usera i może być wykonane jednokrotnie. A nawet jeśli ma być i do admina posyłane to wal w headerze dodatkowe Kopia ukryta i zapomnij o wszystkim. Nie po to są w standardzie maila dodatkowe pola poza Od i Do by tylko sobie istniały winksmiley.jpg


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
xynt
post
Post #9





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 16.11.2009

Ostrzeżenie: (0%)
-----


Witam,
Mam maly problem wlasnie odnosnie formularza kontaktowego w php i gdy natrafilem na ten post pomyslalem, ze moze ktos mi pomoze.
Moj problem jest nastepujacy: po wypelnieniu wszystkich pol i nacisnieciu "wyslij" jestem przekierowywany na pusta strone, jedynie z napisem "wyslano maila" i zeby wrocic do poprzedniego widoku trzeba dac "wstecz". Chcialbym, zeby ten napis "wyslano maila" pojawial sie na tej samej stronie po nacisnieciu wyslij, a nie przekierowywal do pustej. Moze ewentualnie zeby przekierowywal do nastepnej strony, ale zeby mozna cos bylo tam wstawic oprocz tego komunikatu, np. jakis link do strony glownej itp. Niestety nie znam sie na tym, bo dopiero zaczynam swoja przygode z PHP, kombinowalem jak moglem i nic. Prosze o pomoc.

Ponizej co mam w kodzie:


<?
$mail_odbiorcy = "mojmail@gmail.com";
$email_nadawcy = $_POST['email_nadawcy'];
$temat = $_POST['temat'];
$tresc = $_POST['tresc'];
$akcja= $_POST['akcja'];

if ($akcja == "wyslij")
{
$tresc = wordwrap($tresc, 70);
mail($mail_odbiorcy, $temat, $tresc, $email_nadawcy);
echo "Wyslano maila";
}
else
{
?>
<form action="index.php" method="post">
Informacje zostaną przesłane na podany mail. W razie jego braku należy umieścić w treści zgłoszenia numer telefonu lub inną, dogodną formę kontaktu
E-Mail: <INPUT TYPE="TEXT" NAME="email_nadawcy" size=60>
Temat: <input type="text" name="temat"><br>
Tresc maila:<br>
<TEXTAREA NAME="tresc" rows=10 cols=30></TEXTAREA><br>
<input type="hidden" name="akcja" value="wyslij">
<input type="submit" value="Wyslij"></form>
<?
}
?>




dobra, juz mam jak zrobic zeby na stronie z potwierdzeniem wyslania byl link powrotny. Ale dalej glowie sie, jak zrobic, zeby w ogole nie bylo przekierowywania do nastepnej strony i zeby komunikat "wyslano" pojawial sie bezposrednio na stronie z formularzem. Any ideas? rolleyes.gif
Go to the top of the page
+Quote Post
webriddles
post
Post #10





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 6.12.2009

Ostrzeżenie: (0%)
-----


Witam! Powinieneś zamknąć PHP przed formularzem, wtedy formularz cały czas będzie widoczny i komunikat "wysłano" będzie wyświetlany nad formularzem.

Pozdrawiam.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 16:05