Autor | Zpráva | ||
---|---|---|---|
Dekker Profil |
#1 · Zasláno: 28. 4. 2016, 17:46:24
Dobrý den
Pořídil jsem si knížku Programování WWW stránek pro úplne začátečníky a ve třetí kapitole se pracuje s kontaktním formulářem, ale to co zpouštím se nechová tak jak by mělo dle knížky i když jsem do scriptu nijak nezasahoval a nevím jak se toho zbavit. Vím proč se to ukazuje, ale mé dosavadní pokusy o odstranení chybové hlášky nepomáhají tak jak bych chtěl. Tady je výpis těch hlášek Notice: Undefined index: jmeno in D:\xampp\htdocs\kniha\03\kontakt.php on line 2 Notice: Undefined index: telefon in D:\xampp\htdocs\kniha\03\kontakt.php on line 3 Notice: Undefined index: email in D:\xampp\htdocs\kniha\03\kontakt.php on line 4 Notice: Undefined index: predmet in D:\xampp\htdocs\kniha\03\kontakt.php on line 5 Notice: Undefined index: zprava in D:\xampp\htdocs\kniha\03\kontakt.php on line 6 Notice: Undefined index: poslat in D:\xampp\htdocs\kniha\03\kontakt.php on line 9 Notice: Undefined index: kopie in D:\xampp\htdocs\kniha\03\kontakt.php on line 94 /> té poslední se dokážu zbavit, ale nechávám ji tu protože když zkouším sestavit potvrzení o tom zda souhlasí či ne tak mi tam stejně vyskočí pokud nezaškrtne správné políčko. Tady je odkaz kde se dá stáhnout původní script knihy.cpress.cz/?p=actions&action=download/file&value=files&id=110358 je to ve složce kniha/03 kontakt.php Děkuji za rady, moc se mi nechce pokračovat v učení z této knížky když originál nepracuje jak by dle obrázků měl. |
||
Lonanek Profil |
Pole uvedených indexů (jmeno, telefon, email, ...) nejsou definována.
Řádky uvádějí kde chyba nastala. Špatně napsaný script. Osobně bych nedostatečně ošetřený kód: <?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']))); <?php $jmeno = $telefon = $email = $predmet = zprava = ""; if (isset($_POST['jmeno'])) $jmeno=trim(htmlspecialchars(strip_tags($_POST['jmeno']))); if (isset($_POST['telefon'])) $telefon=trim(htmlspecialchars(strip_tags($_POST['telefon']))); if (isset($_POST['email'])) $email=trim(htmlspecialchars(strip_tags($_POST['email']))); if (isset($_POST['predmet'])) $predmet=trim(htmlspecialchars(strip_tags($_POST['predmet']))); if (isset($_POST['zprava'])) $zprava=trim(htmlspecialchars(strip_tags($_POST['zprava']))); a ř. 94 (podle výpisu chyby), v originálu je to jiný řádek (96) if($_POST['kopie']=="on"){ echo ' checked="checked"'; }; if(isset($_POST['kopie']) AND $_POST['kopie']=="on"){ echo ' checked="checked"'; }; |
||
Dekker Profil |
a co ten prvotní error Notice: Undefined index: poslat in D:\xampp\htdocs\kniha\03\kontakt.php on line 9. Jsem si ho všiml až teď když ty ostatní zmizeli. Obdobně jako ten s tím checkboxem?
PS: Jop už to jede jak má :). Díky za radu. snad už nebude žádná třeba a zvládnu to nadále sám :D |
||
Lonanek Profil |
Přehlédl jsem jej.
Samozřejmě upravit obdobně jako popisuji opravu ř. 96. Rozumíte tomu co oprava dělá? |
||
Dekker Profil |
#5 · Zasláno: 28. 4. 2016, 18:20:37
Pokud to chápu dobře tak příkaz isset mi umožňuje definovat proměnou bez zásahu do její hodnoty a tudíž ji může následně POST volat jako by nějakou hodnotu měla.
|
||
Lonanek Profil |
Ne, ISSET určuje, zda je proměnná definována (is set => je nastavena?).
Pokud tedy nejsou definovány uvedené proměnné (není odeslán formulář) jsou ponechány prázdné hodnoty, které jsem definoval v prvním kroku (ř.2 uvedené úpravy). |
||
juriad Profil |
#7 · Zasláno: 28. 4. 2016, 18:42:10
Jen co se podívám na zdroják, tak se mi chce brečet. Ta kniha není vůbec dobře napsaná z pohledu technického (prohlédl jsem si i ukázkovou kapitolu). Je zastaralá a učí nebezpečné postupy. Například ten průjem:
$jmeno=trim(htmlspecialchars(strip_tags($_POST['jmeno']))); Základy PHP se naučíš nejlépe na Péhápko: Učebnice PHP. Předpokládám tedy, že HTML už ovládáš. Další český zdroj může být www.itnetwork.cz/php. Žádný zdroj není ideální, ale skoro vždy nové články na internetu jsou lepší než kniha. Pokud alespoň trochu umíš anglicky, nauč se používat oficiální dokumentaci na php.net. |
||
Dekker Profil |
Jo takže ji mohu použít tam kde očekávám nějaké příchozí hodnoty, ale při prvním zpuštění žádné nejsou. Bez toho isset by mi prvotní definování nepomohlo což jsem zkoušel.
Jsem právě úplný nováček a todle vypadalo jako přijatelná volba. Anglicky umím celkem obstojně (číst), tudíž nebude problém, přítelkyně kdyžtak přeloží. Učím se tak nějak za pochodu co je nutné. Koukal jsem se i na ten odkaz jak psát web. Bylo by lepší tedy začít tam a nebo postupovat jiným směrem? Nějaké povědomí o programování obecně mám, jen učitel byl levej a odmítal ustoupit jinejm kteří to uměli a tak nás z C# nic nenaučil. |
||
Lonanek Profil |
#9 · Zasláno: 28. 4. 2016, 18:55:27
Musím jen souhlasit s juriad. Je to hooodně nepovedená kniha.
Reaguji na Dekker: Je to o logice. Zpravidla postačuje zjistit, zda bylo stisknuto tlačítko formuláře. if (isset($_POST['submit'])) Pokud by jste byl dogmatik, pak otestujete všechny "volitelně definované" (ty, které nejsou v kódu definované) proměnné. Záleží na blbuvzdornosti aplikace. Já preferuji ošetření kódu proti blbuvzdornosti, tedy předem eliminovat jakékoliv neočekávané akce uživatele a ty se snažit ošetřit. |
||
Dekker Profil |
#10 · Zasláno: 28. 4. 2016, 19:30:27
takže třeba v případě políčka pro souhlasení s podmínkami by to bylo takto?
<input type="checkbox" name="souhlasim" id="souhlasim" /> <label for="souhlasim">Souhlasím</label> <br /> if(isset ($_POST['souhlasim']) AND $_POST['souhlasim']!="on") { $chyby[]='musíte souhlasit'; }; S logickým myšlením bych neměl mít problém, horší bude poprat se se syntaxí. |
||
Lonanek Profil |
#11 · Zasláno: 28. 4. 2016, 19:44:35
Ano, takto to lze ošetřit.
|
||
juriad Profil |
#12 · Zasláno: 28. 4. 2016, 19:48:18
Chybně!
# od uživatele nepřišlo pole souhlasím nebo obsahuje něco jiného než "on": if (!isset($_POST['souhlasim']) || $_POST['souhlasim'] != "on") { $chyby[] = 'musíte souhlasit'; } // bez středníku |
||
Dekker Profil |
#13 · Zasláno: 28. 4. 2016, 19:58:07
díky. Než nějak pokročím asi bude nejlepší si pročíst nějaké základy html. Snad sem nebudu chodit moc často pro rady.
Všem děkuji za ochotu |
||
Martin2 Profil * |
#14 · Zasláno: 28. 4. 2016, 20:22:42
Knížka to bude asi kvalitní. V ukázkových PHP skriptech jsem nenašel jediný, který by neobsahoval hrubé koncepční nebo bezpečnostní chyby. Být tebou, tak ji hodím do popelnice. A hodně hluboko, aby ji náhodou někdo ještě nevytáhl.
|
||
Časová prodleva: 7 let
|
0