Diskuze: Vypsání textu z db do textarea/input - vkládá nezobrazené znaky
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 9 zpráv z 9.
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í SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.


Jistě, přikládám.
Zde je PHP blok:
if($_POST){
Db::query('
UPDATE stranky
SET name=?, menu=?, obsah=?, zobrazeni=?
WHERE name=?
', $_POST['name'], $_POST['menu'], $_POST['obsah'], $_POST['zobrazeni'], $_GET['edit'] );
header('Location: texty.php');
exit();
}
else if (isset($_GET['edit']))
{
$nactenaStranka = Db::queryOne('
SELECT *
FROM stranky
WHERE name=?
', $_GET['edit']);
$nactenaStranka = $stranka
$_GET['edit']) mám určené v URL.
A zde je HTML:
<form method="post" style="display: block;">
<p>
URL
<br>
<textarea cols="100" rows="2" name="name">
<?php echo htmlspecialchars($stranka['name']) ?>
</textarea>
<p>
Položka v menu
<br>
<textarea cols="100" rows="2" name="menu">
<?php echo htmlspecialchars($stranka['menu']) ?>
</textarea>
<p>
Text stránky
<br>
<textarea cols="100" rows="20" name="obsah">
<?php echo htmlspecialchars($stranka['obsah']) ?>
</textarea>
<p>
Zobrazení stránky
<br>
<input type="text" cols="100" rows="2" name="zobrazeni">
<?php echo htmlspecialchars($stranka['zobrazeni']) ?>
</textarea>
<p>
<button type="submit">Edituj!</button>
</form>
Bylo tam pár věcí, které by byly úplně vytržené z kontextu, snažil jsem se je smazat.
Předem díky
Aha s php nerobím vôbec tak si budeš musieť počkať na iných
Ale lajckým okom sa mi tam
nezdá možno tento riadok $nactenaStranka = $stranka , že si síce niečo
selektneš z DB ale hneď potom do nactenaStranka priradíš niečo iné.
Nope, tím to není. Zkoušel jsem to.
Ach, už jsem na to přišel. Tak to byla opravdu hloupá chyba. Bylo to v tom HTML bloku, (nejspíše) nelze zapsat:
<textarea type="text" cols="100" rows="2" name="zobrazeni">
<?php echo htmlspecialchars($stranka['zobrazeni']) ?>
</textarea>
Je potřeba toto:
<textarea type="text" cols="100" rows="2" name="zobrazeni"><?php echo htmlspecialchars($stranka['zobrazeni']) ?></textarea>
Takže děkuji za snahu.
V čem je to řešení rozdílné? Jestli to napíšu do jednoho řádku nebo do tří musí být přeci jedno, ne? Formátování html textu v kódu nemůže mít vliv na zobrazení stránky...
Domnívám se, že problém byl buďto v enteru nebo tabulátoru, kterým jsem měl kód zarovnaný. Ale jen si to myslím, nejsem profesionál, abych to dokázal říct, ale několikrát jsem to zkoušel, jestli je to tím, a opravdu vždy se mi to potvrdilo.
To je určitě tím.
Prostě do databáze ukládáš všechno, co je mezi značkami <textarea></textarea>, včetně whitespaceů (tj. jak konce řádků, tak tabulátory).
Alternativní řešení je, že to otrimuješ (=odstranění bílých znaků z konce a začátku) při ukládádní.
To můžeš udělat už na straně php,
nebo na straně databáze.
Na straně DB (MySQL) by ten update vypadal nějak takhle:
UPDATE stranky
SET name=trim(?), menu=trim(?), obsah=trim(?), zobrazeni=trim(?)
WHERE name=trim(?)
Zobrazeno 9 zpráv z 9.