« 1 2
Autor Zpráva
Kos112567
Profil
Že je tam $_POST['obsah'] :) Ten printscreen jsem vytvořil, poté jsem si toho všiml tak jsem to opravil...stále to nešlo, tak jsem ho sem postnul
Lonanek
Profil
tak sem dejte ten upravený kód co nyní nejde.
Keeehi
Profil
Jak ti má někdo poradit, když ukazuješ kódy, které neplatí?
Kos112567
Profil
Tady je
Lonanek
Profil
No přepisovat to nebudu a není to kompletní.
Kos112567
Profil
Není to kompletní? Já tam než toto nemám, myslel jsem si, že o tomto jsme se bavili celou dobu (že nic jiného než tato část kódu není potřeba, aby mi to správně zapisovalo do databáze)
Lonanek
Profil
Pokud je toto celý kód, který to má zabezpečovat, tak tam minimálně chybí načtení Db.php, připojení k databázi a funkce zabezpec().
Kos112567
Profil
Ten kód vypadá stejně, jak jsem postoval předtím

<?php
session_start();
require('Db.php');
$spojeni = Db::connect('127.0.0.1', 'sokolmilicincz1', 'root', ''); //pripojeni k db
if (isset($_GET['clanek'])) //zobrazeni clanku
    $url = $_GET['clanek'];
else
    $url = 'uvod';

