Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Tworzenie kategorii na zasadzie tych samych wyrażeń
Forum PHP.pl > Forum > Przedszkole
jendrek9
Witam,


mam pewien problem - posiadam bazę danych, która wygląda tak:
id | typ | produkt


Zrobiłem już, że wyświetla po 15produktów i całość jest stronnicowana, ale teraz problem - jak zrobić kategorie?

  1. $query1 = "SELECT * FROM tabela WHERE '$typ' = '$typ' ";


Coś takiego może być? Chodziło mi o wybranie tylko tych typów, które są takie same np
x i x
y i y

a potem wyświetlić je co dałoby mi gotowe kategorie.

Całość wygląda tak:

  1. <?
  2.  
  3.  
  4.  
  5. $typ = $_POST['typ'];
  6.  
  7.  
  8. // Oczywiscie wczesniej musisz sie polaczyc z baza i wybrac nazwe bazy, na ktorej chcesz dokonywac operacje
  9. $mysql_host = 'localhost';
  10. $mysql_login = 'x';
  11. $mysql_password = 'x';
  12. $mysql_database = 'x';
  13.  
  14. // Polaczenie do bazy danych MySQL
  15. $mysql_connection = @mysql_connect($mysql_host, $mysql_login, $mysql_password)
  16. // Gdy polaczenie sie nie powiedzie to wyswietl komunikat i przerwij skrypt
  17. or die("$current_time -> Error while connecting to MySQL -> ".mysql_error()."\n");
  18. // Wybor bazy danych
  19. $mysql_db = @mysql_select_db($mysql_database, $mysql_connection)
  20. // Gdy wybor bazy danych sie nie powiedzie wyswietl komunikat i przerwij skrypt
  21. or die("$current_time -> Error while selecting database\n");
  22. // Ustawianie kodowania polaczenia z baza MySQL
  23. mysql_query('SET NAMES utf8');
  24. mysql_query('SET CHARACTER_SET utf8_unicode_ci');
  25.  
  26.  
  27.  
  28.  
  29.  
  30. $strona = $_GET['strona'];
  31. $na_stronie = 16;
  32.  
  33.  
  34.  
  35. $wykonaj=mysql_query("SELECT * FROM tabela");
  36. $znaleziono=mysql_num_rows($wykonaj);
  37. if($znaleziono>$na_stronie) {
  38. print '<center>Strona ';
  39. for($i=0; $i<ceil($znaleziono/$na_stronie); $i++)
  40. print '<a href="index.php?strona='.($i*$na_stronie).'">'.($i+1).'</a> | ';
  41. }
  42. print '</center>';
  43. $query = "SELECT * FROM tabela ORDER BY id DESC LIMIT ".($strona).",".$na_stronie."";
  44.  
  45. $result = mysql_query ($query);
  46. while ($row = mysql_fetch_array($result))
  47. {
  48. //Wyświetlamy wpisy
  49.  
  50. echo "<table cellpadding=\"4\" style=\"border: 0; width: 100%; margin-left: 15px; \">";
  51. while($r = mysql_fetch_assoc($result))
  52. {
  53. echo "<tr>";
  54. echo "<td>".$r['typ']."</td>";
  55. echo "<td>".$r['produkt']."</td>";
  56. echo "</tr>";
  57. }
  58. echo "</table>";
  59.  
  60. }
  61.  
  62. $query1 = "SELECT typ FROM tabela WHERE '$typ' = '$typ' ";
  63.  
  64. $result2 = mysql_query ($query1);
  65. while ($row = mysql_fetch_assoc($result2))
  66. {
  67. echo "<b>".$row['typ']."</b>";
  68. }
  69. ?>


Ale niestety otrzymuję zlany tekst: (każdy znak - nowy wyraz)
xxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzaaaaabbbbbbbbccccccccccccccc
ccc

Potrzebowałbym teraz:
Zostawić tylko po jednym z tych wyrazów (zamiast tego co jest czyli tyle kategorii co produktów), oraz podlinkować każdy wyraz np.
x -> przenosi do index.php?typ=$typ

Potem podstrony na zasadzie:
wyszukuje typu produktu w bazie poprzez wpisanie ?typ=tutaj_typ i wyświetla.


Wiem, że wydaje się dużo, ale jako, że szef prosił mnie o pomoc, a potrzebujemy to już jutro do firmy lub w jak najszybszym czasie - dlatego to jest takie ważne, a sam musiałbym drugą noc z rzędu przepracować.

