Autor | Zpráva | ||
---|---|---|---|
diesel_girl Profil |
#1 · Zasláno: 22. 11. 2012, 19:17:46
Zdravím..
Začínám.. teda se snažím začít s něčím víc než HTML a CSS. Koupil jsem si knihu "Programování WWW stránek pro úplné začátečníky" od CPress a ve třetí kapitole jsem narazil na problém. Mám stažené originální soubory ke knize a kontaktní formulář v něm nefunguje. Je to soubor z třetí kapitoly, http://knihy.cpress.cz/programovani-www-stranek-pro-uplne-zacatecniky-d3.html. Vypíše chyby: Notice: Undefined index: jmeno in F:\Programs\xampp-portable\htdocs\03\kontakt.php on line 2 Notice: Undefined index: telefon in F:\Programs\xampp-portable\htdocs\03\kontakt.php on line 3 Notice: Undefined index: email in F:\Programs\xampp-portable\htdocs\03\kontakt.php on line 4 Notice: Undefined index: predmet in F:\Programs\xampp-portable\htdocs\03\kontakt.php on line 5 Notice: Undefined index: zprava in F:\Programs\xampp-portable\htdocs\03\kontakt.php on line 6 Notice: Undefined index: poslat in F:\Programs\xampp-portable\htdocs\03\kontakt.php on line 8 Notice: Undefined variable: okHlaska in F:\Programs\xampp-portable\htdocs\03\kontakt.php on line 83 Notice: Undefined index: kopie in F:\Programs\xampp-portable\htdocs\03\kontakt.php on line 96 Navíc to vůbec nevypadá jako v knize. Předpokládám, že chyba je někde v mém nastavení.. ale kde? Zdrojový kód souboru: <?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 tři 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">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. */ ?> Díky za vše :) |
||
Prochy Profil |
Problém je v tom, že hned na začátku kódu předáváš proměnný, který ani nemusí existovat. Myslim si, že tuto část by si měl mít, až v podmínce, čím si budeš jístý, že daný proměnný existují.
Tohle hoď hned za if: $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']))); Další věc, že v podmínce if($_POST['poslat']) , opět nění jistota, že proměnná existuje, je to možné ověřit podmínkou if(isset($_POST['poslat']) && $_POST['poslat']=='Ano') , kde se vlastně první ověří, jestli proměnná existuje, když jo, tak to ještě porovná. Víc sem to zatím nezkoumal. Jsou to jenom varování, nejsou to errory, ale i tak by si měl mít kód bez varování.
|
||
panther Profil |
#3 · Zasláno: 22. 11. 2012, 21:35:59
Prochy:
„if(isset($_POST['poslat']) && $_POST['poslat']=='Ano')“ ta druhá podmínka už je zbytečná. |
||
peta Profil |
Vsude, kde se vyskytuje $_POST a tech 5 radku nahore to nahrad funkci. Chybi ti tam isset.
function getRequest($key,$default='') {return (isset($_POST[$key]) ? trim(htmlspecialchars(strip_tags($_POST[$key])) : $default;} |
||
Rellik Profil |
#5 · Zasláno: 23. 11. 2012, 15:52:54
Musíš zohlednit to, že kniha už má nějaký ten pátek, a nemění se. PHP se naopak mění a tak funkce které normálně ve starších verzích PHP fungovaly v nových nemusí, nebo je budeš muset upravit tak jako toto.
|
||
Prochy Profil |
#6 · Zasláno: 23. 11. 2012, 17:01:50
Rellik:
Přijde ti, že se PHP od datumu 05.10.2011 nějak zásadně změnilo? Osobně bych se asi z této knížky neučil, když tam mají kód, který hazí Notice. |
||
Rellik Profil |
#7 · Zasláno: 23. 11. 2012, 18:05:27
Jo od té doby se PHP změnilo, možná ne zásadně, ale změnilo. Navíc musíš brát v úvahu to, že knížku nenapíše nikdo za měsíc. Ale trvá to třeba i přes rok a to musíš taky připočítat. Navíc se omezují některé nastavení servrů, které pak dělá tyto "notice"... Taky sem na jednom webu měl nějaké funkce, které fungovaly a po nějaké době co sem se na stránky díval už nefungovaly a nebo to házelo chyby. Přitom se s kódy nic nedělalo...
|
||
diesel_girl Profil |
#8 · Zasláno: 23. 11. 2012, 18:22:16
Prochy: Obojí jsem udělal, errory vypisuje dál..
Peta: Co přesně a kam? Omlouvám se ale jsem fakt začátečník takže absolutně netuším co s tím.. Napadlo mně, nezkoušeli jste to stáhnout a zkusit u vás..? Možná by stálo za to napsat přímo do vydavatelství.. Každopádně děkuju moc. |
||
panther Profil |
#9 · Zasláno: 23. 11. 2012, 18:57:08
diesel_girl:
středníky za apostrofy taky byly v té knize? Ty se tam také nepíší. „Možná by stálo za to napsat přímo do vydavatelství..“ nejsem si jist, jestli tím něco zmůžeš. Knihu přepisovat a přetiskávat pravděpodobně nebudou. „Omlouvám se ale jsem fakt začátečník takže absolutně netuším co s tím“ ... a kopírováním ucelených kusů kódu se ani nic nenaučíš. Máš knihu, i když, stojí za pendrek, co jí takhle procházet od základů a snažit se pochopit základy jazyka? Práci s proměnnými se stejně nevyhneš, ať budeš dělat cokoliv. |
||
diesel_girl Profil |
#10 · Zasláno: 23. 11. 2012, 19:47:01
panther: Všechno tam takhle je..
Asi ji nepřepíšou, ale na webu zveřejňují errata a tohle by možná stálo za zmínku.. Já vím, procházím tu knížku od začátku, základy chápu ale u toho jsem se zasekl. Chtěl jsem si to vyzkoušet, a zjistil jsem že to nejde takže nemůžu ani zkusit udělat něco vlastního na tenhle způsob.. |
||
Rellik Profil |
#11 · Zasláno: 23. 11. 2012, 20:13:07
Z toho prvního kódu co jsi poslal by mělo v podstatě stačit přesunout první řádky 2-6 za podmínku na řádku 8.
|
||
Časová prodleva: 3 dny
|
|||
peta Profil |
diesel_girl:
Funkci definujes hned na zacatku. function getRequest($key,$default='') {return (isset($_POST[$key]) ? trim(htmlspecialchars(strip_tags($_POST[$key])) : $default;} function getRequest($key,$default='') // proste se tam jedna hlavne o to isset {return isset($_POST[$key] ? $_POST[$key] : $default;} Pak vsude, kde se vyskytuje $_POST['promenna'] to prepises na getRequest('promenna') . Kde? Radek 2, 3, 4, 5, 6, 8, 96.
Na roku vydani kopie knizky nezalezi, najdi si rok originalu nebo to reklamuj autorovi. Php jde nastavit tak, aby ti tyto chyby nehlasilo, takze formalne je ten zapis v poradku. Nastesti vetsinou php tak nastavene neni z bezpecnostnich a provoznich duvodu. |
||
Časová prodleva: 11 let
|
0