Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql] Jednokrotne zabranie rekordu
Forum PHP.pl > Forum > Przedszkole
radziowie
Mam mały problem. Otóż mam kod, który wyświetla mi sale a następnie po wejściu nich wyświetla pozostałe dane:

  1. $sale = mysql_query("SELECT * FROM sale ORDER BY sala desc;");
  2. //zmienna $rekord jest przypisana wierszowi (rekordowi) zmiennej $news a następnie pobieranie danych z konkretnych kolumn (komórka po komórce)
  3. WHILE ($rekord = mysql_fetch_assoc ($sale))
  4. {
  5. $id_sali = $rekord['id_sali'];
  6. $sala = $rekord['sala'];
  7. $opiekun = $rekord['opiekun'];
  8. $info = $rekord['info'];
  9. //funkcja nl2br odpowiada za odpowiednie wyświetlanie po przez użycie np. znaków następnej linii
  10. if (!isset($_GET['sala']) || $_GET['sala'] == '')
  11. {
  12. echo '<font color="#FF000"-><h3><a href="sale.php?sala='.$id_sali.'">'.stripslashes($sala).'</a></h3></font><br />';
  13. }
  14.  
  15. if (isset($_GET['sala']) && $_GET['sala'] = $id_sali)
  16. {
  17. $dana_sala = mysql_query("SELECT * FROM sale WHERE id_sali = '".$id_sali."';");
  18. WHILE ($rekord2 = mysql_fetch_assoc($dana_sala))
  19. {
  20. $id_sali2 = $rekord2['id_sali'];
  21. $sala2 = $rekord2['sala'];
  22. $opiekun2 = $rekord2['opiekun'];
  23. $info2 = $rekord2['info'];
  24. echo '<font color="#FF0000"-><h3>'.stripslashes($sala2).'</h3></font><br />
  25. '.stripslashes($opiekun2).'<br />
  26. '.stripslashes($info2).'<br />';
  27. }
  28. }
  29. else echo'dupa';
  30.  
  31.  
  32. }


Problem jednak tkwi w tym, ze gdy wejdę w jedną z sal to wyświetlają mi się wszystkie sale jakie mam w bazie a nie tylko jeden. Gdzie tkwi tu problem. Domyślam się, że on zapamiętuje id_sali z pierwszej pętli i dlatego jest tak. Co należy tu zmienić?
nospor
Zastanowiles sie przez chwilke co tu napisales?
Przeciez pierwsza petla leci po wszystkich salach i je wyswietla. Niezaleznie czy masz cos w GET czy nie.
radziowie
Sorka, ale próbowałem już wiele kombinacji i nie wiem co jest nie tak. Próbowałem wstawić odcinek kodu odnosnie strony ...?sala=X pod koniec, czyli za pętlą ale wtedy wyświetla tylko ostatnią zmienną $id_sali. Na prawde nie mam juz pomysłu na to ;/
Daiquiri
Musisz po kolei przeanalizować pętle, w sposób następujący:

while (są pozycje do oczytania z $sale) rób:
1. przypisywanie wartości $id_sali = $rekord['id_sali']; itd.
2. jeżeli (nie ustawiono $_GET['sala'] lub $_GET['sala'] jest równe '') wyświetl $sala;
3. jeżeli (ustawiono $_GET['sala'] i $_GET['sala'] jest równa $id_sali) rób:
3.1 while (...)
4. w innym przypadku (jeżeli nie ustawiono $_GET['sala'] i $_GET['sala'] jest równa $id_sali) wyświetl 'dupa';

