Witam
Zrobiłam formularz kontaktowy na stronę. Skorzystałam z porad z jakiegoś forum. Wszystko działa. Sprawdza on czy wszystkie dane zostały wpisane. Jeśli nie zostały, to wyświetla komunikat, żeby uzupełnić dane. Jeśli wszystko zostało wypełnione, to wysyła maila.
Pierwsze:
Po wysłaniu maila pojawia się pusta strona, do której mogę ewentualnie za pomocą echo podać napis typu Dziękujemy za wysłanie maila itp.
Ja chciałabym, żeby podziękowanie za wysłanie maila pojawiało się np. zamiast napisu *Pola wymagane. Bądź gdzieś wyżej nad formularzem.
Drugie:
Chciałabym, żeby po wysłaniu maila, gdy już wszystkie dane są sprawdzone oraz po odśwież, czyściło wypełniony formularz. Bo gdy robię odśwież, to wpisane dane zostają. A nie chcę, żeby ktoś złośliwy przysyłał mi 1000 maili dziennie Mam teraz na
onSubmit="return validate.check(this)" Czyli zawsze sprawdza gdy są błędy.
Gdy dodam do tego:
"nazwaformy.submit();nazwaformy.reset();return false;" to wtedy najpierw sprawdzi mi czy dane są wpisane, jeśli nie to wyskoczy komunikat, że nie. Ale gdy na komunikacie z błędem kliknę OK, to i tak wysyła. Nie sprawdza wtedy tych pól czy są wypełnione.
Nie znam się za bardzo na php. Szukałam po różnych forach, ale nie mogę znaleźć.
Mój formularz kontaktowy:
<form action="wyslij.php" method="post" name="formcontact" id="formcontact" onSubmit="return validate.check(this)"> <table width="310"><tr><td colspan="0" align="left" valign="top"><table width="310" > <tr> <td colspan="0" align="left" valign="top"><p style="text-align:left"><span class="style48">* wymagane</span></p></td> </tr> <tr> <td width="80" valign="top" ><label for="Nazwa">Nazwa*</label></td> <td width="230" valign="top" ><input type="text" name="Nazwa" id="Nazwa" maxlength="50" style="width:230px" /></td> </tr> <tr> <td valign="top" ><label for="Email">E-mai*</label></td> <td valign="top" ><input type="text" name="Email" id="Email" maxlength="50" style="width:230px" /></td> </tr> <tr> <td valign="top" ><label for="Temat">Temat</label></td> <td valign="top" ><input type="text" name="Temat" id="Temat" maxlength="50" style="width:230px" /></td> </tr> <tr> <td width="80" valign="top" ><label for="Tresc">Treść*</label></td> <td valign="top" ><textarea style="width:230px;height:120px" name="Tresc" id="Tresc" maxlength="2000"></textarea></td> </tr> <tr> <td height="30" colspan="2" style="text-align:center"><span style="text-align:center"><span style="text-align:center"><span style="text-align:center"> <label><span style="text-align:right"><span style="text-align:right"><span style="text-align:right"><span style="text-align:right"> <input type="reset" name="Reset" id="button" value="WYCZYŚĆ" /> </span></span></span></span></label> <input name="Submit" type="submit" value="WYŚLIJ" /> </span></span></span></td> </tr> </table><p style="text-align:left"> </p> </td> </tr> </table> </form>
<?php $wiadomosc = "Imie: ".$_POST['Nazwa']." e- mail: ".$_POST['Email']." temat: ".$_POST['Temat']." Tresc: ".$_POST['Tresc']." "; $tematyka = "E-mail ze strony NAZWA STRONY ".$temat; http://www.php.net/mail ("mail@wp.pl", $tematyka, $wiadomosc ); ?>
function has_id(id){try{var tmp=document.getElementById(id).value;}catch(e){return false;} return true;} function has_name(nm){try{var tmp=cfrm.nm.type;}catch(e){return false;} return true;} function $$(id){if(!has_id(id)&&!has_name(id)){alert("Pole "+id+" nie jest wypelnione!\n Blad formularza.");return false;} if(has_id(id)){return document.getElementById(id).value;}else{return;}} function $val(id){return document.getElementById(id);} function http://www.php.net/trim(id){$val(id).value=$val(id).value.replace(/^\s+/,'').replace(/\s+$/,'');} var required={field:[],add:function(name,type,mess){this.field[this.field.length]=[n ame,type,mess];},out:function(){return this.field;},clear:function(){this.field=[];}};var validate={check:function(cform){var error_message='Prosimy uzupełnić pola:\n\n';var mess_part='';var to_focus='';var tmp=true;for(var i=0;i<required.field.length;i++){if(this.checkit(required.field[i][0],required.fiel d[i][1],cform)){}else{error_message=error_message+required.field[i][2]+' - pole jest blednie wypelnione.\n';if(has_id(required.field[i][0])&&to_focus.length===0){to_focus=required.field[i][0];} tmp=false;}} if(!tmp){alert(error_message);} if(to_focus.length>0){document.getElementById(to_focus).focus();} return tmp;},checkit:function(cvalue,ctype,cform){if(ctype=="NOT_EMPTY"){if(this.http://www.php.net/trim($$(cvalue)).length<1){return false;}else{return true;}}else if(ctype=="EMAIL"){exp=/^[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;if($$(cvalue).match(exp)==null){return false;}else{return true;}}},http://www.php.net/trim:function(s){if(s.length>0){return s.replace(/^\s+/,'').replace(/\s+$/,'');}else{return s;}}};
<script src="lite_validation.js"></script> <script> required.add('Nazwa','NOT_EMPTY','Nazwa'); required.add('Email','EMAIL','Email'); required.add('Tresc','NOT_EMPTY','Tresc') </script>
ładniej i dogodniej ten kod wyglądał by gdyby był w odpowiednich znacznikach:)
~agapart, proszę dodać BBCode.
Ad. "pierwsze"
To formularz przenosi Cię do innej podstrony (action="wyslij.php") - jeżeli chcesz na niej pozostać musisz zmienić parametr action na np. nazwę strony na której umieściłaś formularz . Pamiętaj, że zawartość pliku wyslij.php musisz w takim układzie przenieść do pliku z formularzem, pamiętając o tym, że plik musi mieć rozszerzenie *php.
Ad. "drugie"
Po wysłaniu zmiennych musisz je "wyczyścić".
Czyli plik nie może się nazywać kontakt.html tylko kontakt.php? Wtedy action będzie action=kontakt.php?
A ten kod z wyślij to gdzie wkleić w tym formularzu?
A te dane to jak wyczyścić po wysłaniu? Jak pisałam w on submit "nazwaformy.submit();nazwaformy.reset();return false;" to wtedy omijalo mi sprawdzanie czy pola sa wypelnione.
Jeżeli plik, w którym obecnie trzymasz np. formularz, nazywa się kontakt.html to aby "zadziałał" umieszczony w nim kod php - plik musi mieć rozszerzenie *php.
Ok. Zmieniłam troszkę kod (znalezione na jakimś forum, troszkę przerobione). Wszystko działa w tym samym pliku kontakt.php. Gdy pola puste to wyświetla napis, że puste. Gdy wszystko ok to wysyła maila. Sprawdza też poprawność maila (nie czy istnieje adres mail, ale czy jest zbudowany z odpowiednich ciągów znaków - tyle wystarczy).
Problem jest natomiast , że po wysłaniu już, gdy jest napis "Twoja wiadomość została wysłana", to przy odświeżaniu strony, znowu wysyła maila. Jeśli ktoś odświeży mi stronę 50 razy, to dostanę 50 maili.
<?php if ((http://www.php.net/empty($_POST['tresc']) or http://www.php.net/empty($_POST['temat']) or http://www.php.net/empty($_POST['email'])) and !http://www.php.net/empty($_POST['submit'])) { http://www.php.net/echo "<table border=\"0\" valign=\"top\"><form method=\"post\"> <tr> <td>Temat:</td> <td><input type=\"text\" name=\"temat\" style=\"width: 230px; background-color:#666666; border-color:#333333\"></td> </tr> <tr> <td>E-mail:</td> <td><input type=\"text\" name=\"email\" style=\"width: 230px; background-color:#666666; border-color:#333333\"></td> </tr> <tr> <td>Nazwisko:</td> <td><input type=\"text\" name=\"nick\" style=\"width: 230px; background-color:#666666; border-color:#333333\"></td> </tr> <tr> <td valign=\"top\">Wiadomość:</td> <td><textarea name=\"tresc\" style=\"width: 230px; height: 120px; background-color:#666666; border-color:#333333\"></textarea></td> </tr> <tr> <td> </td> <td><input type=\"submit\" name=\"submit\" value=\"Wyślij\"> <input type=\"reset\" value=\"Wyczyść\"></td></form> </tr> <tr> <td> </td> <td>"; http://www.php.net/echo "<span style=\"color: #CC99FF; text-align: center\">Wypełnij wszystkie pola formularza!</span>"; http://www.php.net/echo "</td> </tr> </table>"; } elseif (http://www.php.net/empty($_POST['tresc']) or http://www.php.net/empty($_POST['temat']) or http://www.php.net/empty($_POST['email']) and http://www.php.net/empty($_POST['submit'])) { http://www.php.net/echo "<table border=\"0\" valign=\"top\"><form method=\"post\"> <tr> <td>Temat:</td> <td><input type=\"text\" name=\"temat\" style=\"width: 230px; background-color:#666666; border-color:#333333\"></td> </tr> <tr> <td>E-mail:</td> <td><input type=\"text\" name=\"email\" style=\"width: 230px; background-color:#666666; border-color:#333333\"></td> </tr> <tr> <td>Nazwisko:</td> <td><input type=\"text\" name=\"nick\" style=\"width: 230px; background-color:#666666; border-color:#333333\"></td> </tr> <tr> <td valign=\"top\">Wiadomość:</td> <td><textarea name=\"tresc\" style=\"width: 230px; height: 120px; background-color:#666666; border-color:#333333\"></textarea></td> </tr> <tr> <td> </td> <td><input type=\"submit\" name=\"submit\" value=\"Wyślij\"> <input type=\"reset\" value=\"Wyczyść\"></td></form> </tr> </table>"; } # elseif(!http://www.php.net/eregi("^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,4})$", $_POST['email'])) { http://www.php.net/echo "<table border=\"0\" valign=\"top\"><form method=\"post\"> <tr> <td>Temat:</td> <td><input type=\"text\" name=\"temat\" style=\"width: 230px; background-color:#666666; border-color:#333333\"></td> </tr> <tr> <td>E-mail:</td> <td><input type=\"text\" name=\"email\" style=\"width: 230px; background-color:#666666; border-color:#333333\"></td> </tr> <tr> <td>Nazwisko:</td> <td><input type=\"text\" name=\"nick\" style=\"width: 230px; background-color:#666666; border-color:#333333\"></td> </tr> <tr> <td valign=\"top\">Wiadomość:</td> <td><textarea name=\"tresc\" style=\"width: 230px; height: 120px; background-color:#666666; border-color:#333333\"></textarea></td> </tr> <tr> <td> </td> <td><input type=\"submit\" name=\"submit\" value=\"Wyślij\"> <input type=\"reset\" value=\"Wyczyść\"></td></form> </tr> <tr> <td> </td> <td>"; http://www.php.net/echo "<span style=\"color: #CC99FF; text-align: center\">Podałeś zły adres email!</span>"; http://www.php.net/echo "</td> </tr> </table>"; } elseif (!http://www.php.net/empty($_POST['tresc']) && !http://www.php.net/empty($_POST['temat']) && !http://www.php.net/empty($_POST['email'])) { $message = "Temat: ".$_POST['temat']." e- mail: ".$_POST['email']." Nazwisko: ".$_POST['nick']." Tresc: ".$_POST['tresc']." "; $header = "From: $_POST[nick] <$_POST[email]>"; @http://www.php.net/mail("adres@domena.pl","Wiadomosc ze strony WWW","$message","$header") or http://www.php.net/die('Nie udało się wysłać wiadomości'); http://www.php.net/echo "<table border=\"0\" valign=\"top\"><form method=\"post\"> <tr> <td>Temat:</td> <td><input type=\"text\" name=\"temat\" style=\"width: 230px; background-color:#666666; border-color:#333333\"></td> </tr> <tr> <td>E-mail:</td> <td><input type=\"text\" name=\"email\" style=\"width: 230px; background-color:#666666; border-color:#333333\"></td> </tr> <tr> <td>Nazwisko:</td> <td><input type=\"text\" name=\"nick\" style=\"width: 230px; background-color:#666666; border-color:#333333\"></td> </tr> <tr> <td valign=\"top\">Wiadomość:</td> <td><textarea name=\"tresc\" style=\"width: 230px; height: 120px; background-color:#666666; border-color:#333333\"></textarea></td> </tr> <tr> <td> </td> <td><input type=\"submit\" name=\"submit\" value=\"Wyślij\"> <input type=\"reset\" value=\"Wyczyść\"></td></form> </tr> <tr> <td> </td> <td>"; http://www.php.net/echo "<span style=\"color: #CC99FF; text-align: center\">Wiadomość została wysłana poprawnie!</span>"; http://www.php.net/echo "</td> </tr> </table>"; } ?>
Pierwszy (gorszy ale prosty) proponowany przeze mnie sposób:
zmienił bym:
@http://www.php.net/mail("adres@domena.pl","Wiadomosc ze strony WWW","$message","$header") or http://www.php.net/die('Nie udało się wysłać wiadomości');
if(http://www.php.net/mail("adres@domena.pl","Wiadomosc ze strony WWW","$message","$header")) { http://www.php.net/header('location: [adres strony formularza]'); } else { http://www.php.net/print('Nie udało się wysłać wiadomości'); }
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)