PHP a MySQL - Vkladanie dát pomocou formulára
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama

PHP a MySQL - Vkladanie dát pomocou formuláraPHP a MySQL - Vkladanie dát pomocou formulára

 

PHP a MySQL - Vkladanie dát pomocou formulára

Google       Google       28. 6. 2006       40 651×

V dnešnej lekcií si ukážeme, ako jednoducho a ľahko môžeme vkladať naše dáta do databázy MySQL pomocou formulára. Ďalej sa naučíme, ako si správne ošetriť naše dáta pred hacknutím SQL, PHP Injection alebo pred zle zadanými hodnotami.

Reklama
Reklama

V minulej lekcii sme si vytvorili databázu hlavne_mesta, tabuľku mesta a nechali sme si vypísať dáta pomocou funkcie mysql_fetch_array.

Dnes si vytvoríme jednoduchý formulár, ktorý bude obsahovať 3 inputy, do ktorých sa budú vkladať naše záznamy.

Ďalej budeme potrebovať dva PHP súbory. Prvý s názvom databaza.inc.php, kde budú uložené naše dáta, pomocou ktorých sa budeme pripájať k DB. V druhom (pridaj_mesto.php) bude samotný formulár s naším PHP kódom. Takže poďme na to.

databaza.inc.php

".SERVER.") na riadku číslo :".__LINE__."");

//Teraz vyberieme nasu databazu, v pripade chyby si nechame vypisat cislo riadku, //na ktorom sa chyba nachadza aj s popisom
$db=@mysql_select_db(DATABAZA,$connect) or die
("Chyba pripojenia k databáze (".DATABAZA.") na riadku číslo :".__LINE__."");

?>

pridaj_mesto.php

V tomto druhom PHP súbore som počas celej doby používal superglobálne premenné, nakoľko sa nikdy neviem spoľahnúť na to, že direktíva register_globals je nastavená na on.

register_globals môže nadobudnúť implicitnú hodnotu on, alebo off. Vyrobí z premenných track_vars – premenné globálne. Aj keď je táto voľba implicitne zapnutá, v poslednej dobe sa radšej z bezpečnostných dôvodov vypína. Pokial je nastavená na off, treba vždy používať superglobálne premenné, ktoré sú: $_GET, $_POST, $_REQUEST, $_COOKIE,$_SESSION, $_SERVER, $_ENV, $_FILES. Ako zistíme, či je táto voľba zapnutá alebo vypnutá ? Vytvoríme si nový php súbor s obsahom phpinfo();. A tam si nájdeme register_globals a jeho hodnotu.

Takto by mal vyzerať náš formulár po zadaní do prehliadača:

http://localhost/pridaj_mesto.php

Celý script je riešený viacerými podmienkami. Na začiatku som si vytvoril premennú $formular=false; – tá bude vždy ihneď pri spustení. Ďalej nasleduje formulár, do ktorého som, okrem našich 3 základných inputov, vložil aj 2 typu hidden.

\n";
echo "\n"; 
?>

Je to z toho dôvodu, aby sme zabránili náhodnému vloženiu do databázy iným užívateľom. Pretože pokiaľ si niekto pozrie náš zdrojový kód, tak si v ňom veľmi ľahko nájde, že akcia na formuláre je nastavená na

"; 

?>

Čiže: akcia = pridaj_mesto.php?action=pridat

Keby si ho náhodou takto niekto pozrel a do prhliadača by zadal www.stranka.cz/pridaj_mesto.php?action=pridat, mohol by zapísať prázdne údaje do DB, ale to sa nestane, nakoľko to máme tiež ošetrené.

Nasledujúci kód zisťuje, či sa naša akcia rovná tomu, čomu má, teda „pridat“, a ak áno, tak premenná $formular sa nastaví na hodnotu true.

Teraz si overujem nasledujúce veci:

  1. akcia sa musí rovnať „pridat“
  2. premenná $formular musí mať hodnotu „true“
  3. náš skrytý typ hidden s názvom „formular“sa musí rovnať „OK“
  4. a nakoniec posledný skrytý typ hidden s názvom „session“ by sa mal rovnať hodnote session, ktorá bola inicializovaná ihneď na začiatku stránky

Ak tieto 4 pravidlá platia načítam si naše údaje z DB a môžeme ísť overovať zadané hodnoty z formulára.

Najprv si ošetrím premenné z formulára pred škodlivým HTML kódom:

Teraz si overím, či sa niečo vôbec nachádza v&našom formulári:

Ak sú prázdne tak upozorním užívateľa a script ukončím pomocou zázračného slovíčka „exit“.

Teraz si overím, či mi užívateľ zadal v kolónke počet obyvateľov čísla:

Pokiaľ nie, tak sa mu zobrazí nasledujúci obrázok:

Tak to by bolo asi všetko z overovanie nakoľko si myslím, že pre náš formulár to bohato stačí. Samozrejme existuje mnoho funkcií, ktoré by sa tu dali ešte využiť, to už nechám na vašej fantázii.

Teraz nasleduje validný SQL dotaz na našu DB samozrejme s využitím f-ce magic_quotes_gpc a s ochranou proti SQL Injection.

magic_quotes_gpc môže nadobudnúť hodnotu on alebo off. Všetky špeciálne znaky, ako sú uvodzovky, sú chránené pri spracovávaní metódami GET, POST a COOKIES spätným lomítkom.

Teda pokial by bola táto metóda nastavená na off, tak pomocou PHP funkcií addslashes a htmlspecialchars si tie naše spätné lomítka sami doplníme.

A už len na koniec query dotaz a je to.

Ak všetko prebehlo v poriadku, tak by sme mali vidieť takéto okno:

Celý kód:














       Hlavné Mestá - Formulár



Formulár mesto

