Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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

Aktivity
Avatar
Patrik Neumann:21.3.2015 22:31

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("[email protected]", $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
Odpovídá na Patrik Neumann
Tomáš Maňhal:21.3.2015 22:36
<?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 protected]';
            $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
21.3.2015 22:36
Avatar
Patrik Neumann:21.3.2015 22:48

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("[email protected]", $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
Odpovídá na Tomáš Maňhal
Patrik Neumann:21.3.2015 22:48

mám to jednodušeji

Nahoru Odpovědět
21.3.2015 22:48
Nic není nemožné, proto se snažím dál.
Avatar
 
Nahoru Odpovědět
21.3.2015 22:49
Avatar
Odpovídá na Tomáš Maňhal
Patrik Neumann:21.3.2015 22:51

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

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

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
21.3.2015 22:52
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Odpovídá na Matúš Petrofčík
Patrik Neumann:21.3.2015 22:54

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
21.3.2015 22:54
Nic není nemožné, proto se snažím dál.
Avatar
Odpovídá na Patrik Neumann
Neaktivní uživatel:21.3.2015 22:54

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
21.3.2015 22:54
Neaktivní uživatelský účet
Avatar
Odpovídá na Matúš Petrofčík
Patrik Neumann:21.3.2015 22:55

jinak by to mělo odesílat

Nahoru Odpovědět
21.3.2015 22:55
Nic není nemožné, proto se snažím dál.
Avatar
Odpovídá na Neaktivní uživatel
Patrik Neumann:21.3.2015 22:56

já se v tom vyznám

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

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
21.3.2015 22:59
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Odpovídá na Matúš Petrofčík
Patrik Neumann:21.3.2015 23:05

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

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

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
21.3.2015 23:10
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Odpovídá na Matúš Petrofčík
Tomáš Maňhal:21.3.2015 23:11

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

 
Nahoru Odpovědět
21.3.2015 23:11
Avatar
Odpovídá na Tomáš Maňhal
Matúš Petrofčík:21.3.2015 23:12

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

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

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:21.3.2015 23:14

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
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
Odpovídá na Tomáš123
Matúš Petrofčík:21.3.2015 23:18

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:21.3.2015 23:19

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:21.3.2015 23:22

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:21.3.2015 23:29

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:21.3.2015 23:31

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
Odpovídá na Tomáš123
Matúš Petrofčík:21.3.2015 23:32

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:21.3.2015 23:33

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:21.3.2015 23:36

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:21.3.2015 23:38

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
Odpovídá na Tomáš123
Patrik Neumann:21.3.2015 23:39

nevíš jakou?

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:21.3.2015 23:41

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:21.3.2015 23:42

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
Odpovídá na Patrik Neumann
Neaktivní uživatel:21.3.2015 23:47

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
21.3.2015 23:47
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Patrik Neumann:22.3.2015 7:17

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

Nahoru Odpovědět
22.3.2015 7:17
Nic není nemožné, proto se snažím dál.
Avatar
mkub
Tvůrce
Avatar
Odpovídá na Patrik Neumann
mkub:22.3.2015 13:04

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ý
Tvůrce
Avatar
Odpovídá na mkub
Jan Vargovský:22.3.2015 13:08

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
Tvůrce
Avatar
Odpovídá na Jan Vargovský
mkub:22.3.2015 13:14

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ý
Tvůrce
Avatar
Odpovídá na mkub
Jan Vargovský:22.3.2015 13:31

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:22.3.2015 13:35

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:22.3.2015 15:10

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:22.3.2015 15:36

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
Tvůrce
Avatar
Odpovídá na Patrik Neumann
Adam Ježek:22.3.2015 15:39

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
22.3.2015 15:39
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
Adam Ježek
Tvůrce
Avatar
Adam Ježek:22.3.2015 15:49

//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
22.3.2015 15:49
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
Odpovídá na Tomáš123
Patrik Neumann:23.3.2015 13:53

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:23.3.2015 13:54

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
Odpovídá na Adam Ježek
Patrik Neumann:23.3.2015 13:55

už se stalo

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:23.3.2015 13:56

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:23.3.2015 14:11

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:23.3.2015 14:22

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.