Autor Zpráva
Stanley
Profil
Zdravím,
mám formulář a odesílací skript php, na který odkáže tlačítko submit.
Potřebuji, aby se echo s informací, zda se povedlo odeslat e-mail zobrazovalo nad nebo pod furmulářem a né na stránce s php skriptem.
Zde je HTML formulář:
  <form action="send.php" method="post">    
    <label for="jmeno">Jméno:*</label> <br> <input type="text" name="jmeno" size="20" id="jmeno">
    <br>
    <label for="email">E-mail:*</label> <br> <input type="text" name="email" size="20" id="email">
    <br>
    <label for="telefon">Tel. číslo:</label> <br> <input type="text" name="telefon" size="20" id="telefon">
    <br>
    <label for="zprava">Váš dotaz:</label> <br> <textarea name="zprava" cols="20" rows="5"></textarea>
    <br>
    <p class="pk">Položky označené hvězdičkou jsou povinné.</p>
    <input class="odeslani" type="submit" value="Odeslat">  
  </form>    


Zde je PHP skript:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  <body>    
<?php        
function autoUTF($s)  
{
if (preg_match('#[\x80-\x{1FF}\x{2000}-\x{3FFF}]#u', $s))
    return $s;
if (preg_match('#[\x7F-\x9F\xBC]#', $s))
    return iconv('WINDOWS-1250', 'UTF-8', $s);
    return iconv('ISO-8859-2', 'UTF-8', $s);
}

$jmeno = $_POST['jmeno'];  
$email = $_POST['email']; 
$telefon = $_POST['telefon']; 
$hlavicka = "From: <$email>\r\n";   
$hlavicka .= "MIME-version: 1.0\n";
$hlavicka .= "X-Mailer: PHP\n";
$hlavicka .= "Content-Type: text/plain; charset=\"UTF-8\"\n";
$predmet = "=?utf-8?B?".base64_encode(autoUTF ("Zpráva z kontaktního formuláře: " . $jmeno))."?=";   
$komu .= "mujmail@seznam.cz";  
$zprava .= "Jméno: {$_POST['jmeno']}\r\n";
$zprava .= "E-mail: {$_POST['email']}\r\n"; 
$zprava .= "Telefonní číslo: {$_POST['telefon']}\r\n\r\n";  
$zprava .= "Zpráva:\n{$_POST['zprava']}\r\n";  

if (($jmeno!="") and ($email!="") and is_email($email))                                   
{   
Mail($komu, $predmet, $zprava, $hlavicka);
echo "<p><strong>E-mail byl úspěšně odeslán</strong>.</p>"; }
else                                                
{                    
echo "<p>E-mail se <strong>nepodařilo odeslat.</strong><br />Ověřte prosím, jestli jste vyplnil všechny povinné položky, nebo máte E-mail ve správném tvaru.</p>"; 
}

function is_email ($email, $regular = "/^([a-z0-9_.-]+)@([a-z0-9_.-]+)\.([a-z]{2,4})$/i") {
  if (preg_match($regular,$email,$details))
    return $details;
}         
?>  
</body>
</html>     

Předem děkuji za nápady a rady.
P.S: PHP neovládám, skript jsem si našel na internetu a poté jsem ho doupravil podle HTML formuláře.
Str4wberry
Profil
Můžeš například ten skript vložit do stránky s formulářem a jeho action namířit na tu samou stránku, která formulář v případě odeslání (navíc) zpracuje.
Stanley
Profil
Str4wberry:
Nevím jestli jsem to pochopil dobře, ale mám udělat toto?
index.php:
<form action="index.php" method="post">    
    <label for="jmeno">Jméno:*</label> <br> <input type="text" name="jmeno" size="20" id="jmeno">
    <br>
    <label for="email">E-mail:*</label> <br> <input type="text" name="email" size="20" id="email">
    <br>
    <label for="telefon">Tel. číslo:</label> <br> <input type="text" name="telefon" size="20" id="telefon">
    <br>
    <label for="zprava">Váš dotaz:</label> <br> <textarea name="zprava" cols="20" rows="5"></textarea>
    <br>
    <p class="pk">Položky označené hvězdičkou jsou povinné.</p>
    <input class="odeslani" type="submit" value="Odeslat">  
  </form>   
  <?php        