"; //Zaciatok tabulky a formulara echo "
\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; //Ukončím tabulku a formular echo "
Štát
Hlavné Mesto
Počet Obyvateľov
Vymazať formulár
Odoslať formulár
\n" ; echo "
\n"; //Ak sa akcia rovna pridat formular je true if ($_GET['action']=='pridat') {$formular=true;}; //A ak platia pravidla naraz pripoj udaje z databazi if ( ($_GET['action']='pridat') and ($formular=true) and($_POST['formular']=='OK') and ($_POST['session']=="".$_SERVER['HTTP_COOKIE']."") ) { require_once "databaza.inc.php"; //Osetrenie proti html kodu $_POST['stat']=htmlspecialchars($_POST['stat']); $_POST['mesto']=htmlspecialchars($_POST['mesto']); $_POST['pocet']=htmlspecialchars($_POST['pocet']); //Overim ci uzivatel nazadal prazdne pole so statom ak hej tak ukoncim if(!($_POST['stat'])) { echo "

Nevyplnili ste pole so štátom.
"; echo "Späť

"; exit;}; //Overim ci uzivatel nazadal prazdne pole s mestom ak hej tak ukoncim if(!($_POST['mesto'])) { echo "

Nevyplnili ste pole s mestom.
"; echo "Späť

"; exit;}; //Overim ci uzivatel nazadal prazdne pole s poctom obyvatelov ak hej tak ukoncim if(!($_POST['pocet'])) { echo "

Nevyplnili ste pole s počtom obyvateľov.
"; echo "Späť

"; exit;} //A nakoniec si overim ze ci je pocet obyvatel typ INT cez reg. vyraz if (!ereg("^[0-9]",$_POST['pocet'])) { // if(!is_int($_POST['pocet'])) { echo "

Zadali ste neplatne číslo (".$_POST['pocet'].").
"; echo "Späť

"; exit;} //Ak je vestko splnene tak sa pustime na to vkladanie //Validny SQL dotaz na vlozeneie do DB s vyuzitim ft magic_quotes_gpc //+ s ochranou proti SQL injectionom $sql="INSERT INTO mesta VALUES( '".addslashes(htmlspecialchars($_POST['mesto']))."', '".addslashes(htmlspecialchars($_POST['stat']))."', '".addslashes(htmlspecialchars($_POST['pocet']))."', '')"; //Query dotaz na DB if ($mysql_query=@mysql_query($sql,$connect)) { //Vypisem udaje uzivatelovy ak je OK query echo "

Vaše údaje boli úspešne vložené do databázy.\n

"; echo ""; echo ""; echo "
"; echo "Štát : ".$_POST['stat']."
"; echo "
"; echo "Mesto : ".$_POST['mesto']."
"; echo "
"; echo "Počet obyvateľov : ".$_POST['pocet']."
"; echo "
"; echo "Späť"; echo "

"; $formular=false; } //Ak je chyba tak upozornim else { echo"

Chyba pri vkladaní dát! Skúste neskôr alebo kontaktujte správcu.
"; echo "Späť

"; $formular=false; } }//Ukoncim akciu s postnutie formularu //Ukončím spojenie s MySQL @mysql_close($connect); $formular=false; ?>

Samozrejme celý zdrojový kód taktiež prikladám ako txt súbor, ktorý si môžete stiahnuť na adrese: http://gulo.wz.cz/data/pridaj_mesto.php.txt

Zhrnutie

Dnes sme sa naučili vkladať dáta do tabuliek prostredníctvom formulára, naučili sme sa, ako si treba správne ošetriť naše dáta z formulára.

V ďalšej lekcii by som vás chcel naučiť, ako si naše dáta vypísať pomocou formulára. Vytvoríme si vyhľadávanie na stránke, ktoré nám bude hľadať naše záznamy uložené v DB.

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

Hlasování bylo ukončeno    
0 hlasů
Google
Autor je študentom Masarykovej univerzity v Brne s odborom Aplikovaná Informatika. Medzi zaľuby patrí práca s PHP & MySQL, JAVA a práca s hudbou.

Nové články

Reklama
Reklama
Obrázek ke článku Bezrealitky.cz na novém webu rychleji propojí vážné zájemce s majiteli nemovitostí

Bezrealitky.cz na novém webu rychleji propojí vážné zájemce s majiteli nemovitostí

Největší platforma pro přímý prodej a pronájem domů a bytů Bezrealitky.cz představila novou podobu svého portálu. Redesign zásadně zjednodušuje všechny transakce, mění způsob, jakým zájemci o bydlení komunikují s majiteli nemovitostí, přináší nejpřesnější filtrování nabídek na trhu, ale také umožňuje prověřovat důvěryhodnost zájemců. 

Obrázek ke článku Samba.ai: Personalizační nástroje hlásí připravenost na GDPR

Samba.ai: Personalizační nástroje hlásí připravenost na GDPR

Do ostrého nasazení nařízení GDPR, které upravuje nakládání s osobními údaji, zbývá pár dní, a vzbuzuje vrásky u řady provozovatelů služeb, které pracují s profilací návštěvníků na stránkách a personalizací obsahu. Český personalizační nástroj Samba.ai(dříve Yottly) zajišťující personalizaci webu a prediktivní automatizaci email marketingu je však slovy svého CEO Davida Vyskočila na GDPR plně připraveno. 

Obrázek ke článku Jak se liší metody šifrování dat?

Jak se liší metody šifrování dat?

Jaké výhody má celodiskové a souborové šifrování? A co vám přinese šifrování virtuálního disku? Ochranu důležitých dat řeší firmy různě. Mohou využít přístupových práv, zálohování, VPN nebo šifrování. Právě šifrování považují odborníci na kybernetickou bezpečnost za nejspolehlivější řešení.

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032018 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý