PHP Tutorijal: Kontakt forma

11

PHP Tutorijal: Kontakt forma

offline
  • lnenad  Male
  • Stručni saradnik
    Web
  • Nenad
  • Arhitetak
  • Pridružio: 16 Jan 2007
  • Poruke: 2860
  • Gde živiš: Bijeljina

Sa phpinfo()
Citat:SMTP localhost

Probaj ovo da ispratis http://lifehacker.com/111166/how-to-use-gmail-as-your-smtp-server i reci je li radi.
Detaljnije ovdje http://stackoverflow.com/questions/712392/send-ema.....m-php-page



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 19 Maj 2005
  • Poruke: 5224
  • Gde živiš: Oslo

Da, videla sam i ja to za localhost - mozda su onda potrebni neki drugi user i pass, ali to nemam.

Vidi, meni radi forma (vidi prethodni post) ali mi Rastina zavrsava u spam kanti. Samo mi je jos to preostalo da resim.



offline
  • Peca  Male
  • Glavni Administrator
  • Predrag Damnjanović
  • SysAdmin i programer
  • Pridružio: 17 Apr 2003
  • Poruke: 23211
  • Gde živiš: Niš

to moras resiti preko DNS-a, preko SPF recorda.
sa kog servera saljes email?
koji domen koristis u From: polju?

Poljubac

offline
  • Pridružio: 19 Maj 2005
  • Poruke: 5224
  • Gde živiš: Oslo

Server je jedan mnogo jak norveski provajder, definitivno na beloj listi.
Inace, za from uzima adresu koju korisnik upise. Moze biti bilo sta sto "lici" na email.
Samo da nadjem sta to Rasta ima, sto drugi nemaju... ili obrnuto Wink

offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3747
  • Gde živiš: 127.0.0.1

Tamtitam ::Samo da nadjem sta to Rasta ima, sto drugi nemaju... ili obrnuto Wink

Rasta je pisao ovaj tutorial pre 4 godine, kada je bila aktuelna nesto starija verzija PHPMailera Wink moze biti da je to toga Smile

offline
  • Pridružio: 19 Maj 2005
  • Poruke: 5224
  • Gde živiš: Oslo

^ Uopste nema veze, posto radi smešak Nasla sam neku noviju verziju tog Mailera, i radi ko sat!
Nego, PHPa nije bilo na serveru, pa su to morali da instaliraju.

offline
  • Pridružio: 18 Sep 2010
  • Poruke: 6

Ne znam koliko je ovo aktuelno ali da pitam, od viska glava ne boli ne? Smile

Ja imam naravno free hosting sa domenom iz.rs napravio sam iz ciste potrebe za probanjem, ucenje i tako to. Ne razumem se vise od 1 posto u php Smile Imam 1 kontakt formu koja me je sluzila savrseno na 1 free hostu a to je: 000webhost.com i tamo je radilo sve iako pise da SAMP ili kako se vec zove nema. Ali vazno da je radilo. E sad, napravio sam kod drugog free hosting gde imam vise prostora i mnogo je brzi. Nije me briga za prostor vec sto je brzi i laksi za upravljanje. E sad, tamo nece da mi radi ta php kontakt skriptica, izbacuje gresku naravno. Ali kada sam se registrovao na taj hosting a to je ovaj : host1free.com dobio sam i taj pop i sva ona cuda da mogu koristiti mail. Cak sto vise ubacio sam i domen iz.rs i mogu da pravim mail-ove kako mi ide domain npr. ime@ime.iz.rs i to mi je plus veliki kod tog hosta, dok kod ovog nisam mogao Razz Ali eto problem je sto nece da radi kod njih skriptica ta mala za mail. Da li bi mogao podesavanjima kao sto si dao ovu php skriptu da probam ubaciti tacno njegov host: , moj e-mail i pass? Sta mislis da li bi radilo? Jer kazem opet, ima e-mail, sve lepo radi kada sam poslao sa drugo maila na taj... Samo eto nece ta mala kontakt skriptica da radi Sad

offline
  • Code Developer
  • Pridružio: 23 Okt 2011
  • Poruke: 163

Kod mene uspesno radi skripta, na localhost-u, ali samo kada dodam polje $mail->Port = 465;, tako da kompletna skripta izgleda:

