Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Formularz kontaktowy - funkcja mail i chyba problemy z przekazywanie zmiennych
Forum PHP.pl > Forum > PHP
Volume
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['']
vokiel
A skąd bierzesz te zmienne?
  1. global $nick;
  2. global $mail;
  3. global $tresc;
thek
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.
Volume
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 :/
vokiel
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']);
thek
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.
Volume
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
thek
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
xynt
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
webriddles
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.
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.