$clanek = Db::queryOne('
        SELECT *
        FROM clanky
        WHERE url=?
', $url);

if (!$clanek) //pokud se nenalezne clanek, tak 404
{
    if ($url != 'chyba')
    {
        header('Location: index.php?clanek=chyba');
        exit();
    }
    else
        die('Nebyl nalezen chybovy clanek');
}

if (isset($_GET['odhlasit']))
{
    session_destroy();
    header('Location: index.php');
    exit();
}
function zabezpec($retezec)
{
    global $spojeni;
    return Db::quote($spojeni, $retezec);
}
?>

<!DOCTYPE html>
<html lang="cs-cz">

    <head>
        <meta charset="utf-8" />
        <meta name="description" content="<?= htmlspecialchars($clanek['popisek']) ?>" />
        <meta name="keywords" content="<?= htmlspecialchars($clanek['klicova_slova']) ?>" />
        <link rel="stylesheet" href="styl.css" type="text/css"/>
        <link rel=stylesheet href="style_blue.css" id=css>
        <link rel=stylesheet href="print.css" media="print">
        <title><?= htmlspecialchars($clanek['titulek']) ?></title>
        <script src="js/rozklikavaci_menu.js"></script>
        <script src="js/switcher.js"></script>
        <script src="js/checkform.js"></script>
    </head>
    <body>
    <header>
            <div id="logo"><img src="obrazky/sokolMale.png" alt="logo"></div>
            <nav>
                <ul>
                    <li class="aktivni"><a href="index.php">Domů</a></li>
                    <li><a href="sport.php">Sport</a></li>
                    <li><a href="kultura.php">Kultura</a></li>
                    <li><a href="fotogalerie.php">Fotogalerie</a></li>
                    <li><a href="dokumenty.php">Dokumenty</a></li>
                    <li><a href="historie.php">Historie</a></li>
                    <?php
                    if (!isset($_SESSION['id'])) {
                        echo '<a href="prihlaseni.php" class="login">Přihlášení</a>';
                    } else {
                        echo '<a href="index.php?odhlasit" class="login">Odhlásit</a>';
                        echo '<a href="#" class="login">'.htmlspecialchars($_SESSION['uzivatel_jmeno']).'</a>';
                    }
                    ?>
                </ul>
            </nav>
        </header>
    <div id="centrovac">
        <article>

                <header>
                    <h1><?= htmlspecialchars($clanek['titulek']) ?></h1>
                </header>
            
                <section>
                    <?= $clanek['obsah'] ?>
                </section>
                <div class="cistic"></div>
        </article>
    </div>
    <?php
    if (!isset($_SESSION['id'])) {
        echo 'Pro komentování článků se prosím <a href="prihlaseni.php">přihlašte</a>';
    }
    else
        if (isset($_POST['autor']) AND isset($_POST['obsah'])) {
            $data_insert['autor'] = zabezpec($_POST['autor']);
            $data_insert['datumvlozeni'] = DATE("Y-m-d");
            $data_insert['obsah'] = zabezpec($_POST["obsah"]);

            Db::insert("nkniha", $data_insert);

      }
    ?>
    <div id="komentare">
     <form action="" method="post" name="formular">
        Vaše jméno:<br>
        <input type="text" name="autor" maxlength="30" size="30" required pattern="[0-9A-Za-z]{3,}" title="Minimální délka jména musí být tři znaky." accesskey="j"><br>
          Váš vzkaz:<br>
        <textarea name="obsah" rows="7" cols="50" wrap="soft" required pattern="[0-9A-Za-z]{2,}" title="Vzkaz musí být delší více jak tři znaky"></textarea><br>
        <input type="submit" value="Ulož do knihy">
    </form>
    </div>


    <footer>
            <a href="prihlaseni.php">Administrace</a>
        </footer>
    </body>
</html>
Keeehi
Profil
Chybí deklarace Db třídy (vím, že jsi to dával dříve), taky funkce zabezpec (tu jsi měl špatně).

Nauč se prosím tě hledat chyby. V tomto případě bys měl pole $data_insert nejdčíve naplnit statickými hodnotami ($data_insert["autor"] = "testovací autor";). Když to projde, víš že v databázové vrstvě problém není. Pak můžeš otestovat ten POST $data_insert["autor"] = $_POST["autor"];, když toto taky projde, tak víš, že problém bude v zabezpec. Pokud někde něco neprojde, tak víš, že je chyba tam.
Lonanek
Profil
Kos112567:
function zabezpec($retezec)
{
    global $spojeni;
    return Db::quote($spojeni, $retezec);
}
opravit:
function zabezpec($retezec)
{
    return Db::quote($retezec);
}

    else
        if (isset($_POST['autor']) AND isset($_POST['obsah'])) {
            $data_insert['autor'] = zabezpec($_POST['autor']);
            $data_insert['datumvlozeni'] = DATE("Y-m-d");
            $data_insert['obsah'] = zabezpec($_POST["obsah"]);
 
            Db::insert("nkniha", $data_insert);
 
      }
pro jistotu opravit:
    else
    {
        if (isset($_POST['autor']) AND isset($_POST['obsah'])) {
            $data_insert['autor'] = zabezpec($_POST['autor']);
            $data_insert['datumvlozeni'] = DATE("Y-m-d");
            $data_insert['obsah'] = zabezpec($_POST["obsah"]);
 
            Db::insert("nkniha", $data_insert);
 
      }
    }
nejsem si zcela jist, zda interpretr vyhodnotí následující podmínku jako jeden řádek.
    else
    {
        if (isset($_POST['autor']) AND isset($_POST['obsah'])) {
            $data_insert['autor'] = zabezpec($_POST['autor']);
            $data_insert['datumvlozeni'] = DATE("Y-m-d");
            $data_insert['obsah'] = zabezpec($_POST["obsah"]);
 
            Db::insert("nkniha", $data_insert);
 
      }
    }

nebo nepoužívat novou funkci - zabezpec() - a přímo napsat:
  else
  {
    if (isset($_POST['autor']) AND isset($_POST['obsah'])) {
      $data_insert['autor'] = Db::quote($_POST['autor']);
      $data_insert['datumvlozeni'] = DATE("Y-m-d");
      $data_insert['obsah'] = Db::quote($_POST["obsah"]);
 
      Db::insert("nkniha", $data_insert);
 
    }
  }



Do proměnných $data_insert['autor'] a $data_insert['obsah'] se vždy plnily prázdnou (neexistují proměnnou $spojeni) hodnotou.
Kos112567
Profil
Ok, už to funguje. Samozřejmě tam byla chyba v té funkci zabezpec().

Mockrát děkuji oběma za trpělivost a ano, máš pravdu že se musím naučit hledat chyby :)
« 1 2

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: