Autor Zpráva
Wayne
Profil *
Ahoj, mohl by mi někdo poradit? Níže přikládám jednoduchý formulář v php, který mi ale ne úplně ideálně funguje

 <?php
header("Content-Type: text/html; charset=utf-8");
$to = "mujEmail@gmail.com";
$extra = "From: $_POST[email]\r\nReply-To: $_POST[email]\r\n";
$subject = "Kontakt od ".$_POST['jmeno']."";
$mess = "Jméno: ".$_POST['jmeno']."\nEmail: ".$_POST['email']."\nZpráva:\n".$_POST['text']."";
mb_language('Neutral');
mb_internal_encoding("UTF-8");
mb_http_input("UTF-8");
mb_http_output("UTF-8");
if(empty($_POST['jmeno'])||empty($_POST['text'])|| empty($_POST['email']) ||!ereg("^.+@.+\..+$", $_POST['email'])) {
echo "<script>alert('Špatně zadané údaje, zkuste to prosím znovu.');</script>";}
else{
$succes = mb_send_mail($to, $subject, $mess, $extra);
if($succes){
echo "<script>alert('Zpráva byla úspěšně odeslána na můj email. Přeji pěkný den.');</script>";
}else{
echo "<script>alert('Nastala chyba, zkuste nás kontaktovat na e-mail: mujEmail@gmail.com');</script>"; } }
print "<meta http-equiv=\"refresh\" content=\"0;URL=index.html\">";
exit();
?>

Zaprvé tento script mi nefunguje v IE, ve FF i Chrome mi funguje, jen se mi písmena s diakritikou zobrazují naprosto nesmyslně, věděl by někdo kde je chyba?
Alphard
Profil
Popis nefunguje je nic moc. Málokomu se chce luštit, co by mohlo nefungovat.
V každém případě, činnost PHP je na prohlížeči nezávislá a ten javascript nedělá nic zásadního, takže bych doporučoval se ho úplně zbavit. Chyby vypiště třeba červeným písmem k formuláři, to bude stačit. A to přesměrování by bylo také lepší řešit pomocí header('Location:index.html').

S funkcí mb_send_mail() nemám moc zkušenosti, ale ve FAQ máme vlastní nadstavbu cs_mail(), která myslím funguje dobře.
Joker
Profil
Wayne:
Co znamená „nefunguje“?

Pokud to v některých prohlížečích funguje a v jiných ne, nevypadá to na chybu PHP.

Co má dělat ta sekvence volání mb_* na řádcích 7-10? Minimálně volání mb_http_input je špatně, protože mb_http_input není „přikazovací“, ale „dotazovací“ funkce (tj. něco zjišťuje a vrací) a argumentem není kódování.
Wayne
Profil *
Nefunguje v mém případě znamená, že ve FF a Chrome mi hlášení jako toto "Špatně zadané údaje" znaménka s diakritikou se mi vypisují jako otazníky, a v IE mi po odeslání kontaktních údajů vůbec nic nedělá, jen se načte úvodní stránka
Joker
Profil
Wayne:
v IE mi po odeslání kontaktních údajů vůbec nic nedělá, jen se načte úvodní stránka

Což se mimochodem bude dít v každém prohlížeči, který nemá zapnutý JS.

ve FF a Chrome mi hlášení jako toto "Špatně zadané údaje"
Což znamená, že se mail neodeslal. To bývá vopruz ladit. Nějaký minimální testovací mail projde? Jestli ne, bude chyba v nastavení e-mailu.
Wayne
Profil *
Joker:
V IE zapnutý JS mám a co jsem zjistit, tak se mi kontaktní údaje vyšlou do mailu, ale problém je v tom, že mi to v prohlížeči nehlásí žádný info o tom že údaje byli úspěšně odeslány.

V FF a chrome jsem to myslel tak že když úmyslně zadám špatný formát jednotlivých údajů, tak se mi správně zobrazí hlášení, ale to hlášení je nečitelné ptž ty znaky s diakritikou se vypisují ve formě otazníku v kosočtverci.
Joker
Profil
Wayne:
ad IE: Možná se přesměruje dřív, než dojde na ten alert. Jinak zvolený způsob notifikací má poměrně velké množství scénářů, co může být špatně.
Nelze se spolehnout, že se notifikace uživateli zobrazí a nelze se spolehnout, že se přesměruje.

Ta sekvence mb_* funkcí si nejsem jistý jaký má účel a minimálně některé z nich jsou podle mě zbytečné (to mb_http_input je jednoznačně chybné).

správně zobrazí hlášení, ale to hlášení je nečitelné
V tom případě je soubor se stránkou v jiném kódování, než o sobě tvrdí.
Pesso69
Profil
Jednoduchy kontaktny formular:

<!--// contact form  -->
<div id="contact-form">
            <form method="post" action="contact.php">
                
                <div class="field">
                    <label>Jméno:</label>
                    <input type="text" name="name" class="text" />
                </div>
                
                <div class="field">
                    <label>E-mail: <span>*</span></label>
                    <input type="text" name="email" class="text" />
                </div>
                
                <div class="field">
                    <label>Zpráva: <span>*</span></label>
                    <textarea name="message" class="text textarea" ></textarea>
                </div>
 
                <div class="field">
                    <input type="submit" name="odoslat" id="send" value="Odeslat zprávu"/>
                    <div class="loading"></div>
                </div>
                
            </form>
        </div>
<!-- contact form  //-->
 
 
<?php
// contact.php
 
    if(( null !== $_POST['odoslat'])) {
 
 
    if( ($_POST['name'] === null) AND ($_POST['email'] === null) AND ($_POST['message'] === null) ) {
 
      echo 'Vyplňte všetky polia označené *';}
    
    else {
 
      require('class.phpmailer.php');
 
      $mail = new PHPMailer;
      $mail->CharSet = 'utf-8';
      $mail->IsHTML(true);
      $mail->setFrom('emailfrom@example.sk', 'EmailFrom');
      $mail->addAddress('emailto@example.sk');
      $mail->Subject = 'Predmet spravy';
 
      $message .= 'Name: '.$_POST['name'];
      $message .= 'E-mail: '.$_POST['email'];
      $message .= 'Sprava: '.$_POST['message'];
 
      $mail->Body = $message;
 
    if (!$mail->send()) {
      echo "Chyba: ".$mail->ErrorInfo; 
    } else {
      echo "Správa bola úspešne odoslaná"; 
      }
 
    }  
 
?>
Alphard
Profil
Takto napsané porovnání s null není vůbec rozumné. Pokud v poli daný klíč neexistuje, bude se generovat Notice.

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: