Pohodový přivýdělek, PHP a MySQL, 350 Kč/hod. z domova. Chceš? Klikni pro více info.
Avatar
Honza
Člen
Avatar
Honza:12. února 21:05

Ahoj všichni,
chci poprosit o radu. Přecházím z ASP na PHP a mám před sebou první challenge potřebuju odeslat data formuláře mailem. Zkoušel jsem funkci mail() i PHPmailer a vždycky to na něčem ztroskotá (mail() například na kódování - přijde rozsypaný čaj a asi neumí posílat html zprávy) Phpmailer píše: Fatal error: Class 'PHPMailer' not found in... přitom tam mám příslušný soubor nahraný.

Poradíte někdo nějaký zaručený skript, který spustím a poběží (tedy odešle zprávu po zadání příslušných parametrů)?

Díky za rady.

 
Odpovědět 12. února 21:05
Avatar
Hando
Člen
Avatar
Odpovídá na Honza
Hando:12. února 21:13

Ahoj.
Mail() vyžaduje dobře nastavené hlavičky odesílané zprávy, mít soubory uložené v utf-8 (nikdo snad nic jiného ani nepoužívá)...
PhpMailer je oproti tomu jednodušší na běžné používání. To, co píšeš, je chyba v samotném scriptu, ne v phpmaileru. Nestačí mít soubor pouze nahraný, ale je potřeba vytvořit instanci dané třídy před použitím. Viz PhpMailer - first time

Editováno 12. února 21:13
 
Nahoru Odpovědět 12. února 21:13
Avatar
Honza
Člen
Avatar
Honza:12. února 21:59

Díky za tip, ale nefungovalo to. Zkusil jsem to podle tutoriálu. Vyhledal jsem na síti soubor PHPMailerAuto­load.php, nahrál ho na web. vytvořil jsem si odesílací script a skončilo to naprosto stejnou chybou, jako předtím.

 
Nahoru Odpovědět 12. února 21:59
Avatar
Odpovídá na Honza
Michal Šmahel:12. února 23:20

Když ti dělá problém předávání závislostí a PHPMaileru nerozumíš, raději zůstaň u funkce mail().

Tato funkce má určité nedostatky, je potřeba dávat pozor na správné složení hlavičky (jak již psal Hando). Problémy s kódováním ti pomůže vyřešit nahrazení za obalovou funkci mb_send_mail(). Pokud si před jejím použitím nastavíš mb_internal_en­coding(), neměl by být problém.

Více o mb_send_mail() nalezneš např. v PHP dokumentaci. Správné nastavení hlavičky se řeší např. na Stack Overflow.

Nahoru Odpovědět  -1 12. února 23:20
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Petr Čech
Redaktor
Avatar
Odpovídá na Michal Šmahel
Petr Čech:12. února 23:53

S tím si dovolím nesouhlasit, to je špatný přístup.
Něco jako umět si přidat autoloader a rozumět tomu, kde se ty třídy berou je napro základní znalost pro kohokoliv, kdo nechce věci prasit v čistém PHP, což je zcela objektivně špatně.

Nahoru Odpovědět  +2 12. února 23:53
Why so serious? -Joker
Avatar
Petr Čech
Redaktor
Avatar
Odpovídá na Honza
Petr Čech:12. února 23:58

Zkus si najít něco na téma autoloading tříd v PHP, to by ti mělo říct, proč ti to nefunguje a budeš vědět, jak to skládat z objektů.
V zásadě jde o to, že PHP je interpretované, takže vyloženě vleze na jeden konkrétní soubor a o zbytku projektu vůbec neví. Proto se musí každá třída vložit pomocí require_once. To je ale otrava psát všude, tak existují autolodery, co na základě většinou namespace umí všechny ty třídy, co používáš najít a vložit samy.
Oproti tomu ASP.NET je kompilované, takže se jasně ví, co se má kde hledat, je jasně dané, kde začíná a končí projekt a pod.

Nahoru Odpovědět 12. února 23:58
Why so serious? -Joker
Avatar
Odpovídá na Petr Čech
Michal Šmahel:13. února 16:37

Omlouvám se, asi to vyznělo špatně. Určitě s tebou plně souhlasím. Každopádně zajisté projekt nedělá objektově (když tohle neví), takže ho potřebuje primárně dokončit.

Dělat to směsicí neobjektového kódu s částmi objektového mi přijde také nic moc. Každopádně oceňuji, že jsi tento (a další) příspěvek napsal, neboť mu zajisté pomůže minimálně v budoucnu.

Určitě preferuji čistý, objektový kód postavený na pevných základech, který je rozvíjen po vzoru zarytých dobrých praktik s přihlédnutím k různým architekturám. Na tuto úroveň se však člověk potřebuje postupně propracovat, málo kdo píše hned takovým stylem.

Editováno 13. února 16:39
Nahoru Odpovědět 13. února 16:37
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Honza
Člen
Avatar
Honza:13. února 16:51

Díky za komentáře. Nakonec jsem opustil myšlenku phpMaileru a našel hotové jednoduché řešení s mb_send_mail(), které posílá v utf-8 a je do cca 10 řádků kódu. Potřeboval jsem posílat mail s přílohou. To jsem prozatím vyřešil uploadem na server a do těla mailu vkládám odkaz. Objektové .NET skutečně nepoužívám, doteď jsem vystačíl s klasickým ASP (formuláře, databáze, e-mail bez příloh). Až bude víc času zkusím se prohrabat třídami v PHP.

 
Nahoru Odpovědět 13. února 16:51
Avatar
Petr Čech
Redaktor
Avatar
Odpovídá na Honza
Petr Čech:13. února 17:11

Pokud jsi nedělal s objektovým ASP.NET, doporučil bych začít se okamžitě učit objektové PHP a MVC/MVP architekturu, jinak získáš hromadu špatných návyků, kterých se těžko zbavíš.

Nahoru Odpovědět 13. února 17:11
Why so serious? -Joker
Avatar
Marian Benčat
Redaktor
Avatar
Odpovídá na Petr Čech
Marian Benčat:13. února 18:02

Přesně tak, třeba začít s operátory pole, to je třeba perfektní OOP přístup, to když se od PHP nauci, tak se špatným návykům vyhne :D

Zajimalo by me jak by se mel v PHP naucit dobrym navykum, kdyz samotny jazyk a hlavně STDLIB je sbírka antipatternu a špatných návrhu

Editováno 13. února 18:04
Nahoru Odpovědět 13. února 18:02
In Smalltalk, everything is an object, In Clojure, everything is a list, In Javascript, everything is fucking mistake
Avatar
Petr Čech
Redaktor
Avatar
Odpovídá na Marian Benčat
Petr Čech:13. února 19:46

Tak bavíme se v rámci PHP samozřejmě :D . A v PHP se dají dělat i hezké věci, jen tě k tomu ten jazyk nedonutí, no. Stdlib je strašlivá, ale tak to ti právě často zabalí framework do něčeho použitelného ;)

Nahoru Odpovědět 13. února 19:46
Why so serious? -Joker
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.