supernal Posted March 13, 2011 Report Share Posted March 13, 2011 Labdien! Atvainojos, ka lieku pie html sadaļas (lai gan ar to arī ir saistība), bet pie php sadaļas es nevaru ievietot rakstu. Tātad runa iet par kontaktformu. Pašreizējā forma strādā tīri labi, bet vēlētos viņu tā teikt optimizēt, bet ar manām php zināšanām ir par īsu, lai gan esmu izbūries caur daudzām pamācībām, tomēr neiet no rokas tā kodu savienošana, tāpēc lūdzu jūsu palīdzību, un jau iepriekš saku paldies par to! Principā ir divas lietas, kuras vēlos uzlabot: 1) Vēlētos, lai pēc forma nosūtīšanas (nospiežot submit), netiktu aiziets uz jaunu lapu, bet paliktu tajā pašā, varētu lapa tikai refrešoties, bet bez refresh būtu vēl skaistāk. Zinu, ka jāmaina laikam kaut kas pie action, bet gribu, lai php kods tomēr ir atsevišķā failā... 2) Kļūdu izvadīšana. Pašlaik to esmu atrisinājis ar javascript, jo nemācēju pievienot nosacījumus iekš php. Un labāk būtu, ja neizmestu error lodziņu ar tekstu, bet virs formas izvadītu attiecīgu paziņojumu, cik saprotu to varētu izdarīt šādi (html`ā virs formas ieliekot php rindiņas): <?php if(!empty($error)) echo '<div class="error">'.$error.'</div>'; ?> <?php if(!empty($accept)) echo '<div class="accept">'.$accept.'</div>'; ?> php failā tikai jādefinē tas errors un accept`s. Labāk jau būtu, ja erroru izvadītu zem katra lauka, ja tas ir tukšs vai neatbilst kritērijam. Tikai, arī, ko es pat tajā javascript kodā nemācēju noteikt, to, ka formu nesūta netikai tad kad ir tukši lauki, bet arī tad, ja nav valīds e-pasts, nesatur atļautos vai satur neatļautos simbolus (. @ / utt.) Lūk send_contact.php <META HTTP-EQUIV="refresh" CONTENT="5;url_atpakal"> <?php // Contact subject $subject ="$subject"; // text $message="$detail"; // email $mail_from="$email"; // From $header="from:$name <$mail_from>"; // recievers email $to ='mans_epasts'; $send_contact=mail($to,$subject,$message,$header); // Check, if message sent to your email // display message "Vestule nosutita...." if($send_contact){ echo "Vestule nosutita, jus atgriezisieties atpakal pec 5 sekundem. Paldies!"; } else { echo "ERROR"; } ?> Un contact.html: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>forma</title> <script type="text/javascript"> function validate_required(field,alerttxt) { with (field) { if (value==null||value=="") { alert(alerttxt);return false; } else { return true; } } } function validate_form(thisform) { with (thisform) { if (validate_required(name,"You must fill in all fields!")==false) {name.focus();return false;} } with (thisform) { if (validate_required(email,"You must fill in all fields")==false) {email.focus();return false;} } with (thisform) { if (validate_required(web,"You must fill in all fields")==false) {web.focus();return false;} } with (thisform) { if (validate_required(detail,"You must fill in all fields")==false) {detail.focus();return false;} } } </script> <style type="text/css"> input, textarea { padding: 9px; border: solid 1px #E5E5E5; outline: 0; font: normal 13px/100% Verdana, Tahoma, sans-serif; width: 200px; background: -webkit-gradient(linear, left top, left 25, from(#FFFFFF), color-stop(4%, #EEEEEE), to(#FFFFFF)); background: -moz-linear-gradient(top, #FFFFFF, #EEEEEE 1px, #FFFFFF 25px); } textarea { width: 400px; max-width: 400px; height: 150px; line-height: 150%; } input:hover, textarea:hover, input:focus, textarea:focus { border-color: #C9C9C9; -webkit-box-shadow: rgba(0, 0, 0, 0.15) 0px 0px 8px; } .form label { margin-left: 10px; color: #999999; } .submit input { width: auto; padding: 9px 15px; background: black; border: 0; font-size: 12px; color: white; } .form{ margin-left:170px; padding-top:30px; padding-bottom:100px; } .name{ padding-bottom:5px; } .web{ padding-bottom:5px; } .email{ padding-bottom:5px; } .text{ padding-bottom:5px; } </style> </head> <body> <div id="wrap"> <form class="form" name="form1" method="post" onsubmit="return validate_form(this);" action="send_contact.php"> <p class="name"> <input type="text" name="name" id="name" /> <label for="name">Name</label> </p> <p class="email"> <input type="text" name="email" id="email" /> <label for="email">E-mail</label> </p> <p class="web"> <input type="text" name="subject" id="subject" /> <label for="subject">Subject</label> </p> <p class="text"> <textarea name="detail" id="detail" type="text" ></textarea> </p> <p class="submit"> <input type="submit" value="Send" /> </p> </form> </div> </body> </html> Quote Link to comment Share on other sites More sharing options...
krisis32 Posted March 13, 2011 Report Share Posted March 13, 2011 Šajā (send_contact.php) failā pamēģini pievienot <script type="text/javascript"> window.location.replace("links-uz-kuru-aizvedis-atverot-send_contact"); </script> Quote Link to comment Share on other sites More sharing options...
m8t Posted March 13, 2011 Report Share Posted March 13, 2011 (edited) 1. Ar refresh: <?php require("fails_kurs_ieceko_vai_ir_dati nosutiti_un_ja_ir_tad_kaut_ko_izdara_ar_viniem.php"); ?> <form action="" method="post"> ... </form> Bez refresh: AJAX 2. Neredzu kļūdu tavā kodā un nesapratu jautājumu. 3.(?) Epastu vari validēt šādi: function is_valid_email($email) { $result = TRUE; if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$", $email)) { $result = FALSE; } return $result; } echo is_valid_email('huaha@brr').'<br />'; echo is_valid_email('huahabrr').'<br />'; echo is_valid_email('huahabrr.lv').'<br />'; echo is_valid_email('huaha@brr.lv').'<br />'; if(is_valid_email('huaha@brr.lv')) { echo 'I <3 NY - True'; } else { echo 'I H8 NY - False'; } Edited March 13, 2011 by m8t Quote Link to comment Share on other sites More sharing options...
daGrevis Posted March 13, 2011 Report Share Posted March 13, 2011 Pārvietoju uz pareizo sadalju. Quote Link to comment Share on other sites More sharing options...
supernal Posted March 13, 2011 Author Report Share Posted March 13, 2011 (edited) Atbildot uz m8t komentāru... Nu pašlaik ir tā, ka, ja logs nav aizpildīts, spiežot submit uz ekrāna izlec logs (tāds kā error logs, kā piemērs), kurā rakstīts: "Aizpildiet visus laukus" Tā vietā es gribētu, lai virs pašas kontakt formas vai zem attiecīgā lauka (name, e-mail, subject vai text) izvada rindiņu ar tekstu: "Lūdzu aizpildiet lauku" P.S. Un kur tieši likt man to e-mail validāciju? php failā kkur? Tieši tas man sagādā tās problēmas, ka arī nezinu kurā vietā to visu iestarpināt... Edited March 13, 2011 by supernal Quote Link to comment Share on other sites More sharing options...
m8t Posted March 13, 2011 Report Share Posted March 13, 2011 @supernal Iekš send_contact.php zem <?php Ieliec function is_valid_email($email) { $result = TRUE; if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$", $email)) { $result = FALSE; } return $result; } if(!is_valid_email($email)) { echo 'Šis nav valīds epasts. Ej atpakaļ un mēģini vēlreiz...'; } Or, ja turpmāk neizmantosi to funkciju un tas tev bija vajadzīgs tikai tajā konkrētajā vietā un viss - vari optimizēt uz... if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$",$email)) { echo 'Šis nav valīds epasts. Ej atpakaļ un mēģini vēlreiz...'; } Par tiem lodziņiem... Ar JQuery ir ļoti vienkārši labot konkrētas kastes saturu. Viss ko tev vajag ir to tekstu, kas tev pašlaik iznāk kā alert iemest kādas kastes saturā un viss. Tur gan es tev nepalīdzēšu. Cīnies pats, vairāk apgūsi ;) Vairāk: http://api.jquery.com/html/ Quote Link to comment Share on other sites More sharing options...
daGrevis Posted March 13, 2011 Report Share Posted March 13, 2011 Nekādu eregi! preg_match()! =P Quote Link to comment Share on other sites More sharing options...
wintermute Posted March 13, 2011 Report Share Posted March 13, 2011 Nekādi preg_* .. ehh filter_var('bob@example.com', FILTER_VALIDATE_EMAIL) http://lv.php.net/manual/en/function.filter-var.php Quote Link to comment Share on other sites More sharing options...
daGrevis Posted March 13, 2011 Report Share Posted March 13, 2011 Ahāā.. filter_var() izteiksmēm... *facepalm* filter_var() derēs tikai dažām lietām. Es saku, ka eregi() ir novecojis un "deprecated", tāpēc izteiksmēm ir jāizmanto preg_match()! Hello, world! =/ Quote Link to comment Share on other sites More sharing options...
supernal Posted March 13, 2011 Author Report Share Posted March 13, 2011 e-pasta validācija darbojas, bet.. Joprojam parmet uz jaunu lapu un ja pat ievada validu e-pastu, tālāk netiek nosūtīts e-pasts... Un varbūt līdzīgā veidā kā valīdē e-pastu, varētu turpat validēt, lai pārējie lauki vnk nav tukši? Lai nebūtu tas javascript jāizmanto... Labotais kods: <?php function is_valid_email($email) { $result = TRUE; if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$", $email)) { $result = FALSE; } return $result; } if(!is_valid_email($email)) { echo 'Šis nav valīds epasts. Ej atpakaļ un mēģini vēlreiz...'; } // Contact subject $subject ="$subject"; // text $message="$detail"; // email $mail_from="$email"; // From $header="from:$name <$mail_from>"; // recievers email $to ='epasts'; $send_contact=mail($to,$subject,$message,$header); // Check, if message sent to your email // display message "Vestule nosutita...." if($send_contact){ echo "Vestule nosutita, jus atgriezisieties atpakal pec 5 sekundem. Paldies!"; } else { echo "ERROR"; } Html: <body> <div id="wrap"> <?php require("send_contact.php"); ?> <form class="form" name="form1" method="post" onsubmit="return validate_form(this);" action="send_contact.php"> <p class="name"> <input type="text" name="name" id="name" /> <label for="name">Name</label> </p> <p class="email"> <input type="text" name="email" id="email" /> <label for="email">E-mail</label> </p> <p class="web"> <input type="text" name="subject" id="subject" /> <label for="subject">Subject</label> </p> <p class="text"> <textarea name="detail" id="detail" type="text" ></textarea> </p> <p class="submit"> <input type="submit" value="Send" /> </p> </form> </div> </body> </html> Ja no action izņem send_contact.php tad lapa tikai uztaisa refresh un nekadu paziņojumu neizvada :( Quote Link to comment Share on other sites More sharing options...
m8t Posted March 13, 2011 Report Share Posted March 13, 2011 [..] tālāk netiek nosūtīts e-pasts... Sūti e-pastu ar SMTP tad. Pa-google'ē to. Ja no action izņem send_contact.php tad lapa tikai uztaisa refresh un nekadu paziņojumu neizvada :( Pārlasi vēlreiz #2 1. punktu. Tajā koda gabalā ir arī kaut kas cits, ko tu aizmirsi... [..] varētu turpat validēt, lai pārējie lauki vnk nav tukši [..] Izmanto funkciju empty(). T.i. - if(!empty($_POST['name']) && !empty($_POST['email']) && !empty($_POST['etcetc'])) { //tavs kods te, kur tu suti to epastu } ps. - pievieno šo (sk. zemāk) zem tā php čekinga. Iespējams, ka tādēļ nevarēji nosūtīt to epastu. $name = $_POST['name']; $email = $_POST['email']; $email = $_POST['subject']; $email = $_POST['detail']; Quote Link to comment Share on other sites More sharing options...
foxsk8 Posted March 13, 2011 Report Share Posted March 13, 2011 (edited) Tiko pamanīju, DG uzkundzējies par "sētnieku", apsveicami. :) Paldies. xD /daGrevis/ Edited March 13, 2011 by daGrevis Quote Link to comment Share on other sites More sharing options...
supernal Posted March 13, 2011 Author Report Share Posted March 13, 2011 Pārlasi vēlreiz #2 1. punktu. Tajā koda gabalā ir arī kaut kas cits, ko tu aizmirsi... Pārlasīju, neatradu, ko esmu aizmirsis?? Ja no action="send_contact.php" izņem send_contact.php tad viss, ko lapa izdara pēc nosūtīšanas - refrešojas... send_contact.php tagad izskatās tā: <?php function is_valid_email($email) { $result = TRUE; if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$", $email)) { $result = FALSE; } return $result; } if(!is_valid_email($email)) { echo 'Ðis nav valîds epasts. Ej atpakaï un mçìini vçlreiz...'; } if(!empty($_POST['name']) && !empty($_POST['email']) && !empty($_POST['subject'])) { $send_contact=mail($to,$subject,$message,$header); } $name = $_POST['name']; $email = $_POST['email']; $email = $_POST['subject']; $email = $_POST['detail']; // Contact subject $subject ="$subject"; // text $message="$detail"; // email $mail_from="$email"; // From $header="from:$name <$mail_from>"; // recievers email $to ='MANS_E-PASTS'; $send_contact=mail($to,$subject,$message,$header); // Check, if message sent to your email // display message "Vestule nosutita...." if($send_contact){ echo "Vestule nosutita, jus atgriezisieties atpakal pec 5 sekundem. Paldies!"; } else { echo "ERROR"; } ?> Izņēmu arī no html to javascript, kas iepriekš pārbaudija tukšos laukus, un tagad formu sūtu vienalga kādu, tukšu vai pilnu... Ja nav valīds e-pasts, tad izvada paziņojumu, ka e-pasts nav valīds, bet tik un tā to nosūta. Ar tukšajiem laukiem arī nekas nenotika, tur trūkst izvades teksts un lai nesūta ja lauki ir tukši. No tagadeja koda sanāk, ka ja lauki ir tukši, lai sūta... Iet kā pa akmeņiem ar to php. :( Quote Link to comment Share on other sites More sharing options...
m8t Posted March 13, 2011 Report Share Posted March 13, 2011 Pārlasīju, neatradu Labi, vēlreiz rādu visu kodu un mazliet izcelšu to, kas tev bija jāpamana... [size="7"]<?php require("fails_kurs_ieceko_vai_ir_dati nosutiti_un_ja_ir_tad_kaut_ko_izdara_ar_viniem.php"); ?>[/size] <form action="" method="post"> ... </form> tagad formu sūtu vienalga kādu, tukšu vai pilnu Man šķiet, ka es tev teicu, ka tajā čekingā ir jāietver viss tavs kods... Tavā gadījumā, kaut vai, sāc čekingu uzreiz pēc "<?php" un noslēdz tieši pirms "?>" Ja nav valīds e-pasts, tad izvada paziņojumu, ka e-pasts nav valīds, bet tik un tā to nosūta. Mana kļūda, liku tev izmantot echo, vajadzēja ar die(). T.i. - die('tavs teksts'); Ar tukšajiem laukiem arī nekas nenotika, tur trūkst izvades teksts un lai nesūta ja lauki ir tukši. No tagadeja koda sanāk, ka ja lauki ir tukši, lai sūta... Mana vecmāte cep pankūkas un koka galotnē zaķis lec pa kūti. Galīgi nesapratu, ko tu gribi man ar to pateikt. Quote Link to comment Share on other sites More sharing options...
supernal Posted March 13, 2011 Author Report Share Posted March 13, 2011 (edited) Mana vecmāte cep pankūkas un koka galotnē zaķis lec pa kūti. Galīgi nesapratu, ko tu gribi man ar to pateikt. Vēlējos pateikt to, ka ja tie lauki ir tukši, e-pastu tāpat nosūta, lai gan ieliku to kodu: if(!empty($_POST['name']) && !empty($_POST['email']) && !empty($_POST['subject'])) { $send_contact=mail($to,$subject,$message,$header); } Runājot par: [size="7"]<?php require("fails_kurs_ieceko_vai_ir_dati nosutiti_un_ja_ir_tad_kaut_ko_izdara_ar_viniem.php"); ?>[/size] Sanāk ka tas fails, kurš tur jāliek nav send_contact.php? Ja tā, tad esmu galīgi sajucis. Tagad izlaboju send_contact.php un viss ok, e-pastu pārbauda un ja nav valīds tad nesūta un izvada paziņojumu. <?php function is_valid_email($email) { $result = TRUE; if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$", $email)) { $result = FALSE; } return $result; } if(!is_valid_email($email)) { die('Ðis nav valîds epasts. Ej atpakaï un mçìini vçlreiz...'); } if(!empty($_POST['name']) && !empty($_POST['email']) && !empty($_POST['subject']) && !empty($_POST['detail'])) { $send_contact=mail($to,$subject,$message,$header); } $name = $_POST['name']; $email = $_POST['email']; $subject = $_POST['subject']; $message = $_POST['detail']; // Contact subject $subject ="$subject"; // text $message="$detail"; // email $mail_from="$email"; // From $header="from:$name <$mail_from>"; // recievers email $to ='mans_pasts'; $send_contact=mail($to,$subject,$message,$header); // Check, if message sent to your email // display message "Vestule nosutita...." if($send_contact){ echo "Vestule nosutita, jus atgriezisieties atpakal pec 5 sekundem. Paldies!"; } else { echo "ERROR"; } ?> Palicis tas, lai pārbauda tukšos laukus un tālāk nesūta, ja ir tukši. Un vēl par to, lai nosūtot e-pastu naizmet uz jaunu lapu, bet izvada paziņojumus tajā pašā lapā... Edited March 13, 2011 by supernal Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.