Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL]Tworzenie kategorii na zasadzie tych samych wyrażeń
jendrek9
post
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 9.04.2010

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


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.
Go to the top of the page
+Quote Post
Tomek67
post
Post #2





Grupa: Zarejestrowani
Postów: 19
Pomógł: 1
Dołączył: 27.01.2009

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


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.  


Ten post edytował Tomek67 10.04.2010, 11:41:31
Go to the top of the page
+Quote Post
jendrek9
post
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 9.04.2010

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


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.
Go to the top of the page
+Quote Post
Tomek67
post
Post #4





Grupa: Zarejestrowani
Postów: 19
Pomógł: 1
Dołączył: 27.01.2009

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


możesz to troche bardziej sprecyzować(IMG:style_emoticons/default/questionmark.gif) gdzie pojawia sie problem?? przy generowaniu linków do kategorii??
Go to the top of the page
+Quote Post
Cienki1980
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

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


Wystarczy dodać do zapytania wyciągającego typy dodać DISTINCT. Jeżeli nie wiesz jak to warto zajrzeć do dokumentacji MySQL'a
Go to the top of the page
+Quote Post
jendrek9
post
Post #6





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 9.04.2010

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


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ąć! (IMG:style_emoticons/default/smile.gif)

Jeszcze raz dziękuje!
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 - 04:28