function autoUTF($s)  
{
if (preg_match('#[\x80-\x{1FF}\x{2000}-\x{3FFF}]#u', $s))
    return $s;
if (preg_match('#[\x7F-\x9F\xBC]#', $s))
    return iconv('WINDOWS-1250', 'UTF-8', $s);
    return iconv('ISO-8859-2', 'UTF-8', $s);
}

$jmeno = $_POST['jmeno'];  
$email = $_POST['email']; 
$telefon = $_POST['telefon']; 
$hlavicka = "From: <$email>\r\n";   
$hlavicka .= "MIME-version: 1.0\n";
$hlavicka .= "X-Mailer: PHP\n";
$hlavicka .= "Content-Type: text/plain; charset=\"UTF-8\"\n";
$predmet = "=?utf-8?B?".base64_encode(autoUTF ("Zpráva z kontaktního formuláře: " . $jmeno))."?=";   
$komu .= "mujmail@seznam.cz";  
$zprava .= "Jméno: {$_POST['jmeno']}\r\n";
$zprava .= "E-mail: {$_POST['email']}\r\n"; 
$zprava .= "Telefonní číslo: {$_POST['telefon']}\r\n\r\n";  
$zprava .= "Zpráva:\n{$_POST['zprava']}\r\n";  

if (($jmeno!="") and ($email!="") and is_email($email))                                   
{   
Mail($komu, $predmet, $zprava, $hlavicka);
echo "<p><strong>E-mail byl úspěšně odeslán</strong>.</p>"; }
else                                                
{                    
echo "<p>E-mail se <strong>nepodařilo odeslat.</strong><br />Ověřte prosím, jestli jste vyplnil všechny povinné položky, nebo máte E-mail ve správném tvaru.</p>"; 
}

function is_email ($email, $regular = "/^([a-z0-9_.-]+)@([a-z0-9_.-]+)\.([a-z]{2,4})$/i") {
  if (preg_match($regular,$email,$details))
    return $details;
}         
?>    

