Naplnění select boxu z databáze
- spm6
- Člen | 1
Zdar. Tak protože to zde ještě není nebo jsem to nenašel, popíšu vám
nováčkům jako jsem já, jak na to.
Výchozí situace:
- mám v databázi tabulku auto s dvěma sloupci – id, název
id nazev
1 audi
2 skoda
3 fiat
- chci aby se mi v selectu rozbalily názvy a chci aby hodnota předaná dál tím selectem bylo id – v čistém html by to vypadalo takhle:
<select>
<option value=1>audi</option>
<option value=2>skoda</option>
<option value=3>fiat</option>
</select>
Jak to udělám? Dost snadno. Bude mi k tomu stačit pár řádků kódu.
1. věc – dibi. Dibi je framework, který není součástí nette. Značně ulehčuje práci s databázemi oproti mysql_ funkcím čistého PHP. Snadno se používá. Vše potřebné naleznete zde: https://dibiphp.com/cs/quick-start. Stáhněte si dibi do svého www adresáře na serveru.
2. věc – nalinkujte si dibi. Já obecně k linkování používám proměnnou, která směřuje do www složky a tu používám, když je potřeba zadávat někde nějaké umístění.
$root="c:/Program Files/EasyPHP-5.3.8.1/www/";
require $root.'dibi/dibi-minified/dibi.min.php';
3. věc – nastavte si spojení pro dibi
dibi::connect(array(
'driver' => 'mysql',
'host' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'auta',
'charset' => 'utf8',
));
4. věc – vyberte z databáze, co potřebujete
$vysledek = dibi::query('SELECT * FROM [auto]');
5.věc – teď potřebujete z obsahu proměnné $vysledek takovéhle asociativní pole:
$auta = array(
'1' => 'audi',
'2' => 'skoda',
'3' => 'fiat'
)
a to uděláte tímhle příkazem:
$auta = $vysledek->fetchPairs('id', 'nazev');
6. věc – potřebujete už jen v objektu form (viz. dokumentace Formuláře) vytvořit select a jako hodnoty mu zadat asociativní pole.
$form->addSelect('auta', 'Značka auta:', $auta)
->setPrompt('Zvolte značku ');
Hotovo.
Editoval spm6 (11. 10. 2012 19:42)
- Nox
- Člen | 378
Připojení k DB bych dal do samostatného tématu, každopádně:
- Ne do www adresáře, ale do libs
$root="c:/Program Files/EasyPHP-5.3.8.1/www/";
to fakt ne! Když projekt přesuneš kamkoli jinam, přestane fungovat … použít LIBS_DIR
Ale jinak myslim že to pro začátečníka není úplně blbě, samozřejmě configurace líp do config.neon, stačí id, name místo *, ale…