Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Jak wykonać menu
Forum PHP.pl > Forum > Przedszkole
Woytek950
Witam. Jak w temacie.
db:
Cytat
menu kategorie
id | nameCategory | menuName
0 | jakaskategoria | Menu głowne
1 | jakaskads | Menuinne

Cytat
linki
id | nameCategory | linkName
0 | jakaskategoria | link
1 | jakaskads | link
2 | jakaskads | link
3 | jakaskads | link
4 | jakaskads | link
5 | jakaskads | link
6 | jakaskads | link

Chciał bym wykonać skrypt który wypisał by teraz to menu w ten sposób:
Cytat
[ Menu głowne ]
link
[ Menu głowne ]
link
link
link
link
link
link
link

W jaki sposób się za to zabrać?


Dodatkowo chciał bym poinformować iż dane nie mogą być wyświetlone odrazu tylko przekazane w tablicy.(system szablonów i pętla)
r4xz
no to zaczynamy! pierwsza sprawa:
linki
id | nameCategory | linkName
0 | jakaskategoria | link
1 | jakaskads | link
2 | jakaskads | link
3 | jakaskads | link
4 | jakaskads | link
5 (...)

lepiej zastąpić na id odpowiednich kategorii

linki
id | nameCategory | linkName
0 | 0 | link
1 | 1 | link
2 | 1 | link
3 | 1 | link
4 (...)

a teraz sprawa odpowiedniego zapytania do bazy danych.
można to zrobić na kilka sposobów, ale to już odsyłam do jakiegoś kursu sql i intensywnego myślenia winksmiley.jpg
jeśli jednak coś nie będzie działać to podaj przykłady jak próbowałeś, co się udało, a napewno nakierujemy na dobrą stronę smile.gif
Woytek950
Kurcze... tylko jak nadać im to id?
r4xz
ręcznie - wejść do bazy danych i pozmieniać
albo z poziomu kodu dać odpowiednie zapytanie, które zrobi to za nas
Woytek950
Cytat(r4xz @ 23.05.2010, 19:24:16 ) *
ręcznie - wejść do bazy danych i pozmieniać
albo z poziomu kodu dać odpowiednie zapytanie, które zrobi to za nas

Właśnie... Zrobiłem to zanim napisałeś smile.gif

:/ Doszedłem do momentu:
  1. ///////////////////////////////////////
  2. $qu6 = mysql_query("SELECT * FROM menu_types WHERE mask = '0'"); // Tabela z kategoriami
  3. $nr6 = mysql_num_rows($qu6); // zliczanie rekordow
  4.  
  5. for($i=0; $i<$nr6; $i++) // petla do przeszukiwania kategorii
  6. {
  7. $idCategory = mysql_result($qu6,$i,"id"); // ID kategorii
  8. $nameCategory = mysql_result($qu6,$i,"title"); // nazwa kategorii
  9. $menuType = mysql_result($qu6,$i,"menutype"); // nazwa kategorii
  10.  
  11. $arr6[] = $menuType;
  12. }
  13. $howMn = count($arr6);
  14.  
  15.  
  16.  
  17. for($j=0; $j<$howMn; $j++)
  18. {
  19.  
  20. }
  21.  
r4xz
UPDATE nazwa_tabeli SET kategoria_linku=cyfra WHERE kategoria_linku=wyraz
oczywiście zapytanie można by bardziej udoskonalić, ale sytuacja tego nie wymaga (skoro rozwiązanie tylko na chwilę)

np.
UPDATE nazwa_tabeli SET nameCategory=58 WHERE nameCategory=jakaskategoriaaaaa
UPDATE nazwa_tabeli SET nameCategory=59 WHERE nameCategory=jakasinnakatg

PS czy może jednak to menu jest rozbudowane (zawiera wiele kategorii)?
Woytek950
Cytat(r4xz @ 23.05.2010, 21:30:40 ) *
UPDATE nazwa_tabeli SET kategoria_linku=cyfra WHERE kategoria_linku=wyraz
oczywiście zapytanie można by bardziej udoskonalić, ale sytuacja tego nie wymaga (skoro rozwiązanie tylko na chwilę)

np.
UPDATE nazwa_tabeli SET nameCategory=58 WHERE nameCategory=jakaskategoriaaaaa
UPDATE nazwa_tabeli SET nameCategory=59 WHERE nameCategory=jakasinnakatg

