Diskuze: chyby v emailu při odesílání v php

PHP PHP chyby v emailu při odesílání v php American English version English version

Avatar
Patrik Neumann:

ahoj, chci udělat, aby php ukazovalo chybu podle toho, co zapomněli napsat.
php vypadá takto (zatím):

$predmet = $_POST['predmet'];
$email = $_POST['email'];
$spam = $_POST['spam'];
$zprava = $_POST['zprava'];

if ($predmet!="" and $email!="" and $zprava!="" and $spam=="2")
{
Mail("vase@adresa.com", $predmet, $zprava, "From: " . $email);
echo "<p><strong>Váš e-mail byl úspěšně odeslán</strong>.</p>";
}
else
{
echo "<p>Váš e-mail se <strong>nepodařilo odeslat</strong> pravděpodobně jste nevyplnili všechny údaje, nebo nevíte kolik je 1 + 1.</p>";
}

a formulář:

<form action="posli.php" method="post">
<input name="email" size="25" value="Váš@mail">*(abych mohl odpovědět, nebude zveřejněn)<br>
<input name="predmet" size="25" value="Předmět">*(prosím vyplňte, o čem je zpráva)<br>
<strong>co je teď za rok v česku?</strong><input name="spam" size="25">*(ochrana před spamboty)<br>
<textarea name="zprava" rows="6" cols="55" placeholder="Zpráva"></textarea>*(text zprávy)<br>
<input type="submit" value="Odeslat">
</form>

Předem děkuji, jinak z PHP moc neumím, proto se ptám tady.

Odpovědět 21.3.2015 22:31
Nic není nemožné, proto se snažím dál.
Avatar
tomasmanhal
Člen
Avatar
Odpovídá na Patrik Neumann
tomasmanhal:
<?php

    mb_internal_encoding("UTF-8");

    $hlaska = '';
    if ($_POST)
    {
        if (isset($_POST['jmeno']) && $_POST['jmeno'] &&
      isset($_POST['email']) && $_POST['email'] &&
      isset($_POST['zprava']) && $_POST['zprava'] &&
      isset($_POST['rok']) && $_POST['rok'] == date('Y'))
        {
            $hlavicka = 'From:' . $_POST['email'];
            $hlavicka .= "\nMIME-Version: 1.0\n";
            $hlavicka .= "Content-Type: text/html; charset=\"utf-8\"\n";
            $adresa = 'email@domena.cz';
            $predmet = 'Nová zpráva z Vašich stránek!';
            $uspech = mb_send_mail($adresa, $predmet, $_POST['zprava'], $hlavicka);
            if ($uspech)
            {
                $hlaska = 'Email byl úspěšně odeslán, brzy vám odpovíme.';
            }
            else
                $hlaska = 'Email se nepodařilo odeslat. Zkontrolujte adresu.';
        }
        else
            $hlaska = 'Formulář není správně vyplněný!';
    }

?>

A samotnou hlášku nad formulářem mám takhle

<?php
      if ($hlaska)
      echo( "<p>". $hlaska ."</p>" );
      ?>
Editováno 21.3.2015 22:37
Nahoru Odpovědět  +1 21.3.2015 22:36
Kdyby nám dodali k životu zdrojový kód, vše by bylo jednodušší...
Avatar
Patrik Neumann:

vyřešeno, PHP kód:

$predmet = $_POST['predmet'];
$email = $_POST['email'];
$spam = $_POST['spam'];
$zprava = $_POST['zprava'];

if ($predmet!="" and $email!="" and $zprava!="" and $spam=="2015")
{
Mail("patrik.neu@centrum.cz", $predmet, $zprava, "From: " . $email);
echo "<p><strong>Váš e-mail byl úspěšně odeslán</strong>.</p>";
}
elseif ($predmet="null" and $email!="" and $zprava!="" and $spam=="2015")
{
echo "<p>chybí předmět, omlouvám se</p>";
}
elseif  ($email="null" and $predmet!="" and $zprava!="" and $spam=="2015")
{
echo "<p>Chybí email, nemám jak odpovědet, omlouvám se</p>";
}
elseif ($zprava="null" and $email!="" and $predmet!="" and $spam=="2015")
{
echo "<p>Omlouvám se, chybí zpráva, to k ničemu nevede</p>";
}
elseif ($zprava!="" and $email!="" and $predmet!="" and $spam="null")
{
echo "<p>Omlouvám se, chybí datum, můžete být spambot</p>";
}
Nahoru Odpovědět 21.3.2015 22:48
Nic není nemožné, proto se snažím dál.
Avatar
Nahoru Odpovědět  -3 21.3.2015 22:48
Nic není nemožné, proto se snažím dál.
Avatar
tomasmanhal
Člen
Avatar
Nahoru Odpovědět  +1 21.3.2015 22:49
Kdyby nám dodali k životu zdrojový kód, vše by bylo jednodušší...
Avatar
Odpovídá na tomasmanhal
Patrik Neumann:

