Autor | Zpráva | ||
---|---|---|---|
Lukyluke Profil * |
Zdravím, měl bych prosbu o pomoc. Mám jednoduchý formulář a k němu mailer v php, který bohužel nefunguje. Kdysi jsem ho používal na několika webech, takže by měl, ale asi mi někde uniká nějaká chyba... :-(
Formulář: <FORM action="http://www.mujweb.cz/mailer.php" method="post" > <INPUT type="hidden" name="transfer" value="http://www.mujweb.cz/odeslano.php"> <table class="spl"> <tr class="1"> <th>Jméno</th> <td class="druhy"><INPUT type="text" name="subjekt" value="" size=50 maxlength=50></td> </tr> <tr class="2"> <th><span class="redstrongn">E-mail</span></th> <td class="prvni"><INPUT type="text" name="odesilatel" value="@" size=50 maxlength=50></td> </tr> <tr class="2"> <th>Telefon</th> <td class="druhy"><INPUT type="text" name="telefon" value="" size=50 maxlength=11></td> </tr> <tr class="1"> <th><span class="redstrongn">Zpráva</span></th> <td class="prvni"><TEXTAREA name="zprava" cols="44" rows="10"></TEXTAREA></td> </tr> <tr class="2"> <th><span class="redstrongn"> </span></th> <td class="druhy"> <INPUT type="submit" name="submit" value="Odeslat formulář"> <INPUT type="reset" name="reset" value="Vymazat formulář"> </td> </tr> </table> </FORM> Mailer: <?php $prijemce = 'muj@mail.cz'; // zde můžete změnit kódování $charset = 'windows-1250'; $odesilatel = $_POST['odesilatel']; $subjekt = $_POST['subjekt']; $transfer = $_POST['transfer']; $datum = date("j/m/Y"); $cas = date("H:i:s"); if (!validace ($prijemce, $odesilatel, $transfer)) exit("<P><B>Formulář obsahuje chyby.\n\n"); $teloZpravy = vytvorTelo ($_POST); if (!odeslat ($prijemce, $odesilatel, $subjekt, $datum, $cas, $teloZpravy, $charset)) exit("<P><B>Zpráva nebyla odeslána.</B>\n\n"); ?> <META http-equiv='refresh' content='0; URL=<?php echo "$transfer"; ?>'> <?php exit; //////////////////////////////// VYTVOŘIT TĚLO ZPRÁVY ///////////////////////// function vytvorTelo ($_POST) { $teloZpravy = ""; while (list($name, $value) = each($_POST)) { if ($name != 'subjekt' && $name != 'transfer' && $name != 'submit' && $name != 'odesilatel') { if (gettype($value) == 'array') { // TAG SELECT MULTIPLE $cnt = count($value); for ($i=0; $i < $cnt; $i++) { $teloZpravy .= "$name: $value[$i]r\\n"; } } else { // JINÉ VSTUPNÍ PRVKY $teloZpravy .= "$name: $value\r\n"; } } } return $teloZpravy; } // end func //////////////////////////// ODEŠLE PLATNOU ZPRÁVU ///////////////////////////////// function odeslat ($prijemce, $odesilatel, $subjekt, $datum, $cas, $teloZpravy, $charset){ $zprava = "------------------------------------------------------------------"; $zprava .= "\n <p>Komu: $prijemce"; $zprava .= "\n <br />Od koho: $odesilatel"; $zprava .= "\n <br />Věc: $subjekt"; $zprava .= "\n <br />Odesláno:</p> $datum $cas"; $zprava .= "\n------------------------------------------------------------------"; $zprava .= "\n\n$teloZpravy"; $hlavicka = "MIME-Version: 1.0\r\n"; $hlavicka .= "Content-Type: text/html; charset=" . $charset . "\r\n"; $hlavicka .= "From: $odesilatel\r\n"; $hlavicka .= "To: $prijemce\r\n"; $hlavicka .= "Reply-To: $prijemce\r\n"; $hlavicka .= "X-Mailer: muj_server\r\n"; $odeslano = mail($prijemce, $subjekt, $zprava, $hlavicka); if ($odeslano == false) { exit ("<P>Zprávu nelze odeslat. Klikněte zpět a zkuste znovu.</B>\n\n"); } return $odeslano; } // end function //////////////////////////////// KONTROLA FORMULÁŘE //////////////////////////// function validace ($prijemce, $odesilatel, $transfer) { $valid = true; if (!$prijemce) { $valid = false; exit ("<P><B>Chyba. Vyplňte příjemce. Klikněte zpět a zkuste znovu.</B>\n\n"); } if (!$odesilatel) { $valid = false; exit ("<P><B>Chyba. Vyplňte odesilatele. Klikněte zpět a zkuste znovu.</B>\n\n"); } if(!eregi( "^" . "[_a-z0-9-]+(\.[_a-z0-9-]+)*" . "@" . "[_a-z0-9-]+(\.[a-z0-9-]+)*" . "$", $odesilatel, $regs)) { $valid = false; exit ("<P><B>Chyba. Neplatný odesílatel. Klikněte zpět a zkuste znovu.</B>\n\n"); } if(!eregi( "^" . "[_a-z0-9-]+(\.[_a-z0-9-]+)*" . "@" . "[_a-z0-9-]+(\.[a-z0-9-]+)*" . "$", $prijemce, $regs)) { $valid = false; exit ("<P><B>Chyba. Neplatný příjemce. Klikněte zpět a zkuste znovu.</B>\n\n"); } if (!transfer) { $valid = false; $transfer = 'http://www.mujweb/odeslano.php'; exit ("<P><B>Chyba. Není zadáno URL následné stránky do pole transfer.</B>\n\n"); } return $valid; } // end func ?> Moderátor Davex: Titulek „Php Mailer“ nevystihoval podstatu dotazu. Příště zkus prosím vymyslet lepší.
|
||
Davex Profil |
#2 · Zasláno: 5. 7. 2015, 20:37:45
Co si představuješ pod pojmem „nefunguje“? Je na webserveru povoleno odesílání e-mailů, vypisuje se nějaká chyba a je povoleno vypisování chyb při provádění PHP kódu?
|
||
Lukyluke Profil * |
#3 · Zasláno: 6. 7. 2015, 14:00:39
Ano, koukám, že jsem zapoměl specifikovat. Nevyhodí to žádnou hlášku. Formulář po odeslání přesměruje na mailer a zobrazí se pouze prázdná stránka. Zkoušel jsem to na hostingu od wedosu a na wz. Nevím, kde by se na hostingu dalo zkontrolovat odesílání mailů.
|
||
Davex Profil |
Lukyluke:
„Nevyhodí to žádnou hlášku. Formulář po odeslání přesměruje na mailer a zobrazí se pouze prázdná stránka.“ V tom případě asi bude v kódu kritická chyba, ale ty se jí nedozvíš, protože je v konfiguraci PHP vypnuté vypisování chyb. Pro vyřešení problému ti pomůže vypisování chyb dočasně zapnout. |
||
Lukyluke Profil * |
#5 · Zasláno: 8. 7. 2015, 10:11:00
Fatal error: Cannot re-assign auto-global variable _POST in /data/web/virtuals/68783/virtual/www/mailer.php on line 33
|
||
Keeehi Profil |
#6 · Zasláno: 8. 7. 2015, 10:51:04
function vytvorTelo ($_POST) { $_POST na třeba $post a všechny následné výskyty uvnitř funkce a bude ti OK. Snažíš se totiž přepisovat superglobální proměnnou což je špatně a vlastně to ani není tvým cílem. Jen jsi to omylem špatně pojmenoval.
|
||
Lukyluke Profil * |
#7 · Zasláno: 8. 7. 2015, 13:08:31
Jo super, už zase běží. Děkuji! :-)
|
||
Časová prodleva: 9 let
|
0