Jump to content

návod PHP a MySQL Práce s tabulky


Guest Dvora21

Recommended Posts

Dnes jsem se rozhodl že jsem něco napíšu. A rozhodl jsem se že vám ukážu jak se pracuje s tabulky. Tak se nato vrhnem.

 

1. Připojeník DB

Pozor tento článek předpokládá ,že znáte alespoň základy PHP

 

Existuje mnoho databází jako třeba PostgreSQL, MSSQL LiteSQL. A co že to SQL je? Je to anglická zkratka Structured Query Language, což v překladu je Uspořádaný dotazovací jazyk. V tomto članku, ale bude řeč o MySQL, protože se jedná asi o nejrozšířenější databázi na světě. Je velmi rychlá a celkem rychle se vyvíjí.

 

Jenže toto není članek o MySQL, ale o PHP a MySQL, tak se pustím do toho slíbeného PHP. Připojení se provádí přes funkci mysql_connect() , kde se přihlašuje k databázovému serveru a následně se zadává mysql_select_db() , kde se připojuje přímo ke konkrétní databázi. Dost řečí a rovnou si ukážeme zdrojový kód.

 

 <?php
$host="server";
$user="uzivatel";
$pw="heslo";
$db="databaze";

mysql_connect($host, $user, $pw);
mysql_select_db($db);
?> 

 

Kde $host je hostující server, kde je nainstalovaná databáze může být např. mysql.server.cz nebo localhost, $user je uživatelské jméno, pod kterým se připojujete, $pw je uživatelské heslo (pokud žádné není nastaveno napíše se jen "") a $db je zvolení určité databáze.

 

K databázi se můžete připojit také přes příkaz mysql_pconnect() , kde syntaxe je stejná. Jediný rozdíl je v tom ,že spojení s databází se po ukončení skriptu neuzavře a musí se uzavřít přes příkaz mysql_close().

 

2. Čteme data

 

Bude to o tom jak se dají přes PHP získat uložená data v MySQL, ale nejdřív zjistíme co se do databáze dá uložit.

 

Databáze má více typů. Nejčastěji se používá varchar, int, longtext, float, date a pro data např. obrázky se používá blob popř. longblob.

 

Každý typ má své omezení např. varchar může mít pouze 255 znaků ,zatím co longtext může být neomezený. A teď co do toho můžeme vložit. do varchar a longtext můžeme napsat vše text i čísla. Do int se mohou zadávat pouze celá čísla od -2147483648 do +2147483647 a bez znaménka 0 až 4294967295. Float je také typ pro čísla ,ale i s desetinou čárkou. A do BLOB můžeme vložit například obrázek, ovšem při pokusu o zobrazení vám to vyhodí pouze něco jako "rozsypaný čaj" ,ale velmi to zpomaluje databázi.

 

 

Pozn. Jak do databáze vložit tabulku a data najdete skript na konci tohoto článku.

<?
$host="server";
$user="uzivatel";
$pw="heslo";
$db="databaze";

mysql_connect($host, $user, $pw);
mysql_select_db($db);

$vyber=mysql_query("SELECT * FROM `tabulka`");

while ($array=mysql_fetch_array($vyber))
{
echo "Jméno: ".$array['jmeno'];
echo "
";
echo "Príjmení: ".$array['prijmeni'];
echo "
";
echo "E-Mail: ".$array['email'];
echo "";
}
?> 

 

A co to znamená? Začátek je připojení k databázi, to už jsme si vysvětlovali minule. A pak následuje funkce mysql_query() což vlastně vykoná příkaz, podle MySQL syntaxe. SELECT znamená vybrat a ta * je namísto toho abychom museli vypisovat jmeno, prijmeni, email pak následuje FROM což znamená z jaké tabulky se budou data načítat. Jenže mi to potřebujeme roztřídit ale jak? Co třeba to dát do polí jedné proměné. To se udělá mysql_fetch_array(). Já za tu proměnou zvolil $array funkce mysql_fetch_array() mi do polí ,které se jmenují stejně jako sloupce v databázové tabulce načte jejich hodnoty. Jenže jsme musel použít while ,abych načetl všechna data ,kdybych to nepoužil vypíše se mi jen první řádek v tabulce. Takže po vypsání by to mohlo vypadat nějak takhle:

 

Jméno: Petr

Příjmení: Novák

E-Mail: [email protected]


Jméno: Pavel

Příjmení: Čmoud

E-Mail: [email protected]


Jméno: Eva

Příjmení: Koudová

E-Mail: [email protected]


 

Problém bývá pouze se znaky s háčkama a čárkama což znamená ,že ve stejném kódování (např. UTF-8) musíte jak ukládat data tak i načítat.

 

Skript na vlkádání dat jak sem slíbil.

<?
$host="server";
$user="uzivatel";
$pw="heslo";
$db="databaze";

mysql_connect($host, $user, $pw);
mysql_select_db($db);

mysql_connect($host, $user, $pw);
mysql_select_db($db);

mysql_query("CREATE TABLE `tabulka` (`jmeno` VARCHAR(255) NOT NULL, `prijmeni` VARCHAR(255) NOT NULL, `email` VARCHAR(255) NOT NULL) ENGINE = myisam;");

mysql_query("INSERT INTO `tabulka` (`jmeno`, `prijmeni`, `email`) VALUES ('Petr', 'Novák', '[email protected]')");
mysql_query("INSERT INTO `tabulka` (`jmeno`, `prijmeni`, `email`) VALUES ('Pavel', 'Cmoud', '[email protected]')");
mysql_query("INSERT INTO `tabulka` (`jmeno`, `prijmeni`, `email`) VALUES ('Eva', 'Koudová', '[email protected]')");

echo "Dokonceno!";
?> 

 