se koukni, mám to tu vložené

Nahoru Odpovědět  -3 21.3.2015 22:51
Nic není nemožné, proto se snažím dál.
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Odpovídá na Patrik Neumann
Matúš Petrofčík:

fujky! :D to že ti vypíše hlášku o úspešnom odoslaní neznamená že sa fakt email podarilo odoslať

//edit: tomáš to má omnoho lepšie ;)

//edit2: i keď ja by som to urobil ešte inak :D

Editováno 21.3.2015 22:55
Nahoru Odpovědět  +1 21.3.2015 22:52
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Odpovídá na Matúš Petrofčík
Patrik Neumann:

ano, ověř si to zde: http://patrik-myweb.euweb.cz/mail.html
vždy něco vynech, zatím to nahlásí pouze na jedno vynechané

Nahoru Odpovědět  -1 21.3.2015 22:54
Nic není nemožné, proto se snažím dál.
Avatar
BlugW
Redaktor
Avatar
Odpovídá na Patrik Neumann
BlugW:

Kdybys měl, to bych se v tom asi nezamotal, fuf... :D

A co když je problém na straně email serveru a ne uživatele?

Editováno 21.3.2015 22:56
Nahoru Odpovědět  +1 21.3.2015 22:54
Pořiď si mac na www.appletrh.cz. Novinky a zajímavosti ze světa Apple na https://www.applemagazin.eu
Avatar
Nahoru Odpovědět  -1 21.3.2015 22:55
Nic není nemožné, proto se snažím dál.
Avatar
Nahoru Odpovědět  -2 21.3.2015 22:56
Nic není nemožné, proto se snažím dál.
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Odpovídá na Patrik Neumann
Matúš Petrofčík:

Keď sa v niečom nevyznáš, určite netvrď niečo ako: "mám to jednodušeji", pretože sa v tom nevyznáš a tým pádom nevieš či to máš jednoduchšie (lepšie, a iné porovnania) ;)

Skús si preštudovať tunajšie tutoriály ak ťa PHP zaujalo :) http://www.itnetwork.cz/…ogramy-v-php

//edit: ajaj :D ja som prečítal NEvyznám namieto vyznám :D každopádne kukni na tie tutoriály

Editováno 21.3.2015 23:00
Nahoru Odpovědět  +2 21.3.2015 22:59
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Odpovídá na Matúš Petrofčík
Patrik Neumann:

Pro tebe, toto je první fungující php script

Nahoru Odpovědět  -1 21.3.2015 23:05
Nic není nemožné, proto se snažím dál.
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Odpovídá na Patrik Neumann
Matúš Petrofčík:

Pre teba, nie som tvoj nepriateľ, nechcem ťa urážať ani nič. Chcel som ťa upozorniť na to, že to jednoduchšie nemáš (napr. kontroluješ viackrát to isté, skúš nad tým popremýšľať trochu inak), a ani správne (napr. nekontroluješ čo vracia mail() funkcia, preto nevieš či sa email fakt odoslal)... ak chceš písať PHP scripty, a nie len tupo zliepať kód kúsok po kúsku dokopy až to zázračne bude "fungovať", tak si pozri tie tutoriály :)

Nahoru Odpovědět  +2 21.3.2015 23:10
obsah kocky = r^2 ... a preto vlak drnká
Avatar
tomasmanhal
Člen
Avatar
Odpovídá na Matúš Petrofčík
tomasmanhal:

Tak samozřejmě, lze to napsat i jinak :-D Já to mám ze zdejších tutoriálů :-)

Nahoru Odpovědět  +1 21.3.2015 23:11
Kdyby nám dodali k životu zdrojový kód, vše by bylo jednodušší...
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Odpovídá na tomasmanhal
Matúš Petrofčík:

Myslím že každý by si to urobil nejako inak -> iné tutoriály, alebo "po svojom" :D :D

Nahoru Odpovědět  +1 21.3.2015 23:12
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Patrik Neumann:

ok lidi, v tom scriptu od tomasmanhal jsem se moc nevyznal, zkouším s ním, ale ještě jsem na to nepřišel

Nahoru Odpovědět 21.3.2015 23:13
Nic není nemožné, proto se snažím dál.
Avatar
Tomáš123
Člen
Avatar
Odpovídá na Patrik Neumann
Tomáš123:

