Diskuze: MySQLi dotaz

Člen

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


Ahoj, co zatím máš? Máš alespoň SQL dotazy nebo PHP kód? Celé ti to psát nebudu. Pošli, co máš, a uvidíme, co se s tím dá dělat.
Jedná se mi jenom o sérii dotazů na databázi.
Ostatní věci jako je přihlášení k databázi a samotnou databázi mám
hotové.
Dotaz by asi měl vypadat tak, že se nejdříve zeptá databáze jestli už
uživatel existuje
=> pokud ano, přičte počet přihlášení
=> pokud ne, přidá jméno do tabulky a k tomu přidá i počet
přihlášení
Stačil by mi třeba jenom odkaz, kde jsou potřebné věci k provedení dotazů.
No, dobře. Nejprve k té databázové tabulce. Její struktura není zrovna nejlepší. Předpokládám, že je primárním klíčem sloupec "uzivatel". S ním mám hned 3 problémy:
K tvému zadání. Přečti si zdejší základy MySQL, potom bys měl tyto věci ovládat. Jde o jednoduchý SELECT, UPDATE a INSERT. Jestli to potřebuješ dát rychle dohromady, napiš si ještě o SQL dotazy. Každopádně věř, že tak se nic nenaučíš.
https://www.itnetwork.cz/…programovani - je tam tema 'SQL a databáze', tady si tvuj dotaz asi nikdo nevsimne
uprav existujici data = UPDATE
vloz nova data = INSERT
google = mysql query UPDATE INSERT together
A hned z prvni nalezene moznosti vyctu treba takoveto priklady...
INSERT INTO table (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE
name="A", age=19
---
REPLACE into table (id, name, age) values(1, "A", 19)
---
INSERT INTO TABLE (id, name, age) VALUES (1, "A", 19), (2, "B", 17), (3, "C", 22)
ON DUPLICATE KEY UPDATE
name = VALUES (name),
...
---
INSERT INTO table (id,name,age) VALUES('1','Mohammad','21') ON DUPLICATE KEY UPDATE name='Mohammad',age='21'
---
INSERT live-db.table1
SELECT *
FROM test-db.table1 t
ON DUPLICATE KEY UPDATE
ColToUpdate1 = t.ColToUpdate1,
ColToUpdate2 = t.ColToUpdate2,
...
Pozn: Co na tech dotazech je spatne je to, ze id se nastavuje vetsinou jako AUTOINCREMENT, takze by jsi ho nemel pouzivat do INSERTU. Jenom ve vyjimecnych pripadech je to pripustne, kdyz 100% to id neexistuje. Napriklad ms celou tabulku prazdnou.
Děkuji Vám za rady. Vyřešil jsem to už včera asi nějak takto:
$sql = "SELECT `uzivatel` FROM `uzivatele` WHERE `uzivatel` = '$user'";
$dotaz = mysqli_query($mysqli, $sql);
if (mysqli_num_rows($dotaz)==1){
$sql = "UPDATE `uzivatele` SET `pocet_prihlaseni` = `pocet_prihlaseni` + 1, `datum`='$datum' WHERE `uzivatel` = '$user'";
$dotaz = mysqli_query($mysqli, $sql);
}else{
$sql = "INSERT INTO `uzivatele` (`uzivatel`, `pocet_prihlaseni`, `datum`) VALUES ('$user', '1', '$datum')";
$dotaz = mysqli_query($mysqli, $sql);
}
Ale stále nechápu, proč mám přidat sloupec s ID. V sloupci uživatelé přece nebudou duplicity.
PS: nevšiml jsem si, že je zvlášť diskuzní dodělení pro SQL
Co jsem psal výše, bylo pouhé upozornění na fakt, že tohle v praxi není nejlepší. Ono nejde jen o duplicity - problémy budou i s klíči (velikost indexovaných položek) nebo při prosté změně uživatelského jména. Také v případě cizích klíčů to nebude nic moc. Každopádně je to vždy věc toho, kdo dělá návrh, ostatně i on to případně odnese.
K tvému řešení. Je to sice funkční, ale dost nebezpečně řešené. Je třeba využívat předpřipravené dotazy, a tedy data předávat nepřímo (zástupnými znaky). Díky tomu se kód ošetří proti SQL injection. Jak je to možné implementovat dobře ukazují na w3schools.
Zobrazeno 8 zpráv z 8.