PS czy może jednak to menu jest rozbudowane (zawiera wiele kategorii)?

W jaki celu to? Zobacz doszedłem do tego momentu...tongue.gif
r4xz
ok, mój błąd - chyba już przysypiam ;P

przerób to na kod:
pobierasz id i nazwy kategorii
wykonujesz pętle tyle razy, ile jest kategorii

{
$idCategory = mysql_result($qu6,$i,"id"); // ID kategorii
pobierasz z bazy linki o id n-tej kategorii (select * from linki where category=$idcategory ...)
wyświetlasz nazwę kategorii - echo $nameCategory = mysql_result($qu6,$i,"title"); // nazwa kategorii
wyświetlasz linki
tu jakiś ew. separator między kategoriami
}

zielone - to co już masz zrobione winksmiley.jpg

  1. <?php
  2.  
  3. $mysql = mysql_connect('localhost', 'anonim', '');
  4. mysql_select_db('test');
  5.  
  6. $query = mysql_query("SELECT kategorie.nazwa, linki.nazwa FROM kategorie LEFT JOIN linki ON linki.kat=kategorie.id");
  7.  
  8. while ($row = mysql_fetch_array($query)) {
  9. if($abc != $row[0]) echo '<b>'.$row[0].'</b><br />';
  10. echo $row[1].'<br />';
  11.  
  12. $abc = $row[0];
  13. }
  14.  
  15. ?>


tutaj bardziej "profesjonalnie" (ale i tak robione na szybkiego wstydnis.gif )
Woytek950
Pisze z telefonu i nie mam jak sprawdzic ten skrypt. ale czy on bedzie dynamiczny ? i najwazniejsze, jak wyswietlic to za pomoca pętli for w pliku szablonow bo widze ze wypisane jest za pomocą echo
r4xz
Cytat(Woytek950 @ 24.05.2010, 10:24:42 ) *
jak wyswietlic to za pomoca pętli for w pliku szablonow


zastąpić pętle while pętlą for - tylko czy to ma jakiś sens?
Woytek950
Dobra. cos wykombinowałem mianowicie to:
  1. $arr6 = array();
  2.  
  3. $qu6 = mysql_query("SELECT * FROM menu_types WHERE mask = '0'"); // Tabela z kategoriami
  4. $nr6 = mysql_num_rows($qu6); // zliczanie rekordow
  5. if($nr6 > 0)
  6. {
  7. for($i=0; $i<$nr6; $i++) // petla do przeszukiwania menu kategorii
  8. {
  9. $idCategory = mysql_result($qu6,$i,"id"); // ID kategorii
  10. $nameCategory = mysql_result($qu6,$i,"title"); // nazwa kategorii
  11. $menuType = mysql_result($qu6,$i,"menutype"); // nazwa kategorii
  12.  
  13. $arr6[] = "<p><b>".$nameCategory."</b></p>";
  14.  
  15.  
  16.  
  17. /////////////////////////
  18. $qu7 = mysql_query("SELECT * FROM menu WHERE menutype = '$menuType'"); // Tabela z kategoriami
  19. $nr7 = mysql_num_rows($qu7); // zliczanie rekordow
  20.  
  21. if($nr7 > 0)
  22. {
  23. for($j=0; $j<$nr7; $j++) // petla do przeszukiwania menu kategorii
  24. {
  25. $idLink = mysql_result($qu7,$j,"id"); // ID kategorii
  26. $aliasLink = mysql_result($qu7,$j,"alias"); // nazwa kategorii
  27. $linkLink = mysql_result($qu7,$j,"link"); // nazwa kategorii
  28. $arr6[][] = "<p>".$aliasLink."</p>";
  29. //$arr6[] = $menuType;
  30.  
  31. }
  32. }
  33. else echo "brak linkow";
  34. ///////////////////////////
  35. //$arr6[] = $menuType;
  36. }
  37. }
  38. else echo "brak linkow";
  39.  
  40.  
  41. //$howMn = count($arr6);
  42.  
  43. $tpl->assign("abcs", $arr6);

i:
  1. {loop name="abcs"}
  2. <p><a href="{$value}">{$value}</a></p>
  3.  
  4. {/loop}