Naprawdę bardzo prosiłbym...
Z góry dziękuje za wszelką pomoc,
pozdrawiam.
Tomek67
Nie wiem czy Ci dokładnie o to chodziło ale proszę zerknij na to... wyjaśnienia w komentach

  1. <?
  2.  
  3.  
  4. //zeby stworzyć linki zmienną typ musisz przekazać metodą GET więc to przekazywanie nie jest poprawne dla tego skryptu
  5. //$typ = $_POST['typ'];
  6.  
  7.  
  8. // Oczywiscie wczesniej musisz sie polaczyc z baza i wybrac nazwe bazy, na ktorej chcesz dokonywac operacje
  9. $mysql_host = 'localhost';
  10. $mysql_login = 'x';
  11. $mysql_password = 'x';
  12. $mysql_database = 'x';
  13.  
  14. // Polaczenie do bazy danych MySQL
  15. $mysql_connection = @mysql_connect($mysql_host, $mysql_login, $mysql_password)
  16. // Gdy polaczenie sie nie powiedzie to wyswietl komunikat i przerwij skrypt
  17. or die("$current_time -> Error while connecting to MySQL -> ".mysql_error()."\n");
  18. // Wybor bazy danych
  19. $mysql_db = @mysql_select_db($mysql_database, $mysql_connection)
  20. // Gdy wybor bazy danych sie nie powiedzie wyswietl komunikat i przerwij skrypt
  21. or die("$current_time -> Error while selecting database\n");
  22. // Ustawianie kodowania polaczenia z baza MySQL
  23. mysql_query('SET NAMES utf8');
  24. mysql_query('SET CHARACTER_SET utf8_unicode_ci');
  25.  
  26.  
  27. //###############################################################
  28. //i tutaj kod według mnie, nie testowałem bo nie miałem odpowiednich warunków(bazy danych) ale zasada działania powinna być ok
  29.  
  30.  
  31.  
  32. //przekazujemy parametry w urlu
  33. $typ= $_GET['typ']; //Uwaga należy tą zmienną przefiltrować bo w tym miejscu skrypt jest podatny na sql injection(nie pamiętam jak sie filtrowało stringi)
  34. $strona = $_GET['strona'];
  35.  
  36.  
  37.  
  38. $na_stronie = 16;
  39.  
  40. //sprawdzamy czy user czegoś nie przemyca w czyli czy numer strony jest rzeczywiście numerem większym równym 0 jeżeli nie ustawiamy go na 0
  41. if (is_numeric($strona )) {
  42. $strona = (int) $strona ;
  43. if ($strona < 0) {
  44. $strona = 0;
  45. }
  46. } else {
  47. $strona = 0;
  48. }
  49.  
  50. // bardziej optymalne liczenie rekordów w bazie
  51. $total = mysql_query("SELECT COUNT(*) FROM tabela WHERE typ='$typ'");
  52. $total = mysql_fetch_array($total);
  53. $znaleziono = $total[0];
  54.  
  55. //generowanie paginacji
  56. if($znaleziono>$na_stronie) {
  57. print '<center>Strona ';
  58. for($i=0; $i<ceil($znaleziono/$na_stronie); $i++)
  59. print '<a href="index.php?typ='.$typ.'&strona='.$i.'">'.($i+1).'</a> | ';
  60. }
  61. print '</center><br>';
  62.  
  63.  
  64. $start=$strona*$na_stronie;//skąd startujemy zapytanie
  65.  
  66.  
  67. //zapytanie z uwzględnieniem typu
  68. $query = "SELECT * FROM tabela WHERE typ='$typ' ORDER BY id DESC LIMIT $start,$na_stronie";// zapytanie zwraca porcje wyników z mysql gdzie typ jest taki jak w urlu
  69.  
  70. $result = mysql_query ($query);
  71. //Wyświetlamy wpisy
  72.  
  73. echo "<table cellpadding='4' style='border: 0; width: 100%; margin-left: 15px;'>";
  74. while($r = mysql_fetch_assoc($result))
  75. {
  76. echo "<tr>";
  77. echo "<td>".$r['typ']."</td>";
  78. echo "<td>".$r['produkt']."</td>";
  79. echo "</tr>";
  80. }
  81. echo "</table>";
  82.  
  83.  
  84. // na dole generujemy sobie linki do typów
  85. $query1 = "SELECT typ FROM tabela";//to zapytanie wyciąga nam wszystkie typy
  86.  
  87. $result2 = mysql_query ($query1);
  88. while ($row = mysql_fetch_assoc($result2))
  89. {
  90. echo '<a href="index.php?typ='.$row['typ'].'">'.$row['typ'].'</a> | ';//z typów robimy linki, link kieruje do pierwszej strony wyników danego typu
  91. }
  92.  
  93. ?>
  94.  
  95.  
  96.  
jendrek9
Idealnie! Bardzo dziękuje!
Tylko jeden problem - kategorii jest tyle ile u mnie czyli np. 8x jedno i to samo, potrzebuje właśnie wybrać po jednym z danego typu.
Tomek67
możesz to troche bardziej sprecyzowaćquestionmark.gif gdzie pojawia sie problem?? przy generowaniu linków do kategorii??
Cienki1980
Wystarczy dodać do zapytania wyciągającego typy dodać DISTINCT. Jeżeli nie wiesz jak to warto zajrzeć do dokumentacji MySQL'a
jendrek9
Podzieliłem jeszcze skrypt na 3 pliki: typy produktów (kategorie), produkty (lista), nazwa kategorii w której aktualnie się jest (dynamiczne title).

Dałem pomógl osobą, które pomogły, można zamknąć! smile.gif

Jeszcze raz dziękuje!
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.