Nevím, jak udělat na novou stránku dotaz databáze pro úplně jinou tabulku
- DodiseK
- Člen | 56
Ahoj, aktuálně se snažím zprovoznit banlist na mém webu, v dřívějším php (Čistě php soubor, nikoliv Nette) mám tento kód:
<table>
<tr>
<th style="width: auto;">Hráč</th>
<th style="width: auto;">Ban udělil</th>
<th style="width: 386px;">Důvod</th>
<th style="width: 76px">Datum udělení</th>
<th style="width: auto">Trest vyprší</th>
</tr>
<?php
$conn = mysqli_connect("**********", "*****", "*******", "*****");
if ($conn-> connect_error) {
die("Connection failed:".$conn-> connect_error);
}
$sql = "SELECT name, operator, reason, start, end, punishmentType from `Punishments` ORDER BY start DESC";
$result = $conn-> query($sql);
$connStatus = $conn->query($sql);
$numberOfRows = mysqli_num_rows($connStatus);
echo "<span><strong>Celkový počet banů: </strong></span> <strong class='numberOfRows'>$numberOfRows</strong>";
echo "<hr>";
$string = iconv("UTF-8","UTF-8//IGNORE",$string);
if ($result-> num_rows > 0) {
while ($row = $result-> fetch_assoc()) {
if ($row["punishmentType"] == 'BAN') {
echo "<tr><td>". $row["name"];
echo "</td><td>";
echo "<img src=' https://minotar.net/armor/bust/" .$row["operator"]. "/30' width='20' height='20' title='".$row["operator"]."' />";
echo " ";
echo $row["operator"];
echo "</td><td>". $row["reason"];
echo "</td><td>";
echo date('Y-m-d', $row["start"]/1000);
echo "<br>";
echo date('H:i:s', $row["start"]/1000);
echo "</td><td>";
if ($row["end"] == '-1') {
echo "<span class='label label-danger'>Nikdy</span>";
}
else {
echo "<span class='label label-info'>";
echo date('Y-m-d', $row["end"]/1000);
echo " ";
echo date('H:i:s', $row["end"]/1000);
echo "</span>";
}
echo "</td></tr>";
}
if ($row["punishmentType"] == 'TEMP_BAN') {
echo "<tr><td>". $row["name"];
echo "</td><td>";
echo "<img src=' https://minotar.net/armor/bust/" .$row["operator"]. "/30' width='20' height='20' title='".$row["operator"]."' />";
echo " ";
echo $row["operator"];
echo "</td><td>". $row["reason"];
echo "</td><td>";
echo date('Y-m-d', $row["start"]/1000);
echo "<br>";
echo date('H:i:s', $row["start"]/1000);
echo "</td><td>";
if ($row["end"] == '-1') {
echo "<span class='label label-danger'>Nikdy</span>";
}
else {
echo "<span class='label label-info'>";
echo date('Y-m-d', $row["end"]/1000);
echo " ";
echo date('H:i:s', $row["end"]/1000);
echo "</span>";
}
echo "</td></tr>";
}
if ($row["punishmentType"] == 'IP_BAN') {
echo "<tr><td>". $row["name"];
echo "</td><td>";
echo "<img src=' https://minotar.net/armor/bust/" .$row["operator"]. "/30' width='20' height='20' title='".$row["operator"]."' />";
echo " ";
echo $row["operator"];
echo "</td><td>". $row["reason"];
echo "</td><td>";
echo date('Y-m-d', $row["start"]/1000);
echo "<br>";
echo date('H:i:s', $row["start"]/1000);
echo "</td><td>";
if ($row["end"] == '-1') {
echo "<span class='label label-danger'>Nikdy</span>";
}
else {
echo "<span class='label label-info'>";
echo date('Y-m-d', $row["end"]/1000);
echo " ";
echo date('H:i:s', $row["end"]/1000);
echo "</span>";
}
echo "</td></tr>";
}
}
echo "</table>";
}
else {
echo "<tr><td>V</td><td>databázi</td><td>nebyl</td><td>nalezen</td><td>žádný</td><td>trest</td></tr></table>";
}
$conn-> close();
?>
</table>
A ve stránce pro nový banlist (Již Nette) mám tento kód:
{block content}
<div class="col-xs-12 col-md-9" id="contentIsHere">
<h1 n:block="title">Banlist</h1>
{include 'blist.php'}
</div>
{/block}
abych jakoby vložil ten php kód, který je funkční. No, ale ono my to ten kód vypíše v mé stránce… Přikládám screen: https://ctrlv.cz/PPX1
- filsedla
- Člen | 101
Ahoj.
Zkus přejmenovat blist.php
na blist.latte
.
V Latte 2.5 je potřeba PHP kód uvodit pomocí makra {php ...}
,
takže tím nahraď ty standardní značky.
Kdyby to nefungovalo, nebo ti nevyhovovalo, že tím asi ztratíš zvýrazňování syntaxe v editoru, asi bych takový kód v původním stavu uzavřel do komponenty:
{* Latte: *}
{control phpControl}
// Presenter:
protected function createComponentPhpControl()
{
return new PhpControl();
}
// PhpControl:
final class PhpControl extends Nette\Application\UI\Control
{
public function render()
{
require __DIR__ . "/oldCode.php";
}
}
- Kamil Valenta
- Člen | 822
Asi by mohlo fungovat {php include ‚blist.php‘;}, ale netestoval jsem to.
Vlastně bych byl ve Tvém zájmu raději, kdyby to vůbec nešlo a Ty sis v presenteru vyžádal data od modelu, předal do šablony a tam to elegantně vyrenderoval pomocí latte maker. Ten soubor není tak velký, aby se nedal za 15 min přepsat. A věř, bude to stát za to :)
Editoval kamil_v (16. 8. 2019 15:53)
- Kamil Valenta
- Člen | 822
filsedla napsal(a):
Přihlašovací údaje pak nejsou jenom v šabloně, ale taky v prohlížeči uživatelů.
To už asi ne, pokud se mu to php zinterpretuje, předpokládám, že v nevyhodnoceném stavu by to nenechal. A samotný přístup do app/ snad má ošetřený.
Ale nic to nemění na tom, že je celá myšlenka špatně a volá po refactoringu.
- filsedla
- Člen | 101
@DodiseK Aktualizuju, co jsem napsal prvně – uzavírat dlouhý
kód do {php ...}
je asi špatné řešení, protože ho Latte
může nějak zpracovávat, což může vést ke zpomalení nebo
i crashům.
Mně se {php include 'blist.php';}
líbí, vypadá to chytře
:-). Bohužel to nefunguje.
Respektive člověk musí zadat absolutní cestu k php souboru, což je
nepoužitelné.
Editoval filsedla (16. 8. 2019 16:36)
- CZechBoY
- Člen | 3608
Prošel sis tutoriál?
- Všechno co vypisuje nějaký HTML dej do šablony
- Všechno co odněkud bere data dej do modelu
Budeš mít 2 části, ty 2 části spoj v presenteru v render metodě jednim řádkem tzn. něco jako
public function renderDefault(): void
{
$this->template->rows = $this->banListRepository->getAll();
}
- Cyklus v šabloně přepiš z whilu na
foreach ($rows as $row)
, jinak by to asi mohlo zůstat - V BanListRepository (model) přepiš volání mysqli_ na PDO nebo rovnou třeba na použití knihovny Nette\Database