Diskuze: Skutečné naposledy použité ID v DB
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 11 zpráv z 11.
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.
To mas dost zle ak ty musis posielat id. Beries si na seba problemy, ktore
SQL uz perfektne riesi.
Ak je id nastavene v tabulke ako autoincrement, tak nemusis posielat id. SQL si
sam nastavi dalsiu hodnotu. Vzapeti si mozes vypytat svoje
lastInsertedId.Takze mozes pracovat s novym id.
Buď getLastID, nebo pokud to chceš mít v dotazu tak takto
SELECT *
FROM inzeraty
ORDER BY inzeraty_id DESC
LIMIT 1;
Tohle právě bere poslední existující záznam, takhle to mam teď. Když poslední smažu tak to do URL dává jiné číslo.než do AI sloupce ID
Hoď sem blok kódu
Nicméně je mi divný že by ti to takhle házelo jiný čísla. Do url by
mělo být možný to přímo z databáze vytáhnout dotazem na ID. Navíc
poslední použitý ID by mělo bejt to nejvyšší.
Bere to největší ID v databázi, když nějaký záznam ale vymažu (poslední) tak nový řádek se vytvoří s dobrým ID, ale do url to ukládám "ručně" a tam beru poslední ID + 1..
Tohle je kontroler podávající inzerát, část:
if ($_POST)
{$id=$spravceInzeratu->aktualniID();
$id=$id['ID']+1;
$_SESSION['inzerat']= $inzerat = array(
'ID' => $_POST["ID"],
'titulek' => $_POST['titulek'],
'obrazek' => $_FILES['obrazek'],
'url'=>$this->upravTitulek($_POST['titulek']).'-'. $id ,
'text' => $_POST["text"],
'kategorie' => $_POST["kategorie"],
'upresneni' => $_POST['upresneni_' . $_POST['kategorie']],
'mesto' => $_POST["mesto"],
'autor' => $_SESSION['uzivatel']['login']);
takhle vypadá metoda v modelu:
public function aktualniID(){
$res= Db::dotazJeden('SELECT ID FROM inzeraty ORDER BY `ID` DESC LIMIT 1');
return $res;
}
Když prostě mám tři položky v db, poslední má ID 345 a já ji vymažu, udělám nový inzerát, tak ten nový si uloží ID 346, ale do url to už vkládám tak, že vezmu nejvyšší ID (tím je ted už např: 344) a přičtu 1 - takže v url pak mám jiné číslo než v ID..
Jestli tenhle blok posílá data novýho inzerátu do databáze, pak by sis ID mohl vytáhnout z už existujícího záznamu. Napadá mě třeba tady vynechat id a poslat ty data jako novej záznam. Pak se ptát jestli je nastavená session['inzerat']. Pokud jo, pak zkontrolovat, zda nejnovější záznam v databázi odpovídá tomu co máš v tý session, a pokud jo, tak si vytáhnout nejvyšší ID z databáze a rovnou třeba přes header přesměrovat na ten inzerát.
Vim...moc teoretický 
I trochu složitý. Nechám to zatím takto, budu doufat v to, že až to
bude v provozu tak ty inzeráty nebudou mizet tak rychle, spíš se nebudou
mazat poslední vložené a bude to v pořádku 
Taková dobrá rada, která se týká nějaké obecné teorie o databázích - nikdy nic nemaž. Pokud něco potřebuješ smazat, tak si tam udělej sloupec, třeba s názvem "active" a defaultní hodnotou 1 s tím, že když to člověk bude chtít smazat, tak do toho sloupce nastavíš hodnotu 0. Hodnotu tohohle sloupce taky budeš kontrolovat při výběru z databáze (jak nějakého výpisu inzerátů, tak při linku na konkrétní inzerát). Ono být uživatelem, uložit si nějaký inzerát do záložek a přijít druhý den a vidět na stejné adrese úplně jiný inzerát je dost matoucí, o SEO ani nemluvě.
Co takhle mít ještě jednu tabulku, kde si budeš ukládat různý data, tudíž tabulka se sloupcema něco jako:
ID | NAME | CONTENT
a tam si uložíš jeden záznam, kterej budeš vždy aktualizovat a bude něco jako:
ID se vyplní samo, Name bude třeba AdvertCount a jako Content dosadíš na začátku číslo 0 a při každym novym inzerátu ho zvětšíš o jedna, tudíž budeš mít vždy aktuální číslo inzerátu...
No jo, ale takhle se mi databáze přeplní.. Můžu si ale udělat funkci, že po třeceti dnech se inzerát kompletně vymaže z db, pokud nebude poslední, ne? Nemám zatím nijak extra velkou db a takhle bych mohl za chvíli skončit..
Zobrazeno 11 zpráv z 11.