<?php session_start(); //startujemo sesiju function IsValid($mail) {    $et = strpos($mail,"@"); //provera na kojoj se poziciji nalazi znak @    if ($et >= 1) { //ako ima neceg ispred @       $rest = substr($mail,$et + 1,strlen($mail) - $et); //uzimamo ostatak adrese, iza @       $dot = strpos($rest,"."); // trazimo prvo pojavljivanje tacke iza @       if ($dot >= 2) { //ako ima bar 2 slova ispred tacke          $dotrest = strlen(substr($rest,$dot + 1,strlen($rest) - $dot)); //koliko slova ima iza tacke          if ($dotrest >= 2) { //ako ima vise od ili jednako 2             return true; //mail je validan          }          else {             return false; //ima manje od 2, nije validan          }       }       else {          return false; //manje od 2 slova ispred tacke, nije validan       }    }    else {       return false; //nema niceg ispred @, nije validan    } } $value = array("","","",""); $allset = false; //forma nije spremna za slanje $error = ""; //nema gresaka u popunjavanju forme $poslato = false;// forma nije poslata (jos uvek) if (isset($_POST['posalji'])) { //provera da li je forma popunjena    $allset = true; //pretpostavljamo da su svi uneti podaci tacni    for ($i=0;$i<=3;$i++) { //broj 3 oznacava koliko polja imamo       $label = "value" . $i; //pripremamo "ime" polja       if (isset($_POST[$label]) and !empty($_POST[$label])) { //provera da li je polje popunjeno          $value[$i] = $_POST[$label]; //ako jeste, prihvatamo podatke       }       else {          $value[$i] = ""; //ako nije, dodeljujemo "praznu" vrednost promenljivoj       }    }    if (!IsValid($value[1])) { //provera da li je adresa validna       $allset = false; //forma nije spremne za slanje       $error = "Uneta e-mail adresa nije validna."; // objasnjenje greske    }    $obavezna = array("0","1","3"); //brojevi obaveznih polja    $o = count($obavezna) - 1; //brojanje obaveznih polja    for ($i=0;$i<=$o;$i++) {       $op = $obavezna[$i]; //uzimamo broj obaveznog polja       if ($value[$op] == "") { //provera da li je polje prazno          $allset = false; //forma nije spremna za slanje          $error = "Niste popunili sva obavezna polja."; //objasnjenje greske       }    }    if ($allset) { //ako je forma spremna za slanje       if (isset($_SESSION['floodstop'])) { //provera da li je poruka poslata u toku sesije          $slanje = $_SESSION['floodstop']; //"uzimamo" vreme kad je poslata          $sada = time(); //"uzimamo" trenutno vreme          $vreme = $sada - $slanje; //razlika u vremenu       }       else {          $vreme = 300; //ako nije, neka razlika bude 5 minuta       }       if ($vreme >= 300) { //ako poruka nije poslata u zadnjih 5 minuta          require("class.phpmailer.php");          $mail = new PHPMailer();          $mail->IsSMTP();          $mail->Host = "mail.server.com"; //podesavanje servera          $mail->SMTPAuth = true; //server zahteva password          $mail->Username = "username@server.com"; //korisnicko ime          $mail->Port = 465;          $mail->Password = "123456"; //password                          $mail->From = $value[1]; //mail posiljaoca          $mail->FromName = $value[0]; //ime posiljaoca          $mail->AddAddress("kontakt@server.com"); //adresa na koju se salje          $mail->Subject = $value[2]; //subject maila          $mail->Body = stripslashes($value[3]); //tekst poruke          $mail->CharSet = "utf-8"; //"ukljucuje" cirlicna slova, kao i latinicna sa kvacicama                    $mail->WordWrap = 50;          $mail->IsHTML(true);          $mail->AltBody="Ova poruka koristi HTML enkoding, da bi ste je videli morate da ukljucite HTML podrsku u Vasem mail klijentu!";                    if ($mail->Send()) {             $poslato = true; //poruka je poslata             $_SESSION['floodstop'] = time(); //belezimo vreme slanja          }          else {             $error = "Mail nije poslat. Pokusajte ponovo."; //objasnjenje greske          }       }       else { //ako jeste poslata u zadnjih 5 minuta          $error = "Nije moguce poslati poruku u razmaku manjem od 5 minuta."; //objasnjenje greske       }    } } ?> <html> <head> <title>PHP Tutorijal: Kontakt forma</title> </head> <body> <?php if ($poslato) { //ako je poruka poslata ?> Vasa poruka je uspesno poslata. <?php } else { //ako nije poslata, prikazacemo formu if (!empty($error)) { //ako postoji greska    echo "<div>$error</div>"; //prikazacemo je } ?> <form action="kontakt.php" method="post"> Ime i prezime: <input type="text" name="value0" value="<?php echo $value[0]; ?>"><br> E - mail adresa: <input type="text" name="value1" value="<?php echo $value[1]; ?>"><br> Naslov poruke: <input type="text" name="value2" value="<?php echo $value[2]; ?>"><br> Tekst poruke: <textarea name="value3" cols="10" rows="3"><?php echo $value[3]; ?></textarea><br><br> <input type="submit" value="Posalji" name="posalji"> </form> <?php } //kraj prikazivanja forme ?> </body> </html>

offline
  • m4rk0  Male
  • Administrator
  • Administrator tech foruma
  • Marko Vasić
  • Gladijator - Maximus Decimus Meridius
  • Pridružio: 14 Jan 2005
  • Poruke: 15766
  • Gde živiš: Majur (Colosseum)

if (isset($_POST[$label]) and !empty($_POST[$label]))

Zasto moraju da se koriste i isset i !empty kod provere popunjenosti ?

offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4575

Napisano: 23 Okt 2013 18:02

m4rk0 ::if (isset($_POST[$label]) and !empty($_POST[$label]))

Zasto moraju da se koriste i isset i !empty kod provere popunjenosti ?


isset se koristi kada promenljiva nije NULL koliko znam, naprimer, ako je NULL povratiće false, mora biti int, bool itd. zato što NULL zapravo ne predstavlja ništa.

!empty -> isn't empty

Valjda je to to Smile

Dopuna: 23 Okt 2013 18:11

@m4rk0 , pogledaj ovaj primer:

<?php function unisti_nesto() {     global $nesto;     unset($nesto); } $nesto = 'blabla'; unisti_nesto(); if(isset($_POST[$nesto]) { echo $nesto; } else { echo "Greska!"; } ?>

Pošto je odradjena funkcija unisti_nesto prikazaće se poruka

Greska!

jer je tako definisano u petlji Smile

Ko je trenutno na forumu
 

Ukupno su 935 korisnika na forumu :: 8 registrovanih, 2 sakrivenih i 925 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: Areal84, Djole, ladro, laurusri, Milos82, novator, nuke92, shaja1