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
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 *
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 *
Fatal error: Cannot re-assign auto-global variable _POST in /data/web/virtuals/68783/virtual/www/mailer.php on line 33
Keeehi
Profil
function vytvorTelo ($_POST) {
Přepiš $_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 *
Jo super, už zase běží. Děkuji! :-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: