Diskuze: Výpis z databáze
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Tvůrce

Zobrazeno 31 zpráv z 31.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
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"]);
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
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..
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');
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?
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
ú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?
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íš.
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é.
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
<?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áš
A když dáš
echo "<pre>";
var_dump($terminy);
co ti to vypíše?
$terminy = \Db::queryAll('
SELECT *
FROM terminy
ORDER BY id
');
nechápu proč před Db:: máš zpětné lomítko.
tak to nechápem ani ja
mne to IDE dokonca ako chybu vyhodilo
a to používam spomínaný netbeans
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
Mě IDE radí, že je tam lepší zpětné lomítko. Ale obyčejně ho tam svoji iniciativou nedávám..
Mně to řešení přijde zbytečně komplikovaný. Co ti hodí ten dump?
Ří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ě..
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.
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á
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
Myslím si to taky, ale prostě foreach mi to nedokázal vypsat a potřebuji
to rozchodit co nejdřív
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
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>";
if ($terminy[0][$i]['obsazeno']) {
echo "obsazeno";
}
Ale bude to fungovat pouze pro obsazeno =1?
Takhle mi to skáče mimo ty buňky, potřebuji to dostat do nich a to za boha nejde.. :/
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.
Zobrazeno 31 zpráv z 31.