Pomoc s naprogramovanim PHP

Programovacie jazyky, rady, poradňa...
geoge046
Star
Star
Používateľov profilový obrázok
Príspevky: 608
Registrovaný: 10 aug 2005, 14:15
Bydlisko: Prievidza
Kontaktovať používateľa:

Pomoc s naprogramovanim PHP

Príspevok od používateľa geoge046 »

Potreboval by som vytvorit PHP súbor s odoslaním na email, kde na zakladnej strane su k tomu potrebne tieto veci + zda sa mi ze tam este treba nieco pridat (asi METHOD)...

<INPUT size=35 name=meno>
<INPUT size=35 name=priezvisko>
<INPUT size=35 name=firma>
<INPUT size=35 name=ulica>
<INPUT size=35 name=mesto>
<INPUT size=35 name=psc>
<INPUT size=35 name=telefon>
<INPUT size=35 name=fax>
<INPUT size=35 name=email>
<INPUT size=35 name=www>
<INPUT type=checkbox value=ano name=vyhotovenie>
<INPUT type=checkbox value=ano name=aktualizacia>
<TEXTAREA name=poznamka rows=6 cols=52>

----------------------a nakonci--------------------------
<INPUT type=submit value=Odoslať name=odoslat>

Ak mi pomozete, budem velmo rad.... :oops: :P
DAKUJEM
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

formuláre s posielaním na mail tu už boli milionkrát, skús pohľadať.. ak nenájdeš a nikto ma nepredbehne kým prídem domov, tak ti to spravím ale viem určite že to tu je. Ja osobne som to niekoľkokrát písal
jurko.info
Medium Expert
Medium Expert
Príspevky: 108
Registrovaný: 22 nov 2006, 0:16
Kontaktovať používateľa:

Príspevok od používateľa jurko.info »

Predovšetkým si ukonči tag textarea </TEXTAREA>, je párový, a celé to musíš obaliť do <FORM method="POST" action="meno_suboru_ktory_formular_spracuje.php"> ...tvoje...inputy... </FORM>. Kde POST značí spôsob prenášania údajov (mimo url, je to trošku bezpečnejšie ako GET). Pokiaľ formulár spracováva ten istý skript, tak nechaj atribút action prázdny. A teraz spracovanie (azda najjednoduhšie riešenie):


Kód: Vybrať všetko

<?php
$komu = "[email protected]"; // zameň za svoju adresu
$predmet = "automatický email zo stránky niečo.niečo.niečo"; // zameň za čo chceš

$sprava = "Meno: ".$_POST['meno']."\n";
$sprava = $sprava."Priezvisko: ".$_POST['priezvisko']."\n";
$sprava = $sprava."Firma: ".$_POST['firma']."\n";
$sprava = $sprava."Ulica: ".$_POST['ulica']."\n";
$sprava = $sprava."Mesto: ".$_POST['mesto']."\n";
$sprava = $sprava."PSČ: ".$_POST['psc']."\n";
$sprava = $sprava."Telefón: ".$_POST['telefon']."\n";
$sprava = $sprava."Fax: ".$_POST['fax']."\n";
$sprava = $sprava."E-mail: ".$_POST['email']."\n";
$sprava = $sprava."WWW: ".$_POST['www']."\n";
$sprava = $sprava."Vyhotovenie: ".$_POST['vyhotovenie']."\n";
$sprava = $sprava."Aktualizácia: ".$_POST['aktualizacia']."\n";
$sprava = $sprava."Poznámka: ".$_POST['poznamka']."\n";

mail($komu, $predmet, $sprava);
?>
Samozrejme, že si musíš prenášané údaje z formulára trochu ošetriť, napr.

Kód: Vybrať všetko

// odstránenie PHP/HTML tagov (okrem checkboxov), ľudia vedia byť svine
$_POST['poznamka'] = strip_tags($_POST['poznamka']);

// kontrola dĺžky (cez textarea, ale aj tez input ti moženiekto preniesť pekné kB), nespoliehaj na atribút maxlength
$_POST['meno'] = substr($_POST['meno'],0,35);

// kontrola PSČ
is_numeric($_POST['psc']);

// alebo kontrola e-mailu a url cez reg. výraz a tak ďalej, to by bolo na jednu webovú stránku : o )
Ak ti to pomohlo, tak som rád, ale kukni napr na nejaké špecializované stránky, sú tam kompletné riešenia. Napr. Linuxsoft, Jak na web, Hotscripts ...
carnaby
Amateur
Amateur
Príspevky: 24
Registrovaný: 23 aug 2005, 20:32
Bydlisko: Martin

Príspevok od používateľa carnaby »

tiez jedno univerzalne riesenie som tu uz pisal. tu sa nemusis trapit ako sa volaju polia a kazdy form sa cely odosle na mail. Pochopitelne tu sa uz horsie da spravit kontrola ako pisal jurko.info . no keby si chcel tak aj to tam doplnim na ukazku :)

Kód: Vybrať všetko

<html>
   <head>
      <title>Store form to file</title>
   </head>
   <body>
      <form action="?" method="post">
         <div><label for="meno">Meno</label><input id="meno" type="text" name="Meno" value="" /></div>
         <div><label for="adresa">Adresa</label><input id="adresa" type="text" name="Adresa" value="" /></div>
         <div><label for="psc">PSC</label><input id="psc" type="text" name="PSC" value="" /></div>
         <div><label for="ano">Ano</label><input id="ano" type="radio" name="AnoNie" value="Ano" /></div>
         <div><label for="nie">Nie</label><input id="nie" type="radio" name="AnoNie" value="Nie" /></div>
         <div><input type="submit" name="Submit" value="Odosli" /></div>
      </form>
   </body>
