Autor Zpráva
Kos112567
Profil
Ahoj,
měl bych problém s databází - připojuji ke stránce index tabulky z názvem "novinky" a ostatní články jsou z tabulky "clanky" - clanky fungují

Nicméně když si vytvořím nějakou novinky v tabulce "novinky", nepropisuje se mi její obsah do section

Zde je připojení:

<?php

  require('Db.php');
  Db::connect('127.0.0.1', 'sokolmilicincz1', '', '');

  if (isset($_GET['stranka']))
          $url = $_GET['stranka'];
  else
          $url = 'index'; //když nebude definovan klic stranka, pouzije se index

 // Rozhodne se, co se má získat
      if ($url == 'index') {
          $uvod = Db::queryAll('
                  SELECT *
                  FROM novinky
                  WHERE url = ?
          ', 'novinky');
          
          $titulek = "Vítejte na stránkách TJ Sokol Miličín";
         } else {
          $clanek = Db::queryOne('
                  SELECT *
                  FROM clanky
                  WHERE url = ?
          ', $url);

          // Uložení do dvou proměnných
          $titulek = $clanek['titulek'];
          $obsah = $clanek['obsah'];
     }

  if (!$obsah)
  {
          if ($url != 'chyba')
          {
                  header('Location: index.php?stranka=chyba');
                  exit();
          }
          else
                  die('Nebyl nalezen chybovy clanek');
  }

  $stranka = isset($_GET["stranka"]) ? $_GET["stranka"] : "";
  ?>

A zde samotné zobrazení:

<section>
                  
                         
                         <h3><?= htmlspecialchars($titulek) ?></h3>
                         <?= $obsah?>
                         
              </section>


Nevíte někdo, co tam mám blbě?

Předem díky za rady! :)
Alphard
Profil
Novinky vabrané z databáze jsou uloženy do $uvod, ale dále se s touto proměnnou nikde nepracuje.
Kos112567
Profil
Jo, máš pravdu...zkopíroval jsem to sem než jsem to upravil, nicméně když to mám takto

if ($url == 'index') {
          $clanek = Db::queryAll('
                  SELECT *
                  FROM novinky
                  WHERE url = ?
          ', 'novinky');
          
          $titulek = "Vítejte na stránkách TJ Sokol Miličín";
stejně to článek z databáze nenačítá...
Tomáš123
Profil
Kos112567:
Nikde nenapĺňaš premennú $obsah, takže na riadku 32 (v prvom príklade) sa vždy skočí do bloku podmienky. Ako sa to vyhodnotí už nie je podstatné. Pridaj do podmienky to, čo sa máš na riadku 28 a 29.
Kos112567
Profil
Nenaplňuji? Vždyť právě řádky 28 a 29 již podmínce jsou a ty právě naplňují $obsah, nebo ne?

Nebo jakou podmínku konkrétně máš na mysli? Tu na řádku 12?
Tomáš123
Profil
Kos112567:
Na riadku 28 a 29 napĺňaš podmienku, do ktorej sa vstúpi ak sa url != 'index'. V bloku url == 'index' ti toto priradenie chýba.

Z tvojej vety v prvom príspevku som vydedukoval, že články fungujú, teda, že ich obsah sa zobrazuje správne:
připojuji ke stránce index tabulky z názvem "novinky" a ostatní články jsou z tabulky "clanky" - clanky fungují

Ďalej píšeš: „Nicméně když si vytvořím nějakou novinky v tabulce "novinky", nepropisuje se mi její obsah do section“. Predpokladal som, že novinky sa vypisujú na indexovú stránku (t.j. blok podmienky na riadku 12, kde ti chýba priradenie do premennej $obsah).

Navyše na tvojej stránke sa napríklad článok archívu normálne načíta.
Kos112567
Profil
Jo, říkáš to dobře - články fungují, ale novinky (které se vypisují na ten index) ne

Asi jsem blbej, ale pořád tě jaksi nepobírám... :D

Na řádcích 28 a 29 naplňuji proměnné, protože se vyplní if ($url == 'index')
Tomáš123
Profil
Kos112567:
Tu je zjednodušený model priraďovania obsahu do premenných:
if ($url == 'index') { //ak ide o indexovú stránku
  $titulek = "Vítejte na stránkách TJ Sokol Miličín"; //nastavený titulok, ale chýba definícia obsahu
} else {
  $titulek = $clanek['titulek']; //nastavený titulok
  $obsah = $clanek['obsah']; //nastavený obsah
}
Ak sa stránka rovná indexu, obsah nie je priradený. To pravdepodobne spôsobuje problém neexistencie obsahu.
Kos112567
Profil
Aha, už tě asi chápu :)

takže takto?

 if ($url == 'index') {
          $clanek = Db::queryAll('
                  SELECT *
                  FROM novinky
                  WHERE url = ?
          ', 'novinky');
         
          $obsah = $clanek['obsah'];
          $titulek = "Vítejte na stránkách TJ Sokol Miličín";
         } else {
          $clanek = Db::queryOne('
                  SELECT *
                  FROM clanky
                  WHERE url = ?
          ', $url);

         // Uložení do dvou proměnných
          $titulek = $clanek['titulek'];
          $obsah = $clanek['obsah'];

bohužel to stále nefunguje...
Alphard
Profil
Lepší, ale hádám, že queryAll() vrátí na rozdíl od queryOne() vícerozměrné pole.
Kos112567
Profil
Myslel jsem, že queryAll() vrací všechny řádky v tabulce...
Kos112567
Profil
Alphard:
Jak jsi teda myslel více rozměrné pole? Nějak takhle?

$clanky = Db::queryAll('
        SELECT *
        FROM clanky
        WHERE url IN (?, ?, ?)
', $url1, $url2, $url3);

A pak to zobrazím tak?

Článek 1: <?= $clanky[0]['obsah'] ?>
Článek 2: <?= $clanky[1]['obsah'] ?>

To mi asi nepřijde jako úplně nejlepší řešení - když těch novinek bude 20, tak budu mít 20 proměnných?
Tomáš123
Profil
Kos112567:
Môžeš to pole prejsť cyklom. Budeš naraz zvyšovať ukazateľ v poli a číslo článku.
Kos112567
Profil
For teda bude i v tom ifu?

Nebo nebyl bys tak hodný a neukázal by jsi mi to? Nějak se v tom ztrácím... :D
Tomáš123
Profil
Kos112567:
$i = 1;
while($clanky = mysqli_fetch_array(mysqli_query($connection, $sql))) {
  echo "Článok $i: $clanky[$i]['obsah']";
  $i++
}
Neviem pracovať s OOP, takže som to napísal iba ukážkovo pomocou funkcie mysqli_fetch_array(). Snáď je z toho vidieť môj zámer. Pre prípadné problémy s prerábaním sa, prosím, obráť na ostatných členov fóra. Ospravedlňujem sa.
juriad
Profil
Tomáš123:
Chyba. Nesmíš spouštět mysqli_query opakovaně.
$i = 1;
$vysledek = mysqli_query($connection, $sql);
while($clanky = mysqli_fetch_array($vysledek)) {
  echo "Článok $i: " . $clanky[$i]['obsah'];
  $i++
}
Kos112567
Profil
A kam konkrétně mám tyto řádky umístit do kódu? :)
lionel messi
Profil
Kos112567:
A kam konkrétně mám tyto řádky umístit do kódu?
Tam, kde chceš realizovať výpis. Čiže po pripojení k db a ďalšej logike na to potrebnej (napr. až po zostavení SQL dotazu $sql). Ak stále netušíš, koľká bije, ukáž celý kód.
Kos112567
Profil
Bohužel ne :/

Kód vypadá takto:

<?php

  require('Db.php');
  Db::connect('127.0.0.1', 'sokolmilicincz1', 'sokolmilicin.cz', 'heslo');

  if (isset($_GET['stranka']))
          $url = $_GET['stranka'];
  else
          $url = 'index'; //když nebude definovan klic stranka, pouzije se index

 // Rozhodne se, co se má získat
      if ($url == 'index') {
          $clanek = Db::queryAll('
                  SELECT *
                  FROM novinky
                  WHERE url = ?
          ', 'novinky');

          
          
          $obsah = $clanek['obsah'];
          $titulek = "Vítejte na stránkách TJ Sokol Miličín";
         } else {
          $clanek = Db::queryOne('
                  SELECT *
                  FROM clanky
                  WHERE url = ?
          ', $url);

         // Uložení do dvou proměnných
          $titulek = $clanek['titulek'];
          $obsah = $clanek['obsah'];
     }
 
  if (!$obsah)
  {
          if ($url != 'chyba')
          {
                  header('Location: index.php?stranka=chyba');
                  exit();
          }
          else
                  die('Nebyl nalezen chybovy clanek');
  }

  $stranka = isset($_GET["stranka"]) ? $_GET["stranka"] : "";
  ?>
  <!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="css/lightbox.css" type="text/css" media="screen" />
          <script src="js/jquery-1.7.2.min.js"></script>
          <script src="js/jquery-ui-1.8.18.custom.min.js"></script>
          <script src="js/jquery.smooth-scroll.min.js"></script>
          <script src="js/lightbox.js"></script>
         
         <title>Web o TJ Sokol Miličín</title>
         </head>

         <body>
             <!-- kontejner -->
             <div id="kontejner">
                 <div id="hlavicka">
          <header>
                         <a href="index.php"><div id="logo" ><h1>Sokol Miličín</h1></div></a>
                         <nav>
                                 <ul>

                      <li<?php if($stranka == "index") echo " class=\"aktivni\""?>><a href="index.php">Domů</a></li>
                      <li<?php if($stranka == "dok") echo " class=\"aktivni\""?>><a href="index.php?stranka=dok">Dokumenty</a></li>
                      <li<?php if($stranka == "sport") echo " class=\"aktivni\""?>><a href="index.php?stranka=sport">Sport</a></li>
                      <li<?php if($stranka == "kul") echo " class=\"aktivni\""?>><a href="index.php?stranka=kul">Kultura</a></li>
                      <li<?php if($stranka == "foto") echo " class=\"aktivni\""?>><a href="index.php?stranka=foto">Fotogalerie</a></li>
                      <li<?php if($stranka == "hist") echo " class=\"aktivni\""?>><a href="index.php?stranka=hist">Historie</a></li>
                      <li<?php if($stranka == "arch") echo " class=\"aktivni\""?>><a href="index.php?stranka=arch">Archiv</a></li>
                  </ul>
                         </nav>
                 </header>
                </div>
                 <article>
                         

                  <div id="levy_prvek">
                      <header>
                          <h1>Header</h1>



                  <div class="contacts">
                          <h2 class="kontakty">Kontakty</h2>
                          <p>asdasdasd</p>
                          <p>asdasdasd</p>
                          <p>asdasdasd</p>
                          <p>asdasdasd</p>
                          <p>asdasdasd</p>
                      </div>
                      </header>
                  </div>
                  <div id="obsah">
<div id="centrovac">
              <section>
                  
                         
                         <h3><?= htmlspecialchars($titulek) ?></h3>
                         <?= $obsah?>
                         
              </section>
              
                  </div>
              
              <div class=" pravy_prvek">
                  <iframe src="https://www.google.com/calendar/embed?showTitle=0&amp;showPrint=0&amp;showTabs=0&amp;showCalendars=0&amp;showTz=0&amp;height=260&amp;wkst=2&amp;hl=cs&amp;bgcolor=%23cccccc&amp;ctz=Europe%2FPrague" style=" border:solid 1px #777 " width="210" height="260" frameborder="0" scrolling="no"></iframe>            </div>
                  <div class="cistic"></div>
                  </article>
                         
                 
        </div>
        </div>
    <div id="paticka">  
                 <footer>
                     
              Copyright © 2015<br>
              <a href="administrace.php">Administrace</a>
              Michal Koreš
              
                 </footer>
                 </div>
         </body>
  </html>    

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: