Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

Diskuze: Výpis z databáze

PHP PHP Výpis z databáze American English version English version

Aktivity (1)
Avatar
Michal Kuba
Redaktor
Avatar
Michal Kuba:19.10.2014 23:29

Zdravím.
Opět mám problém při vypisování z databáze. Co může být na této části špatně? V databázi mám skutečně sloupec pojmenovaný "cas" a mám v něm již 20 záznamů.Když jsem odstranil ze začátku <tr><td> tak se v pohodě zobrazí pouze Rezervovat, ostatní ale ne. Nevíte proč?

<table id="vypis">
                               <?php

                                       {
                                               echo('<tr><td>
                                                               <a>
                                                               ' . \htmlspecialchars($terminy['cas']) . '</a>
                                                       ' . Rezervovat);
                                                       if (!empty($_SESSION['uzivatel_admin']))
                                                               echo(' <a href="editor.php' . \htmlspecialchars($termin['cas']) . '">Editovat</a>

                                                               ');
                                               echo('</td></tr>');
                                       }
                               ?>
 
Odpovědět 19.10.2014 23:29
Avatar
Odpovídá na Michal Kuba
Martin Konečný (pavelco1998):19.10.2014 23:59

Zdar,

v první řadě slovo Rezervovat máš mimo řetězec, respektive ti za tím slovem chybí apostrof.
V druhé řadě, na co máš před tou fcí to zpětné lomítko? Asi to ničemu nevadí, spíš by mě to jen zajímalo.

Pokud ti to něco má psát a nevypisuje, zkus někam hodit

var_dump($terminy["cas"]);
Nahoru Odpovědět 19.10.2014 23:59
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Michal Kuba:20.10.2014 8:55

Zpětné lomítko mi pro jistotu radil NetBeans, ale nebylo to nutné. Za chvíli, až se dostanu na pc zkusím tento kus kódu tam vložit ;-)

 
Nahoru Odpovědět 20.10.2014 8:55
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Michal Kuba:20.10.2014 10:00

Když jsem to upravil do této formy, tak se mi na webu vypíše NULL a poté Rezervovat, přitom sloupec "cas" mám vyplněný dvaceti záznamy..

 
Nahoru Odpovědět 20.10.2014 10:00
Avatar
Odpovídá na Michal Kuba
Michal Štěpánek:20.10.2014 10:21

Podle mě to slovo Rezervovat má být spolu s tím koncem (/a) v apostrofech, nebo je to nějaká proměnná?
myslím si, že to nemá být takto:

' . Rezervovat);

ale takto:

Rezervovat');
Editováno 20.10.2014 10:22
Nahoru Odpovědět 20.10.2014 10:21
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Michal Štěpánek
Michal Kuba:20.10.2014 10:28

Rezervovat je vedlejší, to jsem teď přesunul uplně nahoru nad tabulku, která se mi již podařila zobrazit :) Mám další problém, ale na ten jsme se již ptal do komentáře pod tutoriál.

Jak dosáhnu toho, že výpis z databáze o dvaceti záznamech rozdělím na dva sloupečky vedle sebe po deseti záznamech?

 
Nahoru Odpovědět 20.10.2014 10:28
Avatar
Ori
Člen
Avatar
Odpovídá na Michal Kuba
Ori:20.10.2014 14:14

výsledok z SQL preženieš niečim čo ti to rozdelí na dva stĺpce. Ja v jednom prípade používam toto:

if(count($this->data['vulgarisms']) % 2)
        {
            $in_col = (count($this->data['vulgarisms']) /2) +1;
        }
        else
        {
            $in_col = count($this->data['vulgarisms']) /2;
        }

        $this->data['vulgarisms'] = array_chunk($this->data['vulgarisms'], $in_col);

a potom to vo výpise preženieš foreachom pre vulgarisms[0] pre prvý a vulgarisms[1] pre druhý stĺpec.

Viac info o tej funkcii nájdeš tu http://php.net/…ay-chunk.php

 
Nahoru Odpovědět 20.10.2014 14:14
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Ori
Michal Kuba:20.10.2014 14:21

úplně nevím jaký výsledek máš na mysli. Pokud si zkopíruji tvoji část kódu a patřičně pozměním proměnné, bude to fungovat?

 
Nahoru Odpovědět 20.10.2014 14:21
Avatar
Ori
Člen
Avatar
Ori:20.10.2014 14:49

ach, otázka: Riešiš ako vypísať viac záznamov všeobecne, alebo riešiš ako vypísať tie 2 stĺpce, lebo pokiaľ nevieš ako vypisovať záznamy z DB tak odporúčam tutoriály na devbooku.

Toto hore je len príklad, prečítaj si čo robí funkcia array_chunk a snáď to pochopíš.

 
Nahoru Odpovědět 20.10.2014 14:49
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Ori
Michal Kuba:20.10.2014 14:58