Toto je skôr prvý fungujúci PHP skript, ktorý nefunguje. :)
Ak chceš vypísanie hlášky o úspešnom odoslaní previazať so skutočným pokusom o odoslanie postav to takto:

if(mail()) {
echo "hlaska";
}

Prečo sa ospravedlňuješ vždy keď užívateľ niečo vynechá? Je to predsa jeho problém.

Mimochodom by bolo vhodné e-mail validovať. Aspoň aby musel mať tvar nieco@nieco.nieco. Dá sa na to postaviť celkom jednoduchý regulárny výraz:

if(!preg_match("/(.+)\@(.+)\.(.+)/", $_POST['mail'] { //nie som si istý predznačeným zavináčom
echo "Napíš skutočný email";
}

Regulár sa prerobiť aj tak, aby neprešli nechcené znaky, aby bol názov generickej domény iba v požadovanom rozsahu atď.

Editováno 21.3.2015 23:20
Nahoru Odpovědět  +1 21.3.2015 23:14
Keby nebolo Internetu Exploreru, nebolo by dnešného internetu.
Avatar
Nahoru Odpovědět 21.3.2015 23:15
Nic není nemožné, proto se snažím dál.
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Odpovídá na Tomáš123
Matúš Petrofčík:

Predtým mu to (vraj) šlo... teraz tam skúša pridávat kód od tomáša, lenže asi nevie to, že .html súbory sa mu nespracujú ako .php súbory (teda ak nezmeníme chovanie serveru) a php kód sa javí ako text v html :)

Nech si pozrie tie tutoriály ak s tým chce pracovať. Takto sa bude trápiť donekonečna s každou prkotinou a bude sa pýtať na jednoduché veci, ktoré sú vysvetlené hneď na začiatku tutoriálov o PHP :)

Nahoru Odpovědět 21.3.2015 23:18
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Odpovídá na Matúš Petrofčík
Patrik Neumann:

to vím, proto to dělám v .php

Nahoru Odpovědět 21.3.2015 23:19
Nic není nemožné, proto se snažím dál.
Avatar
Tomáš123
Člen
Avatar
Odpovídá na Patrik Neumann
Tomáš123:

Ty si frajer. Všetko vieš, ale stále nerozumieš. Radšej sa ani nepozeraj na môj upravený príspevok :).

Uprav to tam, kde máš funkciu mail(). Nahraď tým riadky 8 a 9 (samozrejme je potrebné upraviť to, ja som to uviedol iba ako príklad).

Editováno 21.3.2015 23:24
Nahoru Odpovědět 21.3.2015 23:22
Keby nebolo Internetu Exploreru, nebolo by dnešného internetu.
Avatar
Tomáš123
Člen
Avatar
Odpovídá na Patrik Neumann
Tomáš123:

Mal by si nejako zabezpečiť možnosť zaplnenia kapacity tvojho emailového klienta. Teoreticky mi stačí napísať dlhú správu, po odoslaní podržať F5 a spôsobím ti týždňovú robotu.

Používa sa na to sessions (http://pehapko.cz/…php/sessions).

Nahoru Odpovědět 21.3.2015 23:29
Keby nebolo Internetu Exploreru, nebolo by dnešného internetu.
Avatar
Odpovídá na Tomáš123
Patrik Neumann:

to protože to zůstane vyplněné?

Nahoru Odpovědět 21.3.2015 23:31
Nic není nemožné, proto se snažím dál.
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Odpovídá na Tomáš123
Matúš Petrofčík:

Prehliadač sa pri obnovení stránky s odoslaným formulárom pýta otázku, takže by si mulel cyklicky klikať na F5 a Enter, teda aspoň čo ja viem :)

Nahoru Odpovědět 21.3.2015 23:32
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Odpovídá na Matúš Petrofčík
Patrik Neumann:

To vím, ale on zůstává vyplněný? (ten formulář)

Nahoru Odpovědět 21.3.2015 23:33
Nic není nemožné, proto se snažím dál.
Avatar
Tomáš123
Člen
Avatar
Tomáš123:

Nie, to preto, že sa dáta odošlú na server a tam sa uchovajú (všetky údaje sa po ukončení skriptu zničia, ale informácie prídu metódou POST; na ňu sa ničenie nevzťahuje, nakoľko údaje pochádzajú z iného zdroja). Pomohlo by presmerovanie bezprostredne po spracovaní. Slúži na to funkcia header(). Prečítaj si o nej v manuáli PHP.