i wyświetla sie:
  1. <p><a href="<p><b>Menu g??wne</b></p>"><p><b>Menu g??wne</b></p></a></p>
  2.  
  3. <p><a href="Array">Array</a></p>
  4.  
  5. <p><a href="Array">Array</a></p>
  6.  
  7. <p><a href="<p><b>Inne menu</b></p>"><p><b>Inne menu</b></p></a></p>
  8.  
  9. <p><a href="Array">Array</a></p>
r4xz
{loop name="abcs"}
<p><a href="{$value}">{$value}</a></p>
{/loop}


<p><a href="<p><b>Menu g??wne</b></p>"><p><b>Menu g??wne</b></p></a></p>
(...)

i z tego wynika jedna prosta rzecz - problem leży w sposobie wyświetlania danych

ale jak teraz? ano pokombinuj z tablicami.
może coś na zasadzie:
Kod
{loop name="nazwy_kategorii"}
   {$kategoria}
   {loop name="linki"}
      <a href="">{$link[$kategoria]}</a>
   {/loop}
{/loop}
Woytek950
Cytat(r4xz @ 24.05.2010, 20:31:57 ) *
{loop name="abcs"}
<p><a href="{$value}">{$value}</a></p>
{/loop}


<p><a href="<p><b>Menu g??wne</b></p>"><p><b>Menu g??wne</b></p></a></p>
(...)

i z tego wynika jedna prosta rzecz - problem leży w sposobie wyświetlania danych

ale jak teraz? ano pokombinuj z tablicami.
może coś na zasadzie:
Kod
{loop name="nazwy_kategorii"}
   {$kategoria}
   {loop name="linki"}
      <a href="">{$link[$kategoria]}</a>
   {/loop}
{/loop}

Racja racja... ale do tego doszedlem nie dawno, jak zrobiłem $ar[] i druga petla $ar[][];

Tylko że nadal mam problem z wyświetleniem
struktura
  1. Array
  2. (
  3. [0] => Menu g??wne
  4. [1] => Array
  5. (
  6. [0] => jakis-link
  7. )
  8.  
  9. [2] => Array
  10. (
  11. [0] => o-mnie
  12. )
  13.  
  14. [3] => Inne menu
  15. [4] => Array
  16. (
  17. [0] => cos
  18. )
  19.  
  20. )

dokumentacja raintpl
http://www.raintpl.com/?page_id=loop


Edit: a jedenak mi się wydaje że błąd jest w składni tablicy. Czyli źle dodany za pomocą skryptu.
powinno być mniej więcej tak
  1. Array
  2. (
  3. [Menu g??wne (lub id (te drugie id))] =>
  4. [0] => jakis-link
  5.  
  6. [Inne menu] =>
  7. [0] => Inne menu
  8. [1] => Inne menu
  9. [2] => Inne menu
  10. [3] => Inne menu
  11. )


ref
r4xz
Cytat(Woytek950 @ 24.05.2010, 18:19:51 ) *
  1. //(...) ~10-12 linijka
  2. $nameCategory = mysql_result($qu6,$i,"title"); // nazwa kategorii
  3. $arr6[$nameCategory] = "<p><b>".$nameCategory."</b></p>";
  4.  
  5. //(...) ~26-28 linijka
  6. $aliasLink = mysql_result($qu7,$j,"alias"); // nazwa kategorii
  7. $arr6[$nameCategory][] = "<p>".$aliasLink."</p>";
  8.  
  9. //(...)


a teraz sprawdź czy będzie cię satysfakcjonowała zwrócona tablica winksmiley.jpg
Woytek950
  1. Fatal error: [] operator not supported for strings in c:\usr\krasnal\www\przyklad-1\includes\menu.inc.php on line 33
r4xz
skoro [] nie działa to trzeba użyć niezawodnego array_push

PS ciekawe czemu to [] nie chce ci działać, może coś masz w opcjach zmienione
Woytek950
Kurczę. Jaki ja jestem przymulony... Za wszelką ceną chciałem wyświetlić <a href="{$value.link}">{$value.name}</a> a to jest nei osiągalne. Kolego, dzięki Tobie rozwiązałem swój problem. Teraz wystarczy że zrobie
  1. $arr6[] = "<p><b>".$nameCategory."</b></p>";
  2.  
  3. array_push($arr6, $aliasLink);


Co do aray_push to już widziałem... tongue.gif:P

Dostałeś kilka "pomogł" za to że chociaż zainteresowałeś się moim problemem.
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.