Záznamy mám z databáze vypsané a hledám nějakou jednoduchou a elegantní cestu, jak je vyspat do dvou sloupců po deseti, protože dvacet záznamů pod sebou je dost nepřehledné.

 
Nahoru Odpovědět 20.10.2014 14:58
Avatar
Ori
Člen
Avatar
Ori:20.10.2014 15:12

ukáž aj ten kód, ti napíšem možno rovno riešenie

 
Nahoru Odpovědět  +1 20.10.2014 15:12
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Ori
Michal Kuba:20.10.2014 15:18

Takto vypadá php direktivita na začátku souboru (přístupové udaje jsem vymazal)

<?php
session_start();
require('Db.php');
Db::connect('');

$terminy = \Db::queryAll('
        SELECT *
        FROM terminy
        ORDER BY id
');

?>

No a tohle obslužný php skript uvnitř tabulky :

<table id="vypis">
                               <?php
                    foreach ($terminy as $termin)
                                       {
                                               echo('<tr><td>
                                                               <a>
                                                               ' . \htmlspecialchars($termin["cas"]) . '</a>
                                                       ')  ;

                                               echo('</td></tr>');
                                       }
                               ?>

                       </table>

Pokud mi napíšeš rovnou řešení, budu neskonale vděčný. Ale i za jakoukoliv radu budu rád :)

 
Nahoru Odpovědět 20.10.2014 15:18
Avatar
Ori
Člen
Avatar
Odpovídá na Michal Kuba
Ori:20.10.2014 16:03
<?php
     session_start();
 require('Db.php');
 Db::connect('');

 $terminy = Db::queryAll('
         SELECT *
         FROM terminy
         ORDER BY id
 ');


  $in_col = (count($terminy) % 2) ? (count($terminy) /2) +1 : count($terminy) /2;;

    $terminy = array_chunk($terminy, $in_col);


   //print_r($terminy);


?>
<table id="vypis">
                                <?php
for($i=0;$i<count($terminy[0]);$i++)
{

  echo "<tr>";

  echo "<td>".htmlspecialchars($terminy[0][$i]['cas'])."</td>";
  echo isset($terminy[1][$i]) ? "<td>".htmlspecialchars($terminy[1][$i]['cas'])."</td>" : '';

  echo "</tr>";

}
                                ?>

                        </table>

snáď je to to čo hľadáš

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 20.10.2014 16:03
Avatar
Odpovídá na Michal Kuba
Martin Konečný (pavelco1998):20.10.2014 17:05

A když dáš

echo "<pre>";
var_dump($terminy);

co ti to vypíše?

Nahoru Odpovědět 20.10.2014 17:05
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Bogdan
Redaktor
Avatar
Odpovídá na Michal Kuba
Bogdan:20.10.2014 17:10
$terminy = \Db::queryAll('
         SELECT *
         FROM terminy
         ORDER BY id
 ');

nechápu proč před Db:: máš zpětné lomítko.

 
Nahoru Odpovědět 20.10.2014 17:10
Avatar
Ori
Člen
Avatar
Odpovídá na Bogdan
Ori:20.10.2014 17:45

tak to nechápem ani ja :D mne to IDE dokonca ako chybu vyhodilo :D a to používam spomínaný netbeans :D

 
Nahoru Odpovědět 20.10.2014 17:45
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Ori
Michal Kuba:20.10.2014 18:11

Super, díky, funguje mi to :-) Ještě si s tím vyhraju, aby když kliknu přihlášený jako admin na ten čas, aby mě to dostalo do editoru, abych mohl změnit obsazeno z 0 na 1 třeba. V databázi mám jen pole ID, CAS a OBSAZENO, ale na to snad už určitě přijdu :)

 
Nahoru Odpovědět 20.10.2014 18:11
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Bogdan
Michal Kuba:20.10.2014 18:14

Mě IDE radí, že je tam lepší zpětné lomítko. Ale obyčejně ho tam svoji iniciativou nedávám..

 
Nahoru Odpovědět 20.10.2014 18:14
Avatar
Odpovídá na Michal Kuba
Martin Konečný (pavelco1998):20.10.2014 18:23

Mně to řešení přijde zbytečně komplikovaný. Co ti hodí ten dump?

Nahoru Odpovědět 20.10.2014 18:23
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Michal Kuba:20.10.2014 18:28

Říkám, vypíše to spoustu polí ARRAY[0], ARRAY[1], ARRAY[2]... a hodnoty včetně vypsání obsahu pole 'cas'.. podle mě to neplní funkci správně..

 
Nahoru Odpovědět 20.10.2014 18:28
Avatar
Odpovídá na Michal Kuba
Martin Konečný (pavelco1998):20.10.2014 18:39

Na ten druhej dotaz jsi mi neodpověděl, proto jsem se ptal znovu.
Pokud ti to vypsalo něco ve smyslu

array(
  [0] => array(
    "cas" => "hodnota",
    "jiny_sloupec" => "jina hodnota"
  ),
  [1] => array(
    "cas" => "hodnota",
    "jiny_sloupec" => "jina hodnota"
  ),
  [2] => array(
    "cas" => "hodnota",
    "jiny_sloupec" => "jina hodnota"
  ),
  [3] => array(
    "cas" => "hodnota",
    "jiny_sloupec" => "jina hodnota"
  )
)

tak to musí jít projít tím foreachem.

Nahoru Odpovědět 20.10.2014 18:39
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Michal Kuba:20.10.2014 18:52

Vypsalo mi to něco v tomto smyslu.. můžu tam ještě hodit foreach, ale zatím mi to funguje dobře, tak jak má :)

 
Nahoru Odpovědět 20.10.2014 18:52
Avatar
Odpovídá na Michal Kuba
Martin Konečný (pavelco1998):20.10.2014 18:56

