Autor Zpráva
f.soft
Profil *
Dobrý den,
mám knihu Programování pro úplné začátečníky od Martina Mikulňáka (http://knihy.cpress.cz/programovani-www-stranek-pro-uplne-zacatecniky-d3.html) a hned jsem se do ní začetl a narazil jsem na kapitolu kontaktní formulář. Když si ho otevřu tam na mě vyskočí chyby:
Notice: Undefined index: jmeno in C:\xampp\htdocs\kniha\05\kontakt.php on line 3

Notice: Undefined index: telefon in C:\xampp\htdocs\kniha\05\kontakt.php on line 4

Notice: Undefined index: email in C:\xampp\htdocs\kniha\05\kontakt.php on line 5

Notice: Undefined index: predmet in C:\xampp\htdocs\kniha\05\kontakt.php on line 6

Notice: Undefined index: zprava in C:\xampp\htdocs\kniha\05\kontakt.php on line 7

Notice: Undefined index: poslat in C:\xampp\htdocs\kniha\05\kontakt.php on line 8

Notice: Undefined variable: okHlaska in C:\xampp\htdocs\kniha\05\kontakt.php on line 84

Notice: Undefined index: kopie in C:\xampp\htdocs\kniha\05\kontakt.php on line 97

ještě přikládám kód toho formuláře.
Nevíte čím to může být? Jsem z toho zoufalý.

Moc Vám děkuji za ochotu pomoci mi.

<?php
$jmeno=trim(htmlspecialchars(strip_tags($_POST['jmeno'])));
$telefon=trim(htmlspecialchars(strip_tags($_POST['telefon'])));
$email=trim(htmlspecialchars(strip_tags($_POST['email'])));
$predmet=trim(htmlspecialchars(strip_tags($_POST['predmet'])));
$zprava=trim(htmlspecialchars(strip_tags($_POST['zprava'])));

if($_POST['poslat']=="ano") {
        $chyby=array();
        if(empty($jmeno)) { $chyby[]='Vyplňte své jméno.'; };  // $jmeno je prázdné
        if(is_numeric($jmeno)) { $chyby[]='Jméno nemůže mít číselnou hodnotu.'; };  // jméno nemůže být číslo
        if(strlen($jmeno)<=2) { $chyby[]='Uvedené jméno je moc krátke.'; };  // minimální délka jména je dva znaky
        
        if(empty($telefon) && empty($email)){  // pokud jsou oba údaje nevyplněny
           $chyby[]='Uveďte kontaktní telefon nebo emailovou adresu.'; 
        };
        if(!empty($telefon)) {  // pokud je $telefon vyplněn
           $telefon=str_replace('+', '', $telefon);   // zmažeme nečíselné znaky 
           $telefon=str_replace('-', '', $telefon);
           $telefon=str_replace('/', '', $telefon);
           $telefon=str_replace(' ', '', $telefon);   // zmažeme i mezery
           if(!is_numeric($telefon)) {  // pokud to není číslo, obsahuje nepovolené znaky
              $chyby[]='Telefonní kontakt obsahuje nepovolené znaky.';
           }
           if(strlen($telefon)<9 || strlen($telefon)>15) {
              // délku si můžete zvolit sami podle vašeho uvážení
              $chyby[]='Telefonní kontakt má nesprávnou délku.';
           }
        }
        if(!empty($email)){  // pokud je vyplněný $email
           if(!preg_match('/^[^@]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}+$/', $email)){
              // emailová adresa nemá správní tvar
              $chyby[]='Uvedená emailová adresa nemá správní tvar.';
           }
        }
        
        if(empty($predmet)){ $chyby[]='Uveďte předmět vaši zprávy.'; };
        if(strlen($predmet)<5){ $chyby[]='Předmět zprávy je příliš krátký.'; };
        if(empty($zprava)){ $chyby[]='Napište vaši zprávu.'; };
        if(strlen($zprava)<20){ $chyby[]='Zpráva je příliš krátká. Zkuste ji popsat podrobněji.'; };
        
        
        $chyba=join('<br />', $chyby);
        if(!empty($chyba)){
            echo '<div class=“chybovaHlaska“>'.$chyba.'</div>';
        };
        if(empty($chyba)){    // všechna jsou v pořádku
           $textZpravy='Odesílatel: <strong>'.$jmeno.'</strong><br /><br />
           [ '.$email.' '.$telefon.' ]<br /><br />
           '.$zprava;
        
               require "class.phpmailer.php";
               require "class.smtp.php";
        
            $Mail = new PHPMailer();
            $Mail->CharSet = 'UTF-8';
            
            $Mail->IsSMTP();
               $Mail->Host = "smtp.googlemail.com";
               $Mail->Username="prihlasovaci.jmeno.k.emailu";
               $Mail->Password="heslo";
               $Mail->SMTPAuth=true;
               $Mail->From = "prihlasovaci.jmeno.k.emailu@gmail.com";
            $Mail->FromName = $jmeno;
               $Mail->AddAddress("prihlasovaci.jmeno.k.emailu@gmail.com");
            if($_POST['kopie']=="on") {
              $Mail->AddBCC($email);
            }
            $Mail->IsHTML(true);
            $Mail->Subject  = $predmet;
            $Mail->Body = $textZpravy;
            $cistyText=strip_tags($textZpravy);
               $Mail->AltBody=$cistyText;

          if($Mail->Send()) {
               $okHlaska="Zpráva byla úspěšne odesláná.";
          } else {
              echo "Zprávu se nepodařilo odeslat. Zkuste to znovu.";
          }
     }
}


if($okHlaska==""){
        echo '<form action="" method="post">
          <label for="jmeno">Vaše jméno:</label>
             <input type="text" name="jmeno" id="jmeno" value="'.$jmeno.'" /><br />
          <label for="telefon">Telefon:</label>
             <input type="text" name="telefon" id="telefon" value="'.$telefon.'" /><br />
          <label for="email">Email:</label>
             <input type="text" name="email" id="email" value="'.$email.'" /><br />
          <label for="predmet">Předmět:</label>
             <input type="text" name="predmet" id="predmet" value="'.$predmet.'" /><br />
          <label for="zprava">Zpráva / dotaz:</label>
             <textarea name="zprava" id="zprava" rows="3">'.$zprava.'</textarea><br />
          <input type="checkbox" name="kopie" id="kopie"';
        if($_POST['kopie']=="on"){ echo ' checked="checked"'; }; 
        echo '/><label for="kopie" style="width:350px;">zaslat kopii zprávy na můj 
             email</label><br />
          <input type="submit" value="Odeslat dotaz" />
          <input type="hidden" name="poslat" value="ano" />
        </form>'; 
   } else {
       echo $okHlaska;
   }
?>


<?php /*

Tento soubor je součástí ukázkových kódů ke knize Programování WWW stránek pro úplné začátečníky. 
Více informaci o knize naleznete na adrese http://knihy.cpress.cz/k1868. 

© 2011 Všechna práva vyhrazena.

*/ ?>
Davex
Profil
Je to tím, že je v konfiguraci PHP zapnuté zobrazování upozornění na drobné prohřešky a při samostatném spuštění není naplněno pole $_POST.

Vypisování upozornění si můžeš vypnout v souboru php.ini na řádku error_reporting = nebo přímo ve skriptu
error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT);

Kdyby ta kniha byla deset let stará, tak bych to chápal, ale jestli je z loňského roku a všechny příklady vypadají podobně, tak bude mít vhodnější použití třeba jako podložka pod monitor.
f.soft
Profil *
Díky, ale to nepomáhá.


a doporučil bys mi nějakou jinou knihu?
Díky
Davex
Profil
f.soft:
Díky, ale to nepomáhá.
Na úplném začátku skriptu by to mělo fungovat 100%.
<?php
  error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT);

Jinak koukám, že nejsi první, kdo má s příklady z této knihy úplně stejné problémy a můžeš se poučit i tam - Nefunkční materiály ke knize, PHP začátečník - undefined index problém.

doporučil bys mi nějakou jinou knihu?
Problém papírových knih o programování v PHP je ten, že hrozně rychle zastarávají. Zkus prohledat tuto diskusi. Už se tu několikrát vhodná kniha pro začátečníka hledala.

Jak začít s PHP
Doporučení knihy na učení PHP
Výběr knihy pro začátečníka

Nebo si můžeš počkat, až Joker a pár ostatních z této diskuse dopíše novou učebnici PHP.

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: