Diskuze: chyby v emailu při odesílání v php
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 49 zpráv z 49.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
<?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>" );
?>
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>";
}
fujky! 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
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é
Kdybys měl, to bych se v tom asi nezamotal, fuf...
A co když je problém na straně email serveru a ne uživatele?
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 ja som
prečítal NEvyznám namieto vyznám
každopádne kukni na tie tutoriály
Pro tebe, toto je první fungující php script
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
Tak samozřejmě, lze to napsat i jinak Já to mám ze zdejších
tutoriálů
Myslím že každý by si to urobil nejako inak -> iné tutoriály, alebo
"po svojom"
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
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ď.
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
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).
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).
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
To vím, ale on zůstává vyplněný? (ten formulář)
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.
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.
Skús odpovedať trochu plnejšou vetou. Súbor nemá príponu .php.
jinak to myslíš jak, teď jsem moc nepochopil, formulář jsem měl v HTML, jinak to mám v php
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.
moc ne, jen jednou na pár prvních skriptů v php
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;}
Když je za podmínkou v bloku jen jeden příkaz, tak je přehlednější ty složené závorky vůbec nepsat.
suhlasim, aj takto sa to da...
ale musis suhlasit, ze pisat vsetko od prveho stlpca bez odsadenia nezlepsuje
prehladnost kodu
Očividne máš skript aj formulár v tom istom html súbore. Veď si otvor link, ktorý si pridal vyššie.
ne, ten přesměruje z .../mail.html na .../posli.php
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.
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
//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
přečti si tohle:
http://www.itnetwork.cz/…ovy-formular
a tohle:
http://www.itnetwork.cz/…ar-vylepseni
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
toto je PHP soubor, jen html formulář, jinak soubor .php
ano, nejnovější je .../mail3.php, ano podívám se a spravím to, to s tou chybou vím
To je starý soubor, normální už je .../mail3.php
přidal jsem jednu věc a hlásí to chyby až po stisknutí tlačítka Odeslat
Zobrazeno 49 zpráv z 49.