Jestli ano, tak to nefunguje, nezobrazí se mi echo s informacemi, jestli se povedlo email odeslat, pouze se mi zobrazí hlavní stránka.
Str4wberry
Profil
Tak to ti nefunguje PHP.
petr 6
Profil
Stanley:
Jestli ano, tak to nefunguje, nezobrazí se mi echo s informacemi, jestli se povedlo email odeslat, pouze se mi zobrazí hlavní stránka.
A mail se odešle?
Stanley
Profil
petr 6:
Ano, mail se odešle
Stanley
Profil
Když jsem si s tím teď hrál, tak jsem našel, že se info o odeslání zobrazuje, jen je posunuté nějak do háje.
Akorát že se zobrazuje ještě před tím, než se email odešle.. :(
Ukazuje se, že se nepodařilo odeslat, že se musí vyplnit všechny položky
Stanley
Profil
Ví teda prosím jak skrýt echo, dokud ho nezaktivuje email?
Od rána se pokouším hledat, ale nic co by mi fungovalo jsem nenašel.
Děkuju
Jozin
Profil *
Stanley: Napíšu ti tu celkové řešní (s tím, že se dá použít kdekoli)

form.php
<?php require_once('send.php'); ?>
<form action="<?= $_SERVER['PHP_SELF'] ?>" method="post">    
    <label for="jmeno">Jméno:*</label> <br> <input type="text" name="jmeno" size="20" id="jmeno">
    <br>
    <label for="email">E-mail:*</label> <br> <input type="text" name="email" size="20" id="email">
    <br>
    <label for="telefon">Tel. číslo:</label> <br> <input type="text" name="telefon" size="20" id="telefon">
    <br>
    <label for="zprava">Váš dotaz:</label> <br> <textarea name="zprava" cols="20" rows="5"></textarea>
    <br>
    <p class="pk">Položky označené hvězdičkou jsou povinné.</p>
    <input class="odeslani" type="submit" value="Odeslat">  
  </form>
  <?= $message ?>


send.php
function autoUTF($s)  
{
if (preg_match('#[\x80-\x{1FF}\x{2000}-\x{3FFF}]#u', $s))
    return $s;
if (preg_match('#[\x7F-\x9F\xBC]#', $s))
    return iconv('WINDOWS-1250', 'UTF-8', $s);
    return iconv('ISO-8859-2', 'UTF-8', $s);
}

function is_email ($email, $regular = "/^([a-z0-9_.-]+)@([a-z0-9_.-]+)\.([a-z]{2,4})$/i") {
  if (preg_match($regular,$email,$details))
    return $details;
}

function Send($komu)
{
 $jmeno = $_POST['jmeno'];  
 $email = $_POST['email']; 
 $telefon = $_POST['telefon']; 
 $hlavicka = "From: <$email>\r\n";   
 $hlavicka .= "MIME-version: 1.0\n";
 $hlavicka .= "X-Mailer: PHP\n";
 $hlavicka .= "Content-Type: text/plain; charset=\"UTF-8\"\n";
 $predmet = "=?utf-8?B?".base64_encode(autoUTF ("Zpráva z kontaktního formuláře: " . $jmeno))."?=";     
 $zprava .= "Jméno: {$_POST['jmeno']}\r\n";
 $zprava .= "E-mail: {$_POST['email']}\r\n"; 
 $zprava .= "Telefonní číslo: {$_POST['telefon']}\r\n\r\n";  
 $zprava .= "Zpráva:\n{$_POST['zprava']}\r\n";  

 if (($jmeno!="") and ($email!="") and is_email($email))                                   
 {   
  Mail($komu, $predmet, $zprava, $hlavicka);
  return "<p><strong>E-mail byl úspěšně odeslán</strong>.</p>"; }
 else                                                
 {                    
  return "<p>E-mail se <strong>nepodařilo odeslat.</strong><br />Ověřte prosím, jestli jste vyplnil všechny povinné položky, nebo máte E-mail ve správném tvaru.</p>"; 
 }
}

if(isset($_POST['odeslat'])) $message = Send('mujmail@seznam.cz');


Teď pokud máš u send.php a form.php ve stejné složce, jako soubor, ve kterém to chceš použít (například index.php), tak to bude takto

index.php
[pre]
<?php require_once('form.php'); ?>
//obsah stránky
[pre]

Je možný, že mám někde překlep... ale teoreticky by to mělo jet. (tam kde je v form.php $message, tak to je místo, kde se bude hláška vypisovat)
Stanley
Profil
Jozin:
Chci se zeptat, jestli v send.php chybí v proměnných úmyslně
$komu
, nebo jestli je to vymazané nechtěně, mě to na stránce nic nedělá, posílám Odkaz byl smazán, kam jsem dočasně uložil to, co jsem nahodil z tvého kódu.
A ještě se chci zeptat, k čemu je tam to [pre][pre]
Děkuji ti :)
Jozin
Profil *
Stanley:
$komu tam chybí záměrně předává se jako parametr funkce Send... na posledním řádku...

když dávám pre, tak by to mělo hodit jako zdroják, ale nějak to nevyšlo :-D

Našel jsem chybu... v tom forumláři změň řádek:
<input class="odeslani" type="submit" value="Odeslat">
na
<input class="odeslani" type="submit" name="odeslat" value="Odeslat">  

Můj script se na to spoléhal, že se tak to tlačítko jmenuje, proto to nejelo.
Stanley
Profil
Díky moc, už to funguje perfektně!
Téma můžete označit za vyřešené a ještě jednou všem děkuji, hlavně uživateli Jozin, který byl tak ochotný, že mi napsal celý kód a ochotně mi pomohl.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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