PHP a MySQL - Vkladanie dát pomocou formulára
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
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       38 893×

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

Obrázek ke článku NEWTON Media prohledá 200  milionů mediálních zpráv během sekund díky Cisco UCS

NEWTON Media prohledá 200 milionů mediálních zpráv během sekund díky Cisco UCS

Česká společnost NEWTON Media provozuje největší archiv mediálních zpráv ve střední a východní Evropě. Mezi její zákazníky patří například ministerstva, evropské instituce nebo komerční firmy z nejrůznějších oborů. NEWTON Media rozesílá svým zákazníkům každý den monitoring médií podle nastavených klíčových slov a nabízí online službu, kde lze vyhledat mediální výstupy v plném znění od roku 1996.

Reklama
Reklama
Obrázek ke článku Delphi 10.1.2 (Berlin Update 2) – na co se můžeme těšit

Delphi 10.1.2 (Berlin Update 2) – na co se můžeme těšit

Touto roční dobou, kdy je zem pokrytá barevným listím a prsty křehnou v mrazivých ránech, se obvykle těšíme na zbrusu novou verzi RAD Studia. Letos si však ale budeme muset počkat na Godzillu a Linux až do jara. Vezměme tedy za vděk alespoň updatem 2 a jelikož dle vyjádření pánů z Embarcadero se budou nové věci objevovat průběžně, pojďme se na to tedy podívat.

Obrázek ke článku Konference: Moderní datová centra pro byznys dneška se koná už 24. 11.

Konference: Moderní datová centra pro byznys dneška se koná už 24. 11.

Stále rostoucí zájem o cloudové služby i maximální důraz na pružnost, spolehlivost a bezpečnost IT vedou k výrazným inovacím v datových centrech. V infrastruktuře datových center hraje stále významnější roli software a stále častěji se lze setkat s hybridními přístupy k jejich budování i provozu.

Obrázek ke článku Konference: Mobilní technologie mají velký potenciál pro byznys

Konference: Mobilní technologie mají velký potenciál pro byznys

Firmy by se podle analytiků společnosti Gartner měly  rychle přizpůsobit skutečnosti, že mobilní technologie už zdaleka nejsou horkou novinkou, ale standardní součástí byznysu. I přesto - nebo možná právě proto - tu nabízejí velký potenciál. Kde tedy jsou ty největší příležitosti? I tomu se bude věnovat již čtvrtý ročník úspěšné konference Mobilní řešení pro business.

loadingtransparent (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý