PHP - 10. díl – formuláře

Diskuze čtenářů k článku

Ritchie  |  15. 04. 2004 03:11  | 

Možná by bylo vhodnější používat XHTML namísto HTML. Atribut action u tagu form být nejenže může, ale dokonce musí!

Souhlasím  |  Nesouhlasím  |  Odpovědět
Daniel  |  15. 04. 2004 10:49  | 

Pokud atribut action tam neni tak se jedna o prazdne url a podle doporuceni je prazdne url = stejna stranka - takze toho lze hezky vyuzit.

Vic mi vadi ze autorove skripty jsou "hacknutelne" ... teda nebezpecne - ze nekontroluji na pritomnost promenne - bud se ma pouzit normalizace (pro optional):

$a = (isset($_POST['a']))
     ? $_POST['a']
     : 'defaultnihodnota';

nebo pro required:

if (isset($_POST['a']))

   /* ok kod...  */ 
} else
{
   echo 'Chyba xyz'; 
}

Dale tam neni popsany rozdil mezi GET a POST. Na stranky kde se chodi pres POST se pri reloadu (F5) zepta UA jeste chcete poslat data znova = tj. rozdil je mezi tim jestli skript jen neco pocita nebo neco nekde zapisuje (primitivne: odeslani prispevku do diskuze = POST, kolik mi je let kdyz reknu rok narozeni = GET).

RD.

Souhlasím  |  Nesouhlasím  |  Odpovědět
Zorg  |  15. 04. 2004 10:56  | 

Pokus odesíláte data přes POST, tak jsou proměnné v poli $_POST myslím nastavené na prázdnou hodnotu pokud není pole vyplněno. isset() proto pro ně vždycky vrátí true.

Souhlasím  |  Nesouhlasím  |  Odpovědět
Ritchie  |  15. 04. 2004 11:45  | 

isset() pro ně vrátí false, protože nejsou iniciovány. Pokud je ale použijete, tak se chovají jako prázdný řetězec.

Souhlasím  |  Nesouhlasím  |  Odpovědět
Ritchie  |  15. 04. 2004 11:52  | 

Oprava: Ne jako prázdný řetězec, ale jako hodnota NULL. Viz http://cz.php.net/manual/cs/language.types.null.php

Souhlasím  |  Nesouhlasím  |  Odpovědět
Ritchie  |  15. 04. 2004 11:40  | 

Na tu první větu jste přišel jak? Pokud neuvedete u tagu form atribut action, tak dle DTD se jedná o nevalidní dokument (minimálně od HTML 4.01 výše). Jiná věc je, že prohlížeče se zatím chovají, jak jste popsal, ale oporu to nikde nemá, proto se to klidně v budoucnu může změnit (nedokumentovaná funkce). *ML dokumenty (obzvláště XHTML a XML) musí být validní! A učebnice by validitu měla zdůrazňovat.

Hacknutelné jsou, ale ve významu, že je nějaký hacker může vylepšit. Ale že by byly cracknutelné? Máte u mě pivo, pokud server kvůli takovému skriptu cracknete. Vaše kontrola je úplně zmatečná (čti zbytečná). Jediné, co by se dalo vytknout, je chybějící kontrola na číselný typ proměnné.
U obecných proměnných by se ještě po vstupu měla použít funkce stripslashes (kvůli magic quotes gpc) a před výstupem htmlspecialchars.

Metoda GET by se měla používat právě tehdy, pokud chcete výstup (chod) skriptu zpřístupnit i pomocí URL.

Souhlasím  |  Nesouhlasím  |  Odpovědět
puf  |  15. 04. 2004 10:57  | 

nechcete pristi clanek o php venovat session a cookies???
treba jak rozpoznat PC pomoci cookies, nebo predviplnit ten formular pomoci cookies. A vyuziti session...
diky

Souhlasím  |  Nesouhlasím  |  Odpovědět
MartinS  |  15. 04. 2004 11:21  | 

u nas v cechach piseme vyplnit s y.

Souhlasím  |  Nesouhlasím  |  Odpovědět
kaja  |  15. 04. 2004 11:29  | 

uznavam, ze tvrdy to je lepsi, ale sessions a kukis bych taky uvital.

Souhlasím  |  Nesouhlasím  |  Odpovědět
Honza Hučín  |  15. 04. 2004 11:56  | 

Jsem zmaten. V knize Jiřího Koska o PHP (Grada 1999) se uvádí, že PHP v obslužném skriptu automaticky vytvoří proměnné pro všechny prvky formuláře, které mají atribut name, a přiřadí jim hodnotu, s jakou byly z formuláře odeslány. Tedy žádné $a = $_POST["a"] není potřeba?!?
Automatické vytvoření proměnných používám od samého začátku, kdy jsem se naučil PHP, a nikdy jsem s tím neměl problém.

Souhlasím  |  Nesouhlasím  |  Odpovědět
tomask  |  15. 04. 2004 12:19  | 

dokud bude na serveru v nastaveni PHP (php.ini) hodnota:

register_globals = on;

tak vám to fungovat bude. Jakmile tato funkce bude vypnuta, nezbyde vám nic jiného, než k proměným přistupovat přes Superglobální proměnou, jak je uvedeno v příkladu.

Souhlasím  |  Nesouhlasím  |  Odpovědět
Ritchie  |  15. 04. 2004 12:21  | 

Ta kniha je lehce obstarožní. Viz http://www.php.net/manual/en/configuration.directives.php#ini.register-globals

Souhlasím  |  Nesouhlasím  |  Odpovědět
Adam  |  15. 04. 2004 17:55  | 

z bezpecnostnich duvodu je to nedoporuceno

Souhlasím  |  Nesouhlasím  |  Odpovědět
herra, herra  |  06. 10. 2004 15:23  | 

mam prblem, u te kalkulacky na konci, kdy mi to ma vypsat vysledek mi to ten vysledek proste nevypise,vypise se pouze vysledek je a prazdno,  vse mam uplne stejne jak bylo uvadeno, nemohli byste mi prosim rict cim by to mohlo byt? nemam treba nejak spatne nastaveny php server? diky

Souhlasím  |  Nesouhlasím  |  Odpovědět
Tomas  |  15. 11. 2004 10:01  | 

Mam problemek s nacitanim formularoveho pole do promene. Jedna se o textbox do ktereho zadavam sql dotaz.
SELECT Count(*)
FROM `billingBfiles`
WHERE CLG_RESPONSIBLE_PARTY = 2225887640 AND
CLG_CALL_TYPE=08 and
CLG_START_TIME > '2004-11-09 00:00:00' and
CLG_START_TIME < '2004-11-09 23:59:59';

PHP mi to prechrousta do promeny, ale k uvozovkam mi doplni jeste \'

$promena=SELECT Count(*) FROM `billingBfiles` WHERE CLG_RESPONSIBLE_PARTY = 2225887640 AND CLG_CALL_TYPE=08 and CLG_START_TIME > \'2004-11-09 00:00:00\' and CLG_START_TIME < \'2004-11-09 23:59:59\';

jde to odstranit?

Souhlasím  |  Nesouhlasím  |  Odpovědět
Jiper  |  04. 05. 2005 01:16  | 

Mám dotaz k IF v prijmiheslo.php. Jak vytvořím, aby bylo více možností hesla? Zkoušel jsem "if ($heslo == "lokomotiva", "heslo1", "heslo2")", ale dle očekávání to samozřejmě nefungovalo. Několikanásobná možnost IF není popsána ani v 5.díle. Žádám o radu...

Souhlasím  |  Nesouhlasím  |  Odpovědět
Marika  |  21. 07. 2005 22:02  | 

V 5. dile je myslim vysvetleno pouzivani AND a OR (&& a ||). Myslim, ze kdyz napises
if($heslo=="lokomotiva" || $heslo=="heslo1")
tak by to melo fungovat.

Souhlasím  |  Nesouhlasím  |  Odpovědět
Petr  |  15. 09. 2007 15:49  | 

Zdravim zajimalo by me jestli by slo vyresit tu kalkulacku i jinak nez se scitanim.
Je mi jasny ze vsichni zname plno jinejch zpusobu jak udelat kalkulacku ale
zajimal by me tenhle problem :
kalkulacka.html

Zadej první číslo:
Znamenko:
Zadej druhé číslo:



pocitej.php







Zadej další příklad



Jedna se mi o to jak tam vlozit to znamenko aby to fungovalo. Tenhle zapis je evidente spatny:
$vysledek = $prvni $znamenko $druhe;
Prosim napiste jak by jste to resili vy. Diky

Souhlasím  |  Nesouhlasím  |  Odpovědět
Petr  |  15. 09. 2007 16:06  | 

do kalkulacka.html jsem pridal dalsi input na znamenko a v pocitej.php
sem zadal:
$znamenko = $_POST["znamenko"];
Preblem je zde:
$vysledek = $prvni $znamenko $druhe; (Jasne ze to tak nejde jak to budete resit vy ?

Souhlasím  |  Nesouhlasím  |  Odpovědět
Kvaky  |  05. 10. 2007 16:17  | 

Šlo by to udělat přes radio boxy a v php přes podmínky - if ($znamenko =="/") $vysledek = $PrvniCislo / $DruheCislo...atd.
A pak nechat jednoduše zavolat $vysledek přes echo. Pokud ale budete chtít použít jednu stránku (formulář i vyhodnocení najednou) je trochu problém, protože to vypíše Warning: Division by zero což se mi nepovedlo odstranit.

Souhlasím  |  Nesouhlasím  |  Odpovědět
Zasílat názory e-mailem: Zasílat názory Můj názor
Aktuální číslo časopisu Computer

Jak rychlé je nabíjení bez drátů?

Test 11 sluchátek pro hráče

Aplikace, které vám zachrání dovolenou

Kompletní přehled datových tarifů