Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Matěj Trnka
Člen
Avatar
Matěj Trnka:14.4.2020 12:30

Zdravím,
snažím se vytvořit formulář pro editaci článku - načtu obsah článku a vše vepíšu do polí formuláře. To všechno mi běží do té doby, než poprvé (upravený) text odešlu do databáze. Na prvním obrázku je znázorněn upravený text v jednom z polí. Když ho odešlu, vše proběhne tak, jak mám nastaveno, jen se vyplněná hodnota z obou stran "obalí" nějakými znaky. To je znázorněno na obrázku druhém.

Zkusil jsem: Už jsem zkoušel odstranit bílé znaky - to mi odstranilo i mezery. Ze začátku se při každé další úpravě textu (pokud jsem ty znaky na začátku a na konci nesmazal) počet problémových znaků rozšířil. Když jsem zkusil odstranit místo mezery "tabulátor", problémový znak se pak zobrazil vždy jen jeden na začátku a jeden na konci.

Chci docílit: Potřebuji, aby se text do databáze ukládal bez těchto znaků.

 
Odpovědět
14.4.2020 12:30
Avatar
Odpovídá na Matěj Trnka
Matúš Olejník:14.4.2020 14:10

Ahoj, asi by to chcelo aj nejakú ukážku kódu :)

Nahoru Odpovědět
14.4.2020 14:10
/* I am not sure why this works but it fixes the problem */
Avatar
Matěj Trnka
Člen
Avatar
Matěj Trnka:14.4.2020 14:37

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

 
Nahoru Odpovědět
14.4.2020 14:37
Avatar
Odpovídá na Matěj Trnka
Matúš Olejník:14.4.2020 14:52

Aha s php nerobím vôbec tak si budeš musieť počkať na iných :D 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é.

Nahoru Odpovědět
14.4.2020 14:52
/* I am not sure why this works but it fixes the problem */
Avatar
Matěj Trnka
Člen
Avatar
Matěj Trnka:14.4.2020 15:07

Nope, tím to není. Zkoušel jsem to.

 
Nahoru Odpovědět
14.4.2020 15:07
Avatar
Matěj Trnka
Člen
Avatar
Matěj Trnka:14.4.2020 15:14

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.

Akceptované řešení
+5 Zkušeností
Řešení problému
 
Nahoru Odpovědět
14.4.2020 15:14
Avatar
Odpovídá na Matěj Trnka
Michal Štěpánek:14.4.2020 18:30

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...

Nahoru Odpovědět
14.4.2020 18:30
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Matěj Trnka
Člen
Avatar
Odpovídá na Michal Štěpánek
Matěj Trnka:14.4.2020 18:53

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.

 
Nahoru Odpovědět
14.4.2020 18:53
Avatar
Bugmaster
Člen
Avatar
Odpovídá na Matěj Trnka
Bugmaster:17.4.2020 22:17

To je určitě tím.

Prostě do databáze ukládáš všechno, co je mezi značkami <textarea></tex­tarea>, 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(?)
 
Nahoru Odpovědět
17.4.2020 22:17
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.