| 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: 11 let
|
|||
0