Nahoru Odpovědět 21.3.2015 23:36
Keby nebolo Internetu Exploreru, nebolo by dnešného internetu.
Avatar
Nahoru Odpovědět 21.3.2015 23:37
Nic není nemožné, proto se snažím dál.
Avatar
Tomáš123
Člen
Avatar
Odpovídá na Matúš Petrofčík
Tomáš123:

To bola odstrašujúca teória aby to patrik lepšie zabezpečil. Teoreticky by na to šiel vytvoriť skript JavaScriptom (na to cyklické opakovanie).

patrik:
Na stránke máš nejakú chybu s PHP. Vlastne iba vypisuješ obsah ako HTML.

Editováno 21.3.2015 23:39
Nahoru Odpovědět 21.3.2015 23:38
Keby nebolo Internetu Exploreru, nebolo by dnešného internetu.
Avatar
Nahoru Odpovědět 21.3.2015 23:39
Nic není nemožné, proto se snažím dál.
Avatar
Tomáš123
Člen
Avatar
Odpovídá na Patrik Neumann
Tomáš123:

Skús odpovedať trochu plnejšou vetou. Súbor nemá príponu .php.

Nahoru Odpovědět 21.3.2015 23:41
Keby nebolo Internetu Exploreru, nebolo by dnešného internetu.
Avatar
Odpovídá na Tomáš123
Patrik Neumann:

jinak to myslíš jak, teď jsem moc nepochopil, formulář jsem měl v HTML, jinak to mám v php

Nahoru Odpovědět 21.3.2015 23:42
Nic není nemožné, proto se snažím dál.
Avatar
BlugW
Redaktor
Avatar
Odpovídá na Patrik Neumann
BlugW:

Takový menši dotaz, koukal jsi se vůbec na tutoriály ohledně php http://www.itnetwork.cz/php/zaklady ?
Protože jak to čtu, tak nechápeš ani jak to vlastně funguje.

Nahoru Odpovědět  +1 21.3.2015 23:47
Pořiď si mac na www.appletrh.cz. Novinky a zajímavosti ze světa Apple na https://www.applemagazin.eu
Avatar
Odpovídá na BlugW
Patrik Neumann:

moc ne, jen jednou na pár prvních skriptů v php

Nahoru Odpovědět  -1 22.3.2015 7:17
Nic není nemožné, proto se snažím dál.
Avatar
mkub
Redaktor
Avatar
Odpovídá na Patrik Neumann
mkub:

nazdarek, tvoj kod je dost neprehladny... kod sa pise tak, aby si ho pochopil aj po 20-tich rokov, ked sa nan pozries...
bloky sa nezapisuju pre prehladnost napr.:

if (podmienka)
{
prikaz1;
prikaz2;
.
.
.
prikazN;
}

ale napr. takto:

if (podmienka) {
  prikaz1;
  prikaz2;
  prikaz3;
  .
  .
  .
  prikazN;
}

alebo:

if (podmienka)
{
  prikaz1;
  prikaz2;
  prikaz3;
  .
  .
  .
  prikazN;
}

vidis ten rozdiel v prehladnosti? a okrem toho v PHP je medzera chapany ako prazdny znak a je preskakovana... pouziva sa na sprehladnenie celeho kodu

a ked v bloku mas napr. jeden prikaz, tak mozes napr. pouzit tento sposob zapisu:

if (podmienka) {prikaz;}
Editováno 22.3.2015 13:07
 
Nahoru Odpovědět 22.3.2015 13:04
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na mkub
Jan Vargovský:

Když je za podmínkou v bloku jen jeden příkaz, tak je přehlednější ty složené závorky vůbec nepsat.

 
Nahoru Odpovědět 22.3.2015 13:08
Avatar
mkub
Redaktor
Avatar
Odpovídá na Jan Vargovský
mkub:

suhlasim, aj takto sa to da...
ale musis suhlasit, ze pisat vsetko od prveho stlpca bez odsadenia nezlepsuje prehladnost kodu

 
Nahoru Odpovědět 22.3.2015 13:14
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na mkub
Jan Vargovský:

Upřímně, ani nevím proč si ho tam dával :)

 
Nahoru Odpovědět 22.3.2015 13:31
Avatar
Tomáš123
Člen
Avatar
Odpovídá na Patrik Neumann
Tomáš123:

Očividne máš skript aj formulár v tom istom html súbore. Veď si otvor link, ktorý si pridal vyššie.

Nahoru Odpovědět 22.3.2015 13:35
Keby nebolo Internetu Exploreru, nebolo by dnešného internetu.
Avatar
Odpovídá na Tomáš123
Patrik Neumann:

ne, ten přesměruje z .../mail.html na .../posli.php