Takže začátek jsme už probírali i funkci mysql_query(), ale teď nás čeká další MySQL příkaz.

 

CREATE TABLE `tabulka` (`jmeno` VARCHAR(255) NOT NULL, `prijmeni` VARCHAR(255) NOT NULL, `email` VARCHAR(255) NOT NULL) ENGINE = myisam;

 

CREATE TABLE `tabulka` znamená to, že se má vytvořit tabulka se jménem tabulka v závorce následují sloupce v tomto případě první sloupec je jmeno. Poté následuje VARCHAR(255), což znamená typ sloupce (o typech jsme se bavili v minulém díle) číslo v závorce znamená maximální počet znaků a NOT NULL znamená, že sloupec nenabývá hodnoty null což je pro databázi taková neznámá není to ani řetězec, ani číslo. Čárka značí další sloupec v tomto případě prijmeni, a tak to jde dál a dál až do konce, kde je uzavřena závorka a následuje ENGINE = myisam -> MyISAM je typ celé tabulky, je asi nejběžnější v dnešní době, protože např. umožňuje fulltextové vyhledávání. A celé se to zakončí středníkem. Tak to bychom měli k tvorbě tabulky jako takové.

 

A teď ke vkládání záznamů do databáze je to velmi jednoduché. Použije se syntaxe typu:

 

INSERT INTO `do_jake_tabulky` (`vyber_sloupce_1`, `vyber_sloupce_2`, ...) VALUES ('co_se_vklada_do_vybraneho_sloupce_1', 'co_se_vklada_do_vybraneho_sloupce_2', ...)

 

Takže v našem případě je sloupec 1 jmeno sloupec 2 prijmeni a sloupec 3 email. Asi vás zajímá co by se stalo kdyby naše tabulka měla ještě jeden sloupec a my bychom ho neuvedli a prostě bychom nechali databázi ať si sním poradí jak chce. Databáze by udělala jedno, prostě by ho vyplnila defaultní hodnotou. V našem příkladu u vytváření tabulky není žádná defaultní hodnota nastavena v tom případě by se vyplnila prázdným řetězcem.

 

Takže se ještě chvíli vrátíme k tvorbě tabulky, kde ji upravím tak, aby defaultní hodno u jmena 1 u prijmeni 2 a u emailu 3.

 

CREATE TABLE `tabulka` (`jmeno` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '1', `prijmeni` VARCHAR(255) NOT NULL DEFAULT '2', `email` VARCHAR(255) NOT NULL DEFAULT ''3) ENGINE = myisam;

 

Touto změnou jsme dosáhli dvou věcí. Tou první je znaková sada UTF-8 u prvního sloupce. Tou druhou změnou jsme nastavili defaultní výstup tak jak jsme chtěli.

 

Tak a teď vám názorně ukážu to hodnotu default. Dejme tomu že do databáze vložím další řádek příkazem:

 

INSERT INTO `tabulka` (`jmeno`, `email`) VALUES ('Milan', '[email protected]')

 

A teď co se to vlastně do databáze vloží. Vloží se tam přesně toto jako jmeno bude

Milan jako prijmeni bude 2 a email [email protected].

 

3. Změna dat

 

Dejme tomu, že potřebujeme upravit email u Petra Nováka na [email protected]. Celý trik spočívá jen v tom, že použijeme MySQL příkaz UPDATE. Jeho syntaxe je následující:

 

UPDATE `tabulka` SET `sloupec1`='nova_hodnota_sloupce_1', `sloupec2`='nova_hodnota_sloupce_2' WHERE `jmeno_sloupce_1`='hodnota_sloupce_1'

 

Teď to trochu popíšu. UPDATE je příkaz pro databázy, aby věděla, že nechceme vkládat, ale upravovat řádek. Následuje tabulka, to je jako obvykle jméno tabulky, ve které chceme měnit data. SET je v překladu nastavit. Za SET následuje jméno sloupce v tabulce, ve kterém budeme data měnit. Rovná se bychom mohli brát jako "nastav na hodnotu" a nova_hodnota_sloupce je na jakou hodnotu to chceme změnit. Ale nesmíte zapomenout, v jakém typu je zadaný sloupec. Jestli je sloupec typu např. varchar, pak můžete použít normálně slova i s mezerami. Jestliže chcete upravit v jednom řádku více hodnot, vložíte čárku a upravujete další sloupec. Dnes se nám zde objevil ještě jeden nový příkaz WHERE, v překladu je to KDYŽ, což mluví samo za sebe. Protože kdybychom where neuvedli, měnil by se nám první řádek v databázi, ale někdy se prostě musí měnit jiný, doporučuji where uvádět vždy, ikdyž zrovna chcete upravovat první řádek. Nyní si upravování řádku ukážeme v PHP skriptu.

 

<?
$host="server";
$user="uzivatel";
$pw="heslo";
$db="databaze";

mysql_connect($host, $user, $pw);
mysql_select_db($db);

mysql_query("UPDATE `tabulka` SET `email`='[email protected]' WHERE `jmeno`='Petr'");

echo "Dokočeno!";
?> 

 

Tímto jsme dosáhli našeho hlavního cíle, který jsme si na začátku zadali. Toto by pro dnešek stačilo. Příště si ukážeme, jak vymazat řádek z tabulky, nebo jak vymazat data z celé tabulky, či jak smazat celou tabulku.

Link to comment
Share on other sites

  • 2 months later...
  • 4 weeks later...
  • 3 months later...
  • 3 weeks later...
Mel by ses lepe poucit o SQL Injection ;)

aha pouč nás hloupé idioty kde je v tom scriptu nějaká chyba, použitelná pro SQL Injection

 

Ja tam tiež žiadnu nevidím... :d A to Sql moc neviem !

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...