jaka funkcja do wyświetlania kodu w zależności od wyniku zapytania

0

Witam,

Nie mam pojęcia jak zrobić, aby dla każdego wyniki z pętli while można było przypisać dany kawałek kodu html ze zmiennymi z danego zapytanie, dla przykładu:

$sql = "SELECT * FROM strony, modules
WHERE strony.id=modules.kotwica_strony
AND strony.id like '2'
ORDER BY modules.kolejnosc";
        $result = mysql_query($sql);

  while($row = mysql_fetch_array($result)){
                $id = $row['id'];
                $tytul = $row['nazwa_modulu'];

i teraz, np w bazie są 3 moduly o nazwie 1,2,3 co zrobić, żeby w przypadku kiedy pętla odczytuje w/g ustawionej kolejności i np. nazwę "1" to żeby wyświetliło przypisany kod html ze zmienną.
np.

$tytul

i żeby pętla szła dalej i wyświetlała kolejne już z innym kodem jaki ustawie.

Próbowałem ze SWITCH, ale to nie idzie ponieważ on sprawdza warunek i wczytuje w dół nie czytając wszystkich CASE i poza tym również nie bierze kolejności wyświetlania (ORDER BY).

0

co do przykładu

<div id="test">$tytul</div>

np. dla kolejnego rekordu o nazwie "2"

<div id="test2">$tytul </div>
0

oczywiscie nie oczekuje gotowego rozwiazania, ale chociaz wskazania funkcji jaka mozna osiagnac cel

0

Jeśli ta dwójka odnosi się do ID pobranego z bazy

 <div id="test2">$tytul </div>

to możesz to zrobić w pętli - jeśli nie to daj jakiś licznik np $positionId = 1 i inkrementuj go w każdym przebiegu pętli wyświetlającej (no i oczywiscie wyswietlaj)

echo sprintf('<div id="test%1$s">%2$s</div>', $id, $tytul);

i analogicznie w przypadku użycia $positionId

0

powiem co chce osiągnąć...

Mam tablice "moduly"
No i jest strona główna, na niej chcę wyświetlać moduły z ORDER BY "kolejnosc" i teraz jest tak, że moduł ma nazwę, np. slider, bloktekstowy.
I teraz jeżeli ktoś do tej strony głównej doda sobie moduł w kolejności (czyli doda go w tablicy moduly) :

  1. slider
  2. bloktekstowy
  3. slider

To żeby pod czas while odczytywania z tablicy modulow gdzie są 3 rekordy, slider, bloktekstowy, slider to żeby w zależności od nazwy wyświetlał przypisany kod html wraz ze zmiennymi z tego rekordu,np. tytuł, podtytuł.
Czyli żeby finalnie było np. tak:


//pierwszy rekord
**<div id="slider">**$tytul**</div>**
//drugi rekord
<div id="bloktesktowy">$tytul</div>
//trzeci rekord
<div id="slider">$tytul</div>

Chodzi mi o to, żeby do danej nazwy modulu był przypisany dany kod html :) mam nadzieje że rozumiesz :P

0

oczywiście tego kodu html będzie wiecej, np. dla slidera chciałbym żeby wyświetlało się to tak:

 <div class="banner-wrapper">
    <div id="myCarousel" class="carousel fade-carousel slide" data-ride="carousel"> 
      <!-- Indicators -->
      <ol class="carousel-indicators">
        <li data-target="#myCarousel" data-slide-to="0" class="active"></li>
        <li data-target="#myCarousel" data-slide-to="1"></li>
        <li data-target="#myCarousel" data-slide-to="2"></li>
        <li data-target="#myCarousel" data-slide-to="3"></li>
      </ol>
      <!-- Wrapper for slides -->
      <div class="carousel-inner" role="listbox">
        <div class="item slides active">
          <div class="slide-1"></div>
          <div class="carousel-text">
            <h1 class="animated1">'.$tytul.'</h1>
            <h3 class="animated2">'.$slogan.'</h3>
            <p class="animated3">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text</p>
            <button class="btn btn-carousel btn-lg animated4">Read More <i class="fa fa-caret-right" aria-hidden="true"></i></button>
          </div>
        </div>
        
        </div>
      </div>
    </div>
   </div>

dla modulu o innej nazwie całkowicie co innego, ale żeby można było z zapytania while do każdego stosować zmienne z danego rekordu