itd.
radziowie
Analizowałem kod parę razy. Dodałem jeszcze wyświetlanie zdjęć dla danej sali, ale nie jestem w stanie tego tak zamienić, aby się wyświetlała tylko jedna sala w adresie ...?sala=X

  1. <?php
  2. include ('dodatki/bonus.php');
  3. include ('meta.php');
  4. include ('gora_logo.php');
  5. lewe_menu ();
  6. open_title();
  7. polacz_baza();
  8.  
  9. $i = 0;
  10. $ile = 4;
  11.  
  12. $sale = mysql_query("SELECT * FROM sale ORDER BY sala desc;") or die(mysql_error());
  13. //zmienna $rekord jest przypisana wierszowi (rekordowi) zmiennej $news a następnie pobieranie danych z konkretnych kolumn (komórka po komórce)
  14. WHILE ($rekord = mysql_fetch_assoc ($sale))
  15. {
  16. $id_sali = $rekord['id_sali'];
  17. $sala = $rekord['sala'];
  18. //funkcja nl2br odpowiada za odpowiednie wyświetlanie po przez użycie np. znaków następnej linii
  19. if (!isset($_GET['sala']) || $_GET['sala'] == '')
  20. {
  21. echo '<font color="#FF000"-><h3><a href="sale.php?sala='.$id_sali.'">'.stripslashes($sala).'</a></h3></font><br />';
  22. }
  23.  
  24. elseif (isset($_GET['sala']) && $_GET['sala'] = $id_sali)
  25. {
  26. $dana_sala = mysql_query("SELECT * FROM sale WHERE id_sali = '".$id_sali."';") or die(mysql_error());
  27. WHILE ($rekord = mysql_fetch_assoc($dana_sala))
  28. {
  29. $id_sali = $rekord['id_sali'];
  30. $sala = $rekord['sala'];
  31. $opiekun = $rekord['opiekun'];
  32. $info = $rekord['info'];
  33. echo '<font color="#FF0000"-><h3>'.stripslashes($sala).'</h3></font><br />
  34. '.stripslashes($opiekun).'<br />
  35. '.stripslashes($info).'<br />
  36. Zdjęcia z galerii dla sali: '.$sala.'<br /><p align="center">';
  37.  
  38. $zdjecia = mysql_query("SELECT * FROM zdjecia WHERE id_kat = '".$sala."' ORDER by id_zdjecia DESC LIMIT 4;");
  39. WHILE ($rekord = mysql_fetch_assoc ($zdjecia))
  40. {
  41. $zdjecie = $rekord['zdjecie'];
  42. $opis = $rekord['opis'];
  43. echo '<a href="./upload/galeria/'.$zdjecie.'" border="0" alt="'.$opis.'" title="'.$opis.'">
  44. <img src="./upload/galeria/mini/'.$zdjecie.'" border="0"></a>';
  45. $i++;
  46. if($i==$ile)
  47. {
  48. $i = 0;
  49. echo '<br />';
  50. }
  51. }
  52. }
  53. echo '</p>';
  54. }
  55.  
  56. else echo'Nie ma nic';
  57.  
  58.  
  59. }
  60.  
  61.  
  62. echo '<br /></p>';
  63. close_title();
  64. include ('./stopka.php');
  65. ?>


1. Wykonuje petle i przypisuje id_sali i sala
2. Jeśli nie ma get wyświetla kategorie
3. W przeciwnym razie wykonuje petle i znowu przypisuje zmienne
4. Ostatnia petla wyświetla zdjecia dla danej sali
5. W przeciwnym razie wyświetla odpowiedni komunikat
6. Zakończenie pierwszej pętli

I teraz się zastanawiam co powinno się zmienić w pkt. 3 i czy nie wstawić go w inne miejsce czasem tylko gdzie?
vistacash
Strasznie chaotycznie, najpierw lecisz po wszystkich rekordach, a później jeszcze wewnątrz kolejne zapytanie jeżeli będzie istnieć $_GET['sala'], samą konstrukcję masz trochę dziwną :-)

Według mnie to co chcesz osiągnąć będzie łatwiej uzyskać w ten sposób:

  1. <?php
  2.  
  3. if(isset($_GET['sala']) && $_GET['sala'] != '') {
  4. //pobieram tylko jeden rekord i się nim zajmuje
  5.  
  6. $id_sali = addslashes($_GET['sala']);
  7.  
  8. $sql = mysql_query("SELECT * FROM sale WHERE id_sali=" . $id_sali);
  9. while($row = mysql_fetch_array($sql)) {
  10.  
  11. //dane zawarte w tablicy $row i na nich operujesz, tj. wyswietlasz info o sali
  12.  
  13. }
  14. } else {
  15. //nie ma zmiennej $_GET['sala'], wiec wystwietlam liste sali z linkami
  16.  
  17. $sql = mysql_query('SELECT * FROM sale ORDER BY sala DESC');
  18.  
  19. while($row = mysql_fetch_array($sql)) {
  20.  
  21.  
  22. //wyswietlasz sobie linki
  23. echo "<a href=\"sale.php?sala=". $row['id_sali'] ."\">" . $row['sala'] . "</a>";
  24.  
  25. }
  26.  
  27. }
  28.  
  29. ?>


Zamieściłem Ci ogólną koncepcję tylko, takie rzeczy jak echo itd. to już sobie dopiszesz :-)
radziowie
Tylko, że jak zastosuję twoją koncepcję to owszem wyświetla mi sie kategorią sal ale już w nie nie wejdę. Adresy, czyli linki są i mimo, ze klikne na nie to i tak zostaje na tej samej stronie.
Daiquiri
Coś kręcisz smile.gif. Hmmm, zacznijmy od tego, ze w tym miejscu:
  1. elseif (isset($_GET['sala']) && $_GET['sala'] = $id_sali) // 24 linijka w Twoim ostatnim kodzie

masz przypisanie (=) a nie przyrównanie (==). Jeżeli to nie pomoże to będziemy walczyć dalej.
radziowie
A jednak jeden znak = i wszystko ok. Wielkie dzięki biggrin.gif
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.