Nevím, jak udělat na novou stránku dotaz databáze pro úplně jinou tabulku

DodiseK
Člen | 56
+
0
-

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
+
-1
-

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 | 758
+
+2
-

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)

kocourPB
Člen | 47
+
0
-

Tiez sa priklanam k nazoru to radsej cele prepisat. Hlavne ked vidim, ze v sablone mas prihlasovacie udaje k DB.

$conn = mysqli_connect("**********", "*****", "*******", "*****");
filsedla
Člen | 101
+
0
-

Přihlašovací údaje pak nejsou jenom v šabloně, ale taky v prohlížeči uživatelů.

Kamil Valenta
Člen | 758
+
0
-

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
+
0
-

@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
+
0
-

Prošel sis tutoriál?

  1. Všechno co vypisuje nějaký HTML dej do šablony
  2. 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();
}
  1. Cyklus v šabloně přepiš z whilu na foreach ($rows as $row), jinak by to asi mohlo zůstat
  2. V BanListRepository (model) přepiš volání mysqli_ na PDO nebo rovnou třeba na použití knihovny Nette\Database
DodiseK
Člen | 56
+
0
-

Omlouvám se, ale jak říkám, většina věcí mi dojde až potom. Nemluvě o tom, že v něčem potřebuji podrobnější rozebrání, abych to pochopil.

CZechBoY
Člen | 3608
+
0
-

A potřebuješ to ještě více rozebrat?

DodiseK
Člen | 56
+
0
-

Hele popravdě ano