</html>
<?php
function sendMail()
{
   if (empty($_POST["Submit"]))
      return;
      
   unset($_POST["Submit"]);
   $out="";
   foreach($_POST as $param=>$value)
      $out.="$param : $value\n";
      
   $komu = "[email protected]"; // zameň za svoju adresu
   $predmet = "automatický email zo stránky niečo.niečo.niečo"; // zameň za čo chceš

   mail($komu, $predmet, $out); 
}
sendMail();
?>
jurko.info
Medium Expert
Medium Expert
Príspevky: 108
Registrovaný: 22 nov 2006, 0:16
Kontaktovať používateľa:

Príspevok od používateľa jurko.info »

Carnabyho riešenie je elegantné (a pre spracovanie siahodlhých formulárov efektívnejšie) a ak si nesedím na kábli, tak kontroly premenných by sa dali pridať do uživateľskej funkcie sendMail(); asi takýmto spôsobom (ak sa mýlim, zglbte ma):

Kód: Vybrať všetko

// napr. pre odstránenie tagov
foreach($_POST as $param=>$value)
$out .= $param.": ".strip_tags($value)."\n"; 
geoge046
Star
Star
Používateľov profilový obrázok
Príspevky: 608
Registrovaný: 10 aug 2005, 14:15
Bydlisko: Prievidza
Kontaktovať používateľa:

Príspevok od používateľa geoge046 »

No a očúvajte, keby som chcel potom napísať, po odoslaní mailu, že či bola správa odoslaná alebo neodoslaná???? A ešte kde mám vložiť tie príkazi na to PSC aby tam boli len cisla alebo aj na TELEFON. Alebo aby kontrolovalo ze ci je v maili zadaný zavináč s .sk alebo podobne, alebo na kontrolu www ze ci je tam koncovka .sk alebo podobne.... Ja viem ze otravujem ale co uz.... Diki :oops: :oops: :oops:

// A este, nepoznate nejaký slovenský web hosting aj s velmi malou kapacitou ale aby mal podporu PHP??? Dik //
jurko.info
Medium Expert
Medium Expert
Príspevky: 108
Registrovaný: 22 nov 2006, 0:16
Kontaktovať používateľa:

Príspevok od používateľa jurko.info »

Takže, George046, s poslaním potvrdzujúceho e-mailu máš dve možnosti (pokiaľ viem).

1. Na serveri, ktorý ti prevádzkuje e-mailovú schránku, máš určite nejakú sekciu Nastavenia alebo Filtre a v nich býva poväčšinou i služba automatická odpoveď podľa určitých kritérií. Poobzeraj sa tam trochu a určite niečo nájdeš.

2. Druhá možnosť mi príde trochu lepšia a to je vlastne odoslanie dvoch e-mailov z jedného PHP skriptu. Jeden, ako je uvedené vyššie, a druhý odošleš na e-mailovú adresu, ktorú návštevník zadal do formulára a ten bude obsahovať potvrdenie.

Kód: Vybrať všetko

<?php
mail($_POST["email"], "POTVRDENIE PRIJATIA OBJEDNÁVKY", "Vaš e-mail bol doručený a bla bla bla ..."); 
?>
Asi by bolo najlepšie si ešte pred odoslaním potvrdzujúceho emailu overiť, či bol vôbec odoslaný ten prvý a to cez podmienku (uff, tá moja pamäť):

Kód: Vybrať všetko

<?php
  if(!sendMail()){
     echo "Ty wogo, nejaká chybyčka sa vlúdila : o ).";
  }
 else{
     // sem príde skript odosielania potvrdzujúceho e-mailu
  }
?>
Pre kontrolu neznámych url a e-mailových adries je (podľa mňa) najlepšia funkcia eregi("regulérny výraz", "kontrolovaný reťazec"); napr. v podmienke if pričom ja reg. v. používam tieto (inak reg. v. dosť zaťažujú parser):

Kód: Vybrať všetko

// pre e-mail
[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}

// pre url (má to byť v jednom riadku)
^((([hH][tT][tT][pP][sS]?|[fF][tT][pP])\:\/\/)?
([\w\.\-]+(\:[\w\.\&%\$\-]+)*@)?((([^\s\(\)\<\>\\\"\.\[\]\,@;:]+)
(\.[^\s\(\)\<\>\\\"\.\[\]\,@;:]+)*(\.[a-zA-Z]{2,4}))|
((([01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}([01]?\d{1,2}|2
[0-4]\d|25[0-5])))(\b\:(6553[0-5]|655[0-2]\d|65[0-4]
\d{2}|6[0-4]\d{3}|[1-5]\d{4}|[1-9]\d{0,3}|0)\b)?
((\/[^\/][\w\.\,\?\'\\\/\+&%\$#\=~_\-@]*)*[^\.\,\?\"\'\(\)\[\]!;
<>{}\s\x7F-\xFF])?)$

// pre PSČ
\d{3} ?\d{2} // verzia s medzerou -> 985 01
\d{5} // verzia bez medzery -> 98501
A kecám a kecám a kecám ... radšej si pozri toto:
http://www.linuxsoft.cz/article.php?id_article=444[/code]
Napísať odpoveď