Nahoru Odpovědět 22.3.2015 15:10
Nic není nemožné, proto se snažím dál.
Avatar
Tomáš123
Člen
Avatar
Tomáš123:

Citujem z tvojho kódu:

<form action="" method="post">
<input name="email" size="25" value="Váš@mail">*(abych mohl odpovědět, nebude zveřejněn)<br>
<input name="predmet" size="25" value="Předmět">*(prosím vyplňte, o čem je zpráva)<br>
<strong>co je teď za rok v česku?</strong><input name="spam" size="25">*(ochrana před spamboty)<br>
<textarea name="zprava" rows="6" cols="55" placeholder="Zpráva"></textarea>*(text zprávy)<br>
<input type="submit" value="Odeslat">
</form>

Žiadne prepojenie na PHP skript nevidím. Vidím ale nadbytočný PHP kód v HTML súbore, ktorý sa nikdy neinterpretuje. Presuň PHP kód do nového súboru, ulož ho s príponou ".php" a odkaž naňho v atribúte action prvku <form>. Potom by to malo ísť.

Vlastne ti stačí urobiť to tak, ako to bolo.

Je možné, že hovoríme každý o inom kóde. Použi preto svoje vyjadrovacie schopnosti a popíš problém lepšie. Nikto z nás tu nie je na to, aby typoval pôvod tvojho problému. Pre ukážku bude dobré aj pridať kód.

Editováno 22.3.2015 15:37
Nahoru Odpovědět 22.3.2015 15:36
Keby nebolo Internetu Exploreru, nebolo by dnešného internetu.
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Odpovídá na Patrik Neumann
Adam Ježek:

Od včerejška to sleduju a čekam, kdy to bude fungovat...
Padlo to tu již několikrát, ale očividně né dostatečněkrát, takže:
SOUBOR mail.html PŘEJMENUJ NA mail.php, PROTOŽE TO KOMPILER CHÁPE JAKO HTML SOUBOR A VŮBEC SE NEPOKOUŠÍ PARSOVAT PHP KÓD (PROTOŽE V HTML SOUBORU ŽÁDNÝ PHP NENI) A POUZE PHP KÓD VYPÍŠE!!!
schválně se na to podivej, vidíš že php kód se ti vypisuje na stránku
http://ctrlv.cz/TgdG

Editováno 22.3.2015 15:40
Nahoru Odpovědět  +3 22.3.2015 15:39
Pokud chceš odpovědět, klikni na odpovědět. Pokud chceš vložit zdroják, klikni na vložit zdroják (</>)
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Adam Ježek:

//tak koukam že tam zanecháváš nepovedený pokusy... mail3.php je teď aktuální verze? sotva to otevřu, tak už mi píše, že mam chybu ve vyplnění formuláře :D

přečti si tohle:
http://www.itnetwork.cz/…ovy-formular
a tohle:
http://www.itnetwork.cz/…ar-vylepseni

Editováno 22.3.2015 15:50
Nahoru Odpovědět  +2 22.3.2015 15:49
Pokud chceš odpovědět, klikni na odpovědět. Pokud chceš vložit zdroják, klikni na vložit zdroják (</>)
Avatar
Odpovídá na Tomáš123
Patrik Neumann:

no teď už mám formulář i skript v php, původně to bylo v html s přesměrováním na php, ale teď už v jednom

Nahoru Odpovědět 23.3.2015 13:53
Nic není nemožné, proto se snažím dál.
Avatar
Odpovídá na Tomáš123
Patrik Neumann:

toto je PHP soubor, jen html formulář, jinak soubor .php

Nahoru Odpovědět 23.3.2015 13:54
Nic není nemožné, proto se snažím dál.
Avatar
Nahoru Odpovědět 23.3.2015 13:55
Nic není nemožné, proto se snažím dál.
Avatar
Odpovídá na Adam Ježek
Patrik Neumann:

ano, nejnovější je .../mail3.php, ano podívám se a spravím to, to s tou chybou vím

Nahoru Odpovědět 23.3.2015 13:56
Nic není nemožné, proto se snažím dál.
Avatar
Odpovídá na Adam Ježek
Patrik Neumann:

To je starý soubor, normální už je .../mail3.php

Nahoru Odpovědět 23.3.2015 14:11
Nic není nemožné, proto se snažím dál.
Avatar
Odpovídá na Adam Ježek
Patrik Neumann:

přidal jsem jednu věc a hlásí to chyby až po stisknutí tlačítka Odeslat

Nahoru Odpovědět 23.3.2015 14:22
Nic není nemožné, proto se snažím dál.
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 49 zpráv z 49.