Diskuze: Databáze - průběžné bodování - vyhledávání a přepis dat
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 10 zpráv z 10.
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.


Ahoj v PDO by dotaz mohl vypadat nějak takto:
<?php
$query = $pdo->prepare('
UPDATE
uzivatele
SET
body = body + ?
WHERE
jmeno = ?
');
$result = $query->execute([
$_POST['body'],
$_POST['jmeno'],
]);
Díky tomu si nemusíš vytahovat aktuální stav, takže bude mít o dotaz na DB méně.
Také nezapomenout na to, že vkládaná hodnota musí být číslo a pokud se bude pouze přičítat, tak že není záporná, atd..
Aha, nu SQL dotaz bude stejný:
<?php
Db::pripoj('127.0.0.1', 'db_user', 'db_pass', 'db_name');
Db::dotaz('
UPDATE
uzivatele
SET
body = body + ?
WHERE
jmeno = ?
',
[
$_POST['body'],
$_POST['jmeno'],
]
)
Vycházím z tohoto článku:
https://www.itnetwork.cz/…crud-wrapped
a netuším zda jsou ještě nějaké jiné/upravené verze tohoto wrapperu.
Já vycházím z článku: https://www.itnetwork.cz/…sql-ovladace
Takže...
<?php
Db::pripoj('127.0.0.1', 'root', '', 'ks');
Db::dotaz('
UPDATE
body
SET
body = body + ?
WHERE
jmeno = ?
',
[
$_POST['body'],
$_POST['jmeno'],
]
)
?>
<html>
...
Následuje formulář a přes isset ověření, zda je správně
vyplněný.
Výše zmíněný $result se nachází také v té další části?
V mém případě proměnná $result obsahuje návratovou hodnotu metody execute ovladače PDO, ta je logická, takže true nebo false.
Metody místního wrapperu vrací počet ovlivněných řádků, viz. zdrojové kódy z manuálů.
Fomulář vyplním, odešlu, zkontroluje se správnost jeho vyplnění, ale
pořád mám chybu někde na cestě k databázi...
Já vím, asi je tam nějaká
úplně jednoduchá chyba, ale...
<?php
require('Db.php');
Db::pripoj('127.0.0.1', 'root', '', 'ks');
Db::dotaz('
UPDATE
body
SET
body = body + ?
WHERE
jmeno = ?
',
[
$_POST['body'],
$_POST['jmeno'],
]
)
?>
<html>
<head></head>
<body>
<H1>Formulář</H1>
<form method="post">
<p>Jméno<br>
<input type="text" name="jmeno" required></p>
<p>Body<br>
<input type="number" name="body" required> </p>
<input type="submit" name="odeslat" value="Zapsat body">
</form>
<?php
if($_POST) {
if(
isset($_POST['jmeno']) && $_POST['jmeno'] &&
isset($_POST['body']) && $_POST['body'])
{
echo('Body zapsány');
}
else {
echo ("Chyba ve vyplňování formuláře!");
}
}
?>
</body>
</html>
Jestli kód výše odpovídá tvému skutečnému projektu, tak ti to už při prvním spuštění musí vyhazovat error, protože se snažíš ukládat, respektive načítat hodnoty z pole $_POST na indexech, které v tu chvíli vůbec neexistují. Ukládání musí být až v podmínce, kde kontroluješ, jestli jsou body a jméno nastavené, viz upravený kód níže.
<?php
require('Db.php');
Db::pripoj('127.0.0.1', 'root', '', 'ks');
?>
<html>
<head></head>
<body>
<H1>Formulář</H1>
<form method="post">
<p>Jméno<br>
<input type="text" name="jmeno" required></p>
<p>Body<br>
<input type="number" name="body" required> </p>
<input type="submit" name="odeslat" value="Zapsat body">
</form>
<?php
if($_POST) {
if(
isset($_POST['jmeno']) && $_POST['jmeno'] &&
isset($_POST['body']) && $_POST['body'])
{
Db::dotaz('
UPDATE
body
SET
body = body + ?
WHERE
jmeno = ?
',
[
$_POST['body'],
$_POST['jmeno'],
]
);
echo('Body zapsány');
}
else {
echo ("Chyba ve vyplňování formuláře!");
}
}
?>
</body>
</html>
Děkuji, již to funguje
Já to tam původně měla a pak jak jsem řešila připojení databáze... No a
ještě zde byl jeden problém - já body v databázi zapsala nulovou hodnotu,
nikoli jako 0 bodů, tím pádem neměl kód číslo s kterým by pracoval a ke
kterému by zadané body přičetl 
Oběma vám moc děkuji za pomoc!
Zobrazeno 10 zpráv z 10.