0
$numer = 1;
$sql = "SELECT * FROM strony, modules
WHERE strony.id=modules.kotwica_strony
AND strony.id like '2'
ORDER BY modules.kolejnosc";
        $result = mysql_query($sql);

  while($row = mysql_fetch_array($result)){
<div id="slider">**$numer++**</div>**
                $id = $row['id'];
                $tytul = $row['nazwa_modulu'];

Jeśli dobrze zrozumiałem.
A tak poza tym. Przejdź na PDO. mysql od wersji php 7.0 nie jest wspierany oraz obsługiwany.

0

tak wiem zrobie to na PDO tylko chciałbym wiedzieć jak to ugryźć, to co pokazałeś to w przypadku numeru, a mi chodzi żeby dopisywał do nazwy jaka jest uzyta jako nazwa modulu

0

prosto mowiac, jezeli modul nazywa sie slider uzyj takiego kodu html, jezeli nazywa sie blogtekstowy uzyj takiego kodu html. i wyswietla wtedy kod pod kodem dla calej tablicy moduly

0
Sumekprog napisał(a):
$numer = 1;
$sql = "SELECT * FROM strony, modules
WHERE strony.id=modules.kotwica_strony
AND strony.id like '2'
ORDER BY modules.kolejnosc";
        $result = mysql_query($sql);

  while($row = mysql_fetch_array($result)){
<div id="slider">**$numer++**</div>**
                $id = $row['id'];
                $tytul = $row['nazwa_modulu'];

Jeśli dobrze zrozumiałem.
A tak poza tym. Przejdź na PDO. mysql od wersji php 7.0 nie jest wspierany oraz obsługiwany.

A tak jak już wspomniałeś o PDO, to mam takie pytanie - czy w nim za każdym razem jak się wykonuj zapytanie trzeba łączyć się z bazą? czy można to zrobić jak np. connection() ?

0
Trzeźwy Programista napisał(a):
Sumekprog napisał(a):
$numer = 1;
$sql = "SELECT * FROM strony, modules
WHERE strony.id=modules.kotwica_strony
AND strony.id like '2'
ORDER BY modules.kolejnosc";
        $result = mysql_query($sql);

  while($row = mysql_fetch_array($result)){
<div id="slider">**$numer++**</div>**
                $id = $row['id'];
                $tytul = $row['nazwa_modulu'];

Jeśli dobrze zrozumiałem.
A tak poza tym. Przejdź na PDO. mysql od wersji php 7.0 nie jest wspierany oraz obsługiwany.

A tak jak już wspomniałeś o PDO, to mam takie pytanie - czy w nim za każdym razem jak się wykonuj zapytanie trzeba łączyć się z bazą? czy można to zrobić jak np. connection() ?

Nie trzeba. Robisz jedną klasę w której łączysz się z bazą i dziedziczysz po kolejnych.

0
Sumekprog napisał(a):
Trzeźwy Programista napisał(a):
Sumekprog napisał(a):
$numer = 1;
$sql = "SELECT * FROM strony, modules
WHERE strony.id=modules.kotwica_strony
AND strony.id like '2'
ORDER BY modules.kolejnosc";
        $result = mysql_query($sql);

  while($row = mysql_fetch_array($result)){
<div id="slider">**$numer++**</div>**
                $id = $row['id'];
                $tytul = $row['nazwa_modulu'];

Jeśli dobrze zrozumiałem.
A tak poza tym. Przejdź na PDO. mysql od wersji php 7.0 nie jest wspierany oraz obsługiwany.

A tak jak już wspomniałeś o PDO, to mam takie pytanie - czy w nim za każdym razem jak się wykonuj zapytanie trzeba łączyć się z bazą? czy można to zrobić jak np. connection() ?

Nie trzeba. Robisz jedną klasę w której łączysz się z bazą i dziedziczysz po kolejnych.

A masz jakiś pomysł albo jak to się robi? że moduł wczytuje swój kod html na stronę ?

0

moze dodac kolumne w tabeli include, ktora bedzie wskazywac na plik ktory nalezy zrobic include przy wywolaniu w petli while ?

0

Nie mam czasu czytać całości, ale po twoim ostatnim poście chce Cie ostrzec przed https://en.wikipedia.org/wiki/File_inclusion_vulnerability

0

A ja powiem inaczej - przede wszystkim zacznij używać OOP, przygotuj odpowiednie klasy, które będą dziedziczyły coś z bazowej klasy moduł i nadpisywały dziedziczoną metodę render() lub coś w tym stylu. Po pobraniu danych z bazy sprawdzaj jaki jest typ danego rekordu - zamiast nazwa_modulu - stosuj lepiej id, a moduły wydziel do osobnej tabeli i powiąż relacją (ustaw też NOT NULL, aby nikt nie dodał rekordu z niestniejącym modułem). Po sprawdzeniu jaki jest moduł - wyświetlaj go za pomocą metody render().
Taki przykładowy mini-kodzik:

        $data          = $databaseHandler->getSomeDataWithPdo();
        $partsToRender = [];
        foreach ($data as $record) {
            $moduleId = $record['module_type_id'];
            $module   = new ModuleFactory($moduleId);
            
            $partsToRender[$moduleId] = $module->render();
        }
        foreach ($partsToRender as $part) {
            echo $part;
        }

Uwagi:

  1. Nie używaj polskich nazw w kolumnach sql, ani w żadnym innym miejscu w kodzie (stringi z komunikatami się nie wliczają w to)
  2. Używaj OOP
  3. Używaj PDO

1 użytkowników online, w tym zalogowanych: 0, gości: 1