Diskuze: PDO ovladač
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 15 zpráv z 15.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.


Ta tvá proměnná $sql ale obsahuje pouze dotaz v podobě textového řetězce. Abys zobrazil data, musíš nejdříve dotaz spusit, tj. v článku na to je například Db::queryAll();
Něco jako toto by tedy mohlo fungovat:
$sql= 'select ...';
$mojeData = Db::queryAll($sql);
print_r($mojeData);
Omlouvám se až teďka jsem si všimnul že jsem tam napsal SELECT ale má
tam být INSERT
takže by to vypadalo takle
$sql=('INSERT ...');
echo $sql;
die;
Takže jestli jsem to pochopil zprávně tak by to mělo vypadat nějak takle
$sql = Db::query('INSERT INTO servis_hw (datum,ticket,snhw,typhw,zavadahw,opravahw,opravilhw,oprcenahw) VALUES (NOW(),?,?,?,?,?,"'.$_SESSION[oprava_id].'",?)',
$_POST['ticket'],$_POST['snhw'],$_POST['typhw'],$_POST['zavadahw'],$_POST['opravahw'],$_POST['oprcenahw'] );
$mojeData = Db::queryAll($sql);
print_r ($mojeData);
die;
chci zobrazit data co jsem odeslal do databáze
Někde tady v tom kódu ale bude chyba protože to nic nezobrazí
Děkuji
Nikde chyba není, ty jsi poslal data do databáze, ale žádná jsi nedotazoval. Takže se ti vrátil prázdný result set a queryAll nejspíš vrátí prázdné pole.
Když použiju ten kód co jsem napsal nahoře s insert
$sql=('INSERT ...');
echo $sql;
die;
tak mi echo vypíše toto
INSERT INTO servis_hw (idhw,datum,ticket,snhw,typhw,zavadahw,opravahw,opravilhw,oprcenahw) VALUE (null, NOW(), "S1214","1254a4515","akceptor", "baterie","beterie","1","1200")
Lze udělat stejný výpis i u PDO?
A ještě se zeptam když zadám tento kód
$sql = Db::query('INSERT INTO servis_hw (datum,ticket,snhw,typhw,zavadahw,opravahw,opravilhw,oprcenahw) VALUES (NOW(),?,?,?,?,?,"'.$_SESSION[oprava_id].'",?)',
$_POST['ticket'],$_POST['snhw'],$_POST['typhw'],$_POST['zavadahw'],$_POST['opravahw'],$_POST['oprcenahw'] );
$mojeData = Db::queryAll($sql);
print_r ($mojeData);
die;
tak pokud nevyplním všechny polička ve formuláři tak se mi to odešle do
databáze ale pokud vyplním všechny pole tak se mi to odešle všechno do
databáze OK. POuživám místní wrapper s PDO ovladačem tak nevím jestli je
to wrapperem nebo jestli mám někde něco špatně já.
Děkuji
Nevím, co chceš. Když ty pole nevyplníš, tak budou obsahovat v případě klasických textových inputů prázdný řetězec a ten se samozřejmě bez problémů pošle do databáze. Když ty data předem neošetříš, tak se ti do databáze může dostat cokoliv.
Právě že když to pole v inputu nic nevyplním tak mi to nechce odeslat do
databáze žádny data
ve wrapperu je tato funkce
public static function query($query) {
$statement = self::executeStatement(func_get_args());
return $statement->rowCount();
jestli to nedělá ta funkce func_get_args()
Protože tam děláš nesmysly, předtím jsem si toho nevšiml. Na prvním řádku zavoláš metodu query, která provede insert a vrátí počet ovlivněných řádků, což by mělo být 1. Čeho se snažíš dosáhnout dále voláním metody queryAll? Protože do ní posíláš číslo a to zřejmě moc dobře fungovat nebude. Předpokládám, že nemáš zapnuté zobrazování errorů, tak si ho zapni, může ti pomoct.
Při vkladání do databáze tam mám tento kód
$sql = Db::query('INSERT INTO servis_hw (datum,ticket,snhw,typhw,zavadahw,opravahw,opravilhw,oprcenahw) VALUES (NOW(),?,?,?,?,?,"'.$_SESSION[oprava_id].'",?)',
$_POST['ticket'],$_POST['snhw'],$_POST['typhw'],$_POST['zavadahw'],$_POST['opravahw'],$_POST['oprcenahw'] );
tam ten jsem chtěl použít pouze pro ten výpis dat
ale stejěn pokud nevyplním všechny pole ve formuláři tak se mi formulář
neodešle do databaze
Jinak,
Pokud to všechno uděláš hned pochopíš kde děláš celou dobu chybu...
dokonce i bez pomoci 
tak nejdriv je si treba rict, jak databazi rict, ze chceme ten jeden konkretni radek
pokud jses si 100% jisty, ze treba sloupec ticket je vzdy pro kazdy radek jiny, tak muzes treba takto:
$pocet_radku = Db::query("INSERT INTO servis_hw (datum,ticket,snhw,typhw,zavadahw,opravahw,opravilhw,oprcenahw) VALUES (NOW(),?,?,?,?,?,'".$_SESSION[oprava_id]."',?)",
$_POST['ticket'],$_POST['snhw'],$_POST['typhw'],$_POST['zavadahw'],$_POST['opravahw'],$_POST['oprcenahw'] );
if($pocet_radku > 0) {
$mojeData = Db::queryOne("SELECT datum,ticket,snhw,typhw,zavadahw,opravahw,opravilhw,oprcenahw FROM servis_hw WHERE ticket=?", $_POST['ticket']);
var_dump($mojeData);
} else {
echo '</p style="color:red">Chyba pri ukladani dat do db.</p>';
}
die;
pokud bys do tabulky pridal sloupec id typu INT, s atributem autoincrement, aby se pri vlozeni radku automaticky vlozilo unikatni id radku, tak treba takto:
$pocet_radku = Db::query("INSERT INTO servis_hw (datum,ticket,snhw,typhw,zavadahw,opravahw,opravilhw,oprcenahw) VALUES (NOW(),?,?,?,?,?,'".$_SESSION[oprava_id]."',?)",
$_POST['ticket'],$_POST['snhw'],$_POST['typhw'],$_POST['zavadahw'],$_POST['opravahw'],$_POST['oprcenahw'] );
if($pocet_radku > 0) {
$id = DB::getLastId();
$mojeData = Db::queryOne("SELECT datum,ticket,snhw,typhw,zavadahw,opravahw,opravilhw,oprcenahw FROM servis_hw WHERE id=?", $id);
var_dump($mojeData);
} else {
echo '</p style="color:red">Chyba pri ukladani dat do db.</p>';
}
Zobrazeno 15 zpráv z 15.