Avatar
Michal Kuba
Redaktor
Avatar
Michal Kuba:

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):

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
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Michal Kuba:

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:

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:

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:

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:

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:

ú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:

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:

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:

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:

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:
<?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):

A když dáš

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

co ti to vypíše?

 
Nahoru Odpovědět 20.10.2014 17:05
Avatar
BlugW
Redaktor
Avatar
Odpovídá na Michal Kuba
BlugW:
$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
Pořiď si mac na www.appletrh.cz. Novinky a zajímavosti ze světa Apple na https://www.applemagazin.eu
Avatar
Ori
Člen
Avatar
Odpovídá na BlugW
Ori:

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:

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 BlugW
Michal Kuba:

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):

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

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

Ří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):

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
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Michal Kuba:

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):

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
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Michal Kuba:

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:

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:

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):
if ($terminy[0][$i]['obsazeno']) {
  echo "obsazeno";
}
 
Nahoru Odpovědět 21.10.2014 15:17
Avatar
Ori
Člen
Avatar
Odpovídá na Michal Kuba
Ori:

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:

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:

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:

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.