Pokud je ti to jedno, tak to řešit nebudu. Jen mi přišlo, že by na to měl ten jeden foreach stačit namísto kouskování do polí atd :)

Nahoru Odpovědět  +1 20.10.2014 18:56
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Michal Kuba:20.10.2014 19:30

Myslím si to taky, ale prostě foreach mi to nedokázal vypsat a potřebuji to rozchodit co nejdřív :)

 
Nahoru Odpovědět  -1 20.10.2014 19:30
Avatar
Ori
Člen
Avatar
Odpovídá na Michal Kuba
Ori:20.10.2014 20:33

keď to spravíš na foreach, tak klobúk dolu :) ale potom sa nezabudni s nami podeliť, pretože by sa to možno aj mne zišlo. Dlhú dobu som hľadal niečo iné no toto mi prišlo ako jediné rozumné riešenie.

Ono sa to foreachom dá spraviť, ale neviem ako rozumne by si chcel robiť to delenie do dvoch stĺpcov, to foreachom proste nespravíš bez toho aby niekoho z toho potom šľak netrafil :D

 
Nahoru Odpovědět 20.10.2014 20:33
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Ori
Michal Kuba:21.10.2014 14:58

Ještě jedna věc. Chci tam přidat, aby pokud "obsazeno" nabude hodnotu 1, aby se vypsalo Obsazeno a nebo třeba se jen tomu políčku přidala červená barva jako pozadí. Co je na tomhle špatně?

echo "<tr>";

   echo "<td>".htmlspecialchars($terminy[0][$i]['cas']).
           if ($obsazeno=1){
                              echo '<p id="full">'.Obsazeno.'</p>';}"</td>";
   echo isset($terminy[1][$i]) ? "<td>".htmlspecialchars($terminy[1][$i]['cas'])."</td>" : '';

   echo "</tr>";
Editováno 21.10.2014 14:59
 
Nahoru Odpovědět 21.10.2014 14:58
Avatar
Odpovídá na Michal Kuba
Martin Konečný (pavelco1998):21.10.2014 15:17
if ($terminy[0][$i]['obsazeno']) {
  echo "obsazeno";
}
Nahoru Odpovědět 21.10.2014 15:17
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Ori
Člen
Avatar
Odpovídá na Michal Kuba
Ori:21.10.2014 15:48

tak ako píše Martin

 
Nahoru Odpovědět 21.10.2014 15:48
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Michal Kuba:21.10.2014 18:28

Ale bude to fungovat pouze pro obsazeno =1?

 
Nahoru Odpovědět 21.10.2014 18:28
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Michal Kuba:21.10.2014 19:55

Takhle mi to skáče mimo ty buňky, potřebuji to dostat do nich a to za boha nejde.. :/

 
Nahoru Odpovědět 21.10.2014 19:55
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Michal Kuba:21.10.2014 20:05

Upravil jsem si to do této podoby:

for($i=0;$i<count($terminy[0]);$i++)
 {

   echo "<tr>";

   echo "<td>".htmlspecialchars($terminy[0][$i]['cas']).
           "</td>";
   if ($terminy[0][$i]['obsazeno']) {
  echo '<td id="full">'. "Obsazeno"."</td>";
}
 if (!$terminy[0][$i]['obsazeno']) {
  echo '<td id="empty">'. "Volno"."</td>";
}
   echo isset($terminy[1][$i]) ? "<td>".htmlspecialchars($terminy[1][$i]['cas'])."</td>" : '';
   if ($terminy[1][$i]['obsazeno']) {
  echo '<td id="full">'. "Obsazeno"."</td>";
}
if (!$terminy[1][$i]['obsazeno']) {
  echo '<td id="empty">'. "Volno"."</td>";
}
   echo "</tr>";

 }

Jen mi poraďte, když takhle vložím další buňku do toho, tak se mi zruší vycentrování a všechno mi to skáče úplně bokem :/

EDIT:
Už jsem to vyřešil, mám to uprostřed :)

POSLEDNÍ snad otázka. Jde nějak udělat, aby se mi výpis těch dvou sloupečků od sebe vzdálil? Aby to nebylo nalepené tak u sebe, aby se dalo udělat, že před "echo isset" se udělá nějaká mezera. Margin mi na tu tabulku nefunguje.

Editováno 21.10.2014 20:08
 
Nahoru Odpovědět 21.10.2014 20:05
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 31 zpráv z 31.