Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]PHP + MySQL + Apache2 - Tworzenie kategorii, W jaki sposób tworzyć przy pomocy PHP, tabele z kategoriami
nama
post
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 23.03.2006

Ostrzeżenie: (0%)
-----


Cześć,
Chciałbym zrobić stronę, na której będzie można dodawać kategorie oraz produkty. Będzie to wyglądać tak:

-Kategoria 1:
-------Produkt 1,
-------Produkt 2,
-------Produkt 3,

-Kategoria 2:
-------Produkt 1,
-------Produkt 2,
-------Produkt 3,

-Kategoria 3:
-------Produkt 1,
-------Produkt 2,
-------Produkt 3,

Utworzyłem bazę o nazwie "baza1", w której znajdują się dwie tabele: "kat" oraz "poz".

W tabeli "kat" występują następujące pola: "id", "kategoria".
W tabeli "poz" występują następujące pola: "nazwa", "kategoria_kat".

Następnie zabrałem się do pisania skryptu.

(IMG:http://img832.imageshack.us/img832/1407/obrazekp.png)

Problem w tym, że jest to zupełnie nie zautomatyzowane. Za każdym razem, musiałbym do strony dodawać w kodzie linijki i zmieniać numery przy SELECT.

Jak to zautomatyzować?

Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
marck
post
Post #2





Grupa: Zarejestrowani
Postów: 48
Pomógł: 1
Dołączył: 27.05.2008

Ostrzeżenie: (0%)
-----


Przede wszystkim strasznie komplikujesz. powinno to być tak.

1. Tworzysz 2 tabelki (1 kategorie : z polami np : id_kat, nazwa_kat | 2 Produkty - gdzie robisz pola id_prod, nazwa_prod, id_kat)
2. Piszesz zapytanko wypisujące np ja to robię choćby tak:
  1. echo"<table>";
  2.  
  3. $pokaz=mysql_query("SELECT * FROM produkty, kategorie WHERE kategorie.id_kat=produkty.id_kat");
  4. while($ln=mysql_fetch_array($pokaz)){
  5. $katname=$ln['nazwa_kat'];
  6. $prodname=$ln['nazwa_prod'];
  7. echo"<tr><td>$prodname</td><td>$katname</td></tr>\r\n";
  8. }
  9. echo"</table>";
  10.  


Możesz dodać grupowanie po id_kat, i tyle

Ten post edytował marck 21.09.2010, 23:45:28
Go to the top of the page
+Quote Post
nama
post
Post #3





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 23.03.2006

Ostrzeżenie: (0%)
-----


Mhm, więc zrobiłem tak jak doradziłeś. Jednak efekt jest inny. Z moim while i dwoma SELECTami mam możliwość tak zapętlić te wyniki, aby kategoria była wyświetlana jako nagłówek. W Twoim przykładzie kategorii w ten sposób nie wyświetlę. Nie jestem programistą i z algorytmów byłem noga. Najzwyczajniej nie mieści mi się w głowie działanie pewnych rzeczy. Ale dalej proszę o pomoc lub żebyś wytłumaczył jak można do nagłówka wstawić kategorię z Twojego przykładu:

(IMG:http://img838.imageshack.us/img838/7273/rysunek2.png)

EDIT:
Cel osiagnalem w ten sposob. Zapetlilem to uzywajac FOR i zmniejszajac $n. Pytanie: Czy jest to poprawne pod wzgledem "gramatycznym" jezyka php?

  1. for ($n = 3; $n > 0; $n--)
  2. {
  3. $sql_select1 = mysql_query("SELECT `kategoria` FROM `kat` WHERE id = $n");
  4. $sql_select2 = mysql_query("SELECT `nazwa`, `kategoria_kat` FROM `poz` WHERE kategoria_kat = $n");
  5.  
  6. while ($wiersz1 = mysql_fetch_row($sql_select1))
  7.  
  8. {
  9. echo '<table border="1">';
  10. echo '<tr>';
  11. echo '<td>Kat: '.$wiersz1[0].'</td>';
  12. echo '</tr>';
  13. echo '<tr>';
  14. echo '<td>';
  15. while ($wiersz2 = mysql_fetch_row($sql_select2))
  16. {
  17. echo 'Naz: '.$wiersz2[0].'<br>';
  18. }
  19. echo '</td>';
  20. echo '</tr>';
  21. echo '</table>';
  22. }
  23. }


Ten post edytował nama 22.09.2010, 09:48:18
Go to the top of the page
+Quote Post
athei
post
Post #4





Grupa: Zarejestrowani
Postów: 389
Pomógł: 141
Dołączył: 11.04.2009

Ostrzeżenie: (0%)
-----


Z tego co rozumiem chcesz pogrupować produkty do kategorii.
To co napisałeś jest bez sensu bo w pętli wykonujesz zapytania, które mogłeś wykonać tylko raz.
To jest dla książek i z użyciem PDO ale powinieneś zrozumieć o co chodzi:
Kategorie: id | nazwa
Ksiazki: id | nazwa | wydawnictwo | kategoria_id
  1. try {
  2. $pdo = new PDO("mysql:host=localhost;dbname=test", 'user', 'pass');
  3. $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
  4. $pdo -> query ('SET NAMES utf8');
  5.  
  6. // pobiera kategorie
  7. $stmt = $pdo -> query('SELECT id, nazwa FROM kategorie ORDER BY id');
  8. $wynik = array();
  9.  
  10. // id = id kategorii, nazwa = nazwa kategorii, ksiazki = tablica z ksiazkami
  11. while($row = $stmt -> fetch())
  12. {
  13. $wynik[$row['id']] = array(
  14. 'nazwa' => $row['nazwa'],
  15. 'ksiazki' => array()
  16. );
  17. }
  18. $stmt -> closeCursor();
  19.  
  20. // pobiera ksiazki
  21. $stmt = $pdo -> query('SELECT nazwa, wydawnictwo, kategoria_id
  22. FROM ksiazki ORDER BY kategoria_id, id');
  23.  
  24. // dodaje ksiazki do tablicy, odpowiednio do okreslonej kategorii
  25. while($row = $stmt -> fetch())
  26. {
  27. $wynik[$row['kategoria_id']]['ksiazki'][] = array(
  28. 'nazwa' => $row['nazwa'],
  29. 'wydawnictwo' => $row['wydawnictwo']
  30. );
  31. }
  32. $stmt -> closeCursor();
  33.  
  34. // wypisanie ksiazek z podzialem na kategorie
  35. foreach($wynik as $kategoria)
  36. {
  37. echo '<h3>'.$kategoria['nazwa'].'</h3>';
  38. foreach($kategoria['ksiazki'] as $ksiazka)
  39. {
  40. echo '<p><i>'.$ksiazka['nazwa'].'</i>
  41. (Wyd. '.$ksiazka['wydawnictwo'].')</p>';
  42. }
  43. }
  44.  
  45. / /tak wyglada tablica
  46. echo '<pre>', print_r($wynik), '</pre>';
  47.  
  48. $pdo = null;
  49. } catch (PDOException $e) {
  50. die( 'ERROR! Problem z polaczeniem do bazy. ' . $e->getMessage() );
  51. }
Go to the top of the page
+Quote Post
nama
post
Post #5





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 23.03.2006

Ostrzeżenie: (0%)
-----


Hm... jednak nie do końca rozumiem. Czy możesz mi pokazać wynik tego kodu w przeglądarce?

Czy jeżeli kod, który napisałem zrobię tak aby było tylko jedno zapytanie to czy będzie to poprawne pod względem gramatycznym języka php?
Go to the top of the page
+Quote Post
athei
post
Post #6





Grupa: Zarejestrowani
Postów: 389
Pomógł: 141
Dołączył: 11.04.2009

Ostrzeżenie: (0%)
-----


Będzie nazwa kategorii i przypisane do niej książki. Zrób sobie dwie tabele albo kod dostosuj do swoich to zobaczysz jak wygląda. Kod jest prosty jak nie rozumiesz to w manualu masz opisy funkcji. Ale i tak powinieneś przerzucić się czy to na mysqli czy pdo.
Poprawne jest wszystko co działa, tylko że jedno jest bardziej optymalne inne mniej.
Go to the top of the page
+Quote Post
nama
post
Post #7





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 23.03.2006

Ostrzeżenie: (0%)
-----


Dalej tego nie rozumiem... Już kilka dni próbuje to zrobić i wszystko jest dobrze gdy mam mieć tylko jedną kategorię i pozycje do niej. Robię to przy pomocy dwóch zapytań MYSQL oraz dwóch pętli while.

  1. $sql_select1 = mysql_query("SELECT `id`, `nazwa`,`kat` FROM `kat` ORDER BY `nazwa`");
  2. while ($wiersz1 = mysql_fetch_row($sql_select1))
  3. {
  4. echo '<table align="center" width="750" cellpadding="0" cellspacing="0">';
  5. echo '<tr>';
  6. echo '<td><font face="Verdana" size="3" color="#ff440b">'.$wiersz1[1].'</font><font face="Verdana" size="2" color="#fdc79f">&nbsp;-&nbsp;</font>';
  7. echo "<a href='opis.php?idopis=$wiersz1[0]'><font face='Verdana' size='2' color='#fdc79f'><b><i>Zobacz opis środka!</b></a>";
  8. echo '</td>';
  9. echo '</tr>';
  10. echo '</table>';
  11.  
  12. echo '<table align="center" width="750" cellpadding="0" cellspacing="0">';
  13. echo '<tr background="stripe.png">';
  14. echo '<td width="33%"><font face="Verdana" size="2" color="#0099FF"><b>Nazwa</b></font></td>';
  15. echo '<td width="20%"><font face="Verdana" size="2" color="#0099FF"><b>Producent</b></font></td>';
  16. echo '<td><font face="Verdana" size="2" color="#0099FF"><b>Ilość</b></font></td>';
  17. echo '<td><font face="Verdana" size="2" color="#0099FF"><b>Steżenie</b></font></td>';
  18. echo '<td><font face="Verdana" size="2" color="#0099FF"><b>Cena</b></font></td>';
  19. echo '<td><font face="Verdana" size="2" color="#0099FF"><center><b>Zdjęcie</b></center></font></td>';
  20. echo '</tr>';
  21. $n = $wiersz1[2];
  22. $sql_select2 = mysql_query("SELECT `id`, `nazwa`, `producent`,`ilosc`,`stezenie`,`cena`,`zdjecie`,`kat_nr` FROM `poz` WHERE kat_nr = $n ORDER BY `nazwa`");
  23. while ($wiersz2 = mysql_fetch_row($sql_select2))
  24. {
  25. echo '<tr>';
  26. echo '<td><font face="Verdana" size="2" color="#FFFFF">'.$wiersz2[1].'</font></td>';
  27. echo '<td><font face="Verdana" size="2" color="#FFFFF">'.$wiersz2[2].'</font></td>';
  28. echo '<td><font face="Verdana" size="2" color="#FFFFF">'.$wiersz2[3].'</font></td>';
  29. echo '<td><font face="Verdana" size="2" color="#FFFFF">'.$wiersz2[4].'</font></td>';
  30. echo '<td><font face="Verdana" size="2" color="#FFFFF">'.$wiersz2[5].'</font></td>';
  31. echo '<td><center><a href="photos/'.$wiersz2[6].'" rel="lightbox"><img src="camera.png" border="0"></a></center></td>';
  32. echo '</tr>';
  33. }
  34. echo '</table>';
  35. }


Efekt jest taki, że wyniki układają się tak jak chciałem:

- Kategoria1
----- Pozycja1
----- Pozycja2
----- Pozycja3
- Kategoria2
----- Pozycja1
----- Pozycja2
----- Pozycja3
- Kategoria3
----- Pozycja1
----- Pozycja2
----- Pozycja3

Natomiast nie da się (przynajmniej ja nie umiem) zrobić tego samego dla kategorii, podkategorii i pozycji czyli:

- Kategoria1
--- Podkategoria1
------ Pozycja1
------ Pozycja2
------ Pozycja3
--- Podkategoria2
------ Pozycja1
------ Pozycja2
------ Pozycja3
--- Podkategoria3
------ Pozycja1
------ Pozycja2
------ Pozycja3

Czy ktoś może mi jeszcze pomóc?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 21:21