Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Wczytywanie treści z MySQL
Forum PHP.pl > Forum > Przedszkole
Mefiuu
Witam. Mam problem polegający na tym, że nie wiem jak się zabrać za pewną rzecz winksmiley.jpg Ogólnie sprawa jest taka, że piszę sobie na swój własny użytek mini CMS (strukturalnie niestety). W bazie mam tabelę "menu" a w niej pola:

- id,
- link,
- nazwa,
- tresc,
- widoczny.

W pliku menu.inc.php pobieram menu:

  1. <?php
  2. mysql_connect('localhost', 'root') or die('Nie połączono!');
  3. mysql_select_db('domowa') or die('Nie wybrano bazy!');
  4.  
  5. $pobierz = mysql_query("SELECT id,link,nazwa,tresc FROM menu WHERE widoczny='tak' ORDER BY id ASC LIMIT 6");
  6.  
  7. echo "<ul>";
  8. while($menu = mysql_fetch_assoc($pobierz)) {
  9. echo "<li><a href=\"".$menu['link']."\">".$menu['nazwa']."</a></li>";
  10. }
  11. echo "</ul>";
  12.  
  13. ?>


W bazie mam zapisane też 3 podstrony tj. index.php, galeria.php oraz kontakt.php, ponieważ one nie powinny być edytowane przez panel (np. w kontakcie mam formularz więc trudno będzie tak zmieniać). Jednak chciałbym dodać możliwość usuwania, edycji oraz dodawania kolejnych podstron (wyświetla ich w pasku tylko 6). Plik menu.inc.php includuję na początku pliku index.php, galeria.php oraz kontakt.php. Za wyświetlenie menu odpowiada linijka:

  1. echo "<li><a href=\"".$menu['link']."\">".$menu['nazwa']."</a></li>";


linki są głównie w stylu ?page=omnie, ?page=informacje, a ponadto 3 linki index.php, galeria.php oraz kontakt.php.

Teraz moje pytanie. Jaki warunek dodać w index.php aby po kliknięciu w daną podstronę wczytało mi jej treść z bazy danych? Tj. jeżeli kliknę np na link index.php?page=omnie to żeby mi wyświetliło dane z pola "o mnie". Próbowałem tak:

  1. <?php
  2. switch($row['link']) {
  3. case $row['nazwa']:
  4. echo $row['tresc'];
  5. break;
  6. case index.php:
  7. // i tu się zatrzymałem.
  8. }
  9. ?>
  10.  


ale mi się to nie widzi i nie działa (w sumie pewnie nie dziwne).

Poza tym, po kliknięciu w link galeria.php powinna otworzyć się galeria. Nie wiem czy zostałem dobrze zrozumiany, ale nie wiem jak to inaczej wytłumaczyć. Dość mi na tym zależy, więc jeśli ktoś pomógłby mi stworzyć warunek to byłbym bardzo wdzięczny. Pozdrawiam
Kasat
  1. if($_GET['page']) {
  2. $nazwa = mysql_escape_string($_GET['page'];
  3.  
  4. //a tu zapytanie odczytujące treść czy coś gdzie nazwa = $nazwa
  5.  
  6. }
  7.  
Mefiuu
Być może to rozwiązanie jest dobre, ale nie wiem czy zostałem dobrze zrozumiany. Przedstawię to inaczej:

Mam w tabeli "menu" 6 rekordów:
Cytat
id | link | nazwa | tresc | widoczny
---------------------------------------------------------------------------------------------
1 | index.php | Główna | Strona Główna | tak
2 | ?page=omnie | O Mnie | Strona o mnie | tak
3 | ?page=dojazd | Dojazd | Informacje o dojeździe | tak
4 | ?page=informacje | Info | Ogólne informacje | tak
5 | galeria.php | Galeria | | tak
6 | kontakt.php | Kontakt | |tak
======================================================


Includuję plik "menu.inc.php" na stronie głównej oraz w "galeria.php" oraz "kontakt.php". Dzięki temu wyświetla mi się ładne menu z odnośnikami:


index.php | index.php?page=omnie | index.php?page=dojazd | index.php?page=informacje | galeria.php | kontakt.php


teraz chciałbym w pliku "index.php" zrobić taki warunek, że jeżeli kliknę w index.php?page=informacje to pojawi mi się tekst : "Ogólne informacje", a jeżeli w index.php?page=dojazd to "Informacje o dojeździe". Myślałem mniej więcej o takim kodzie w pliku "index.php":

  1.  
  2. if ($_GET['page']==$menu['link']) {
  3. echo $menu['tresc']; // treść odpowiednią dla danego rekordu
  4. }
  5.  


Ale tak być nie może, bo nie zadziała, a nawet jeśli to jest sprzeczność bo tak to by wyszło np: ?page=?page=informacje. Chodzi mi o ten warunek, aby on był poprawny, działał i wczytywał podstrony. Nie wiem jak to obrobić.
Kasat
Podałem Ci przecież, za pomocą GET'A można tak zrobić..
Mefiuu
Rzeczywiście, działa taki kod:

  1. <div id="content">
  2. <?php
  3. if($_GET['page']) {
  4. $nazwa = $_GET['page'];
  5. $tresc = mysql_query("SELECT tresc FROM menu WHERE nazwa='$nazwa'");
  6. echo mysql_result($tresc,0,0);
  7. }
  8. else {
  9. $tresc = mysql_query("SELECT tresc FROM menu WHERE id='1'");
  10. echo mysql_result($tresc,0,0);
  11. }
  12. ?>
  13. </div>


Działa na każdej dynamicznej podstronie (nawet dodanej nowej) ale oprócz podstrony "O mnie" - to się nie wczytuje.
Kasat
Cytat(Mefiuu @ 24.08.2010, 17:24:43 ) *
Rzeczywiście, działa taki kod:

  1. <div id="content">
  2. <?php
  3. if($_GET['page']) {
  4. $nazwa = $_GET['page'];
  5. $tresc = mysql_query("SELECT tresc FROM menu WHERE nazwa='$nazwa'");
  6. echo mysql_result($tresc,0,0);
  7. }
  8. else {
  9. $tresc = mysql_query("SELECT tresc FROM menu WHERE id='1'");
  10. echo mysql_result($tresc,0,0);
  11. }
  12. ?>
  13. </div>


Działa na każdej dynamicznej podstronie (nawet dodanej nowej) ale oprócz podstrony "O mnie" - to się nie wczytuje.

No bo znak specjalny jest między o a mnie jest - tak mi się wydaje:P
Musisz wymyślić alternatywę, i nie wiem czemu wywaliłeś zabezpieczenie z mojego postu(?) tongue.gif
Mefiuu
nie ma nic. Jest link "?page=omnie". A na razie ma być tak. bo to jest próba i bez "mysql_real_escape_string". Dopiero później mam filtrować dane. Ale nie wiem czy to jest potrzebne, bo to jest dodawane z panelu admina,. a tam nie każdy ma dostęp winksmiley.jpg
Kasat
to spr. czy w bazie wszystko jest ok, mam na myśli czy w bazie jest omnie, a nie np. o-mnie itp.

Powinno być jeśli treść wczytujesz z bazy a warunek t where `nazwa` = '".$_GET['omnie']."' w tedy łatwo o sql injections.
Mefiuu
Rozchodzi się o to, że nie może być nazwa "O mnie" tylko jak już to "Omnie". Nie może być spacji pomiędzy słowami. Jakoś można to zmienić?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.