Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Pętla WHILE i zapisanie na stała $zmiennej z niej wydobytej
Forum PHP.pl > Forum > Przedszkole
AlinaMalutka
Potrzebuję za pomocą pętli WHILE wydobyć z bazy danych jedną daną (LIMIT 1) i używać jej wielokrotnie w różnych miejscach kodu PHP na mojej stronie. Strona jest dość długa...
Potrzebuję również wyciągnąć następną podobną jedną daną z tej samej bazy i również wielokrotnie jej użyć naprzemiennie z daną pierwszą.

Nie wiem jak to zrobić --- gdzieś popełniłam jakiś błąd bowiem prawie identyczny przykład na innej bazie działa bezbłędnie questionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gif?

  1. $wynik = mysql_query ("SELECT * FROM tabela WHERE numer >= '21' ORDER BY yyDOnrLdz DESC LIMIT 1;") or
  2. die ("błąd w pytaniu2");
  3.  
  4. while ($rekord = mysql_fetch_array ($wynik)) {
  5.  
  6. $id = $rekord[0];
  7. $numer = $rekord[1];
  8. $nazwa = $rekord[2];
  9. }
  10.  
  11. $toJestMojaNAZWA1 = $nazwa;
  12.  
  13.  
  14.  
  15. $wynikAA = mysql_query ("SELECT * FROM tabela WHERE numer >= '811' ORDER BY yyDOnrLdz DESC LIMIT 1;") or
  16. die ("błąd w pytaniu2");
  17.  
  18. while ($rekordAA = mysql_fetch_array ($wynikAA)) {
  19.  
  20. $idAA = $rekordAA[0];
  21. $numerAA = $rekordAA[1];
  22. $nazwaAA = $rekordAA[2];
  23. }
  24.  
  25. $toJestMojaNAZWA2 = $nazwaAA;
  26.  
  27.  
  28.  
  29. // ========================
  30.  
  31. echo "$toJestMojaNAZWA1";
  32.  
  33. // ========================
  34.  
  35. echo "$toJestMojaNAZWA2";
  36.  
  37. // ========================
  38.  
  39. echo "$toJestMojaNAZWA1";
  40.  
  41. // ========================
  42.  
  43. echo "$toJestMojaNAZWA2";
  44.  
  45.  


Jestem ciemną blondynką i staram sie nie zaliczać do "jasnych" ale tu zgłupiałam całkowicie. Jestem po 2-miesięcznych wykładach PHP/MySQL zaś praktyki mam mało i staram się uczyć na przykładach?


Proszę o prostą podpowiedź.

Alina Malikowska

mail: alinamala na *niezbędnym do życia gazie*
zend
Zacznij od usunięcia swojego maila z forum, bo się od spamu nie opędzisz. Pętle są niepotrzebne. Używaj prostszych nazw zmiennych. Kod wyświetla się tak
  1. echo $zmienna;
  2.  
  3. //na początku skryptu daj
  4. ini_set('display_errors' , 'On');
AlinaMalutka
to (chyba) nie dziala... Próbowałam różnych kombinacji, owszem - pamięta ostatnie - czyli "$toJestMojaNAZWA2" unicestwiając poprzednią (czyli "$toJestMojaNAZWA1" jest wyzerowane). Musi być jakiś PROSTY sposób zapamietania na stałe danej wartości (oczywiścia bez """ foreach() {...} """ --- gdzie muszę to objąć klamrowymi nawiasami...) -- wiem o tym bo jak pisalam użyłam identycznego kodu na innej TABELI i tam jest OK, muszą być jakieś zależności może w samej bazie danych, a może coś innego. Próbowałam samych nazw ( = $rekord['nazwa'] ) oraz numerów rekordów ( = $rekord[2] ) i nic...

Potrzebuję PROSTEGO!!! rozwiązania wyciągnięcia "danej chwilowej" i zamiany jej na $zmienną zapamiętaną na stale...

POMOCY --- >> w prosty sposob
zend
  1. if($rekord = mysql_fetch_array ($wynik)) {
  2. $id = $rekord[0];
  3. $numer = $rekord[1];
  4. $nazwa = $rekord[2];
  5. }
  6. else{ echo 'brak danych spełniających warunki';}
thek
Podam algorytm zamiast gotowego rozwiązania wpierw byś popatrzyła co może być nie tak w Twoim podejściu:
1. Piszemy zapytanie.
2. Wysyłamy je do bazy.
3. Sprawdzamy czy zapytanie wykonało się poprawnie.
4. Jeśli nie - wyrzucamy błąd. Jeśli ok - liczymy czy mamy choć jeden rekord wyniku ( dobre zapytanie może nie zwrócić żadnego pasującego! )
5. Jeśli mamy rekord wpisujemy go po prostu do zmiennej. Skoro mamy tylko jeden rekord wyniku maksymalnie to pętle są zbędne (!)

Widzę jednak, że coś sama próbowałaś, więc dam Ci mocno skróconą o obsługę błędów wersję dla jednego zapytania. Drugie jest analogiczne smile.gif
  1. $dane = false;
  2. $sql = 'Tu zapytanie';
  3. if( $resourse = mysql_query( $sql ) ) {
  4. if( mysql_num_rows( $resource ) > 0 ) {
  5. $dane = mysql_fetch_assoc( $resource );
  6. } else {
  7. echo 'Houston, nie dostaliśmy danych w wyniku zapytania';
  8. }
  9. } else {
  10. echo 'Houston, baza ma problem: '.mysql_error();
  11. }
  12. var_dump( $dane );
I teraz zerknij sobie co Ci var_dump zwrócił. Tablicę rekordu czy może false i komunikaty błędów smile.gif
AlinaMalutka




Przez kilka dni stydiowałam. Jutro trochą wolnego więc wracam do tematu...

Thek - Twoje zapytanie dalo wynik: "" Houston, baza ma problem: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Resource id #5' at line 1bool(false) ""

Zend - niestety wynik dalej zanika.

=========

Może raz jeszcze napiszę o co mi chodzi; - POTRZEBUJĘ TRZYKROTNIE WYKONAĆ identyczne zapytanie i trzykrotnie wybrać z tych samych kolumn pojedyncze (jednorekordowe) wyniki. Za każdym razem przy innych warunkach WHERE... Chodzi o to aby OSTATNIE (tu trzecie) ZAPYTANIE nie kasowało wcześniejszych wyników i aby wcześniejsze wyniki zapamiętane były na stałe (na tej stronie PHP) bowiem wykorzystywane będzie jeszcze kilkakrotnie - więc nie chcę obejmować ich {klamrami}... Potrzebuję $toJestMojaNAZWA1, $toJestMojaNAZWA2, $toJestMojaNAZWA3... mieć stale do użycia. Koleżanka powiedziała mi, że jest to możliwe ale nie miała już tego przykłady więc nie miałam na czym się oprzeć.


  1. $wynik = mysql_query ("SELECT * FROM tabela WHERE numer >= '21' ORDER BY numer DESC LIMIT 1;") or
  2. die ("bł±d w pytaniu2");
  3.  
  4. while ($rekord = mysql_fetch_array ($wynik)) {
  5.  
  6. $id = $rekord[0];
  7. $numer = $rekord[1];
  8. $nazwa = $rekord[2];
  9. }
  10.  
  11. $toJestMojaNAZWA1 = $nazwa;
  12. $toJestMojePotrzebneID1 = $id;
  13.  
  14. //========= inny, następny zakres szukania = to tylko przyklad poglądowy... ===================
  15.  
  16.  
  17. $wynikAA = mysql_query ("SELECT * FROM tabela WHERE numer >= '811' ORDER BY numer DESC LIMIT 1;") or
  18. die ("bł±d w pytaniu2");
  19.  
  20. while ($rekordAA = mysql_fetch_array ($wynikAA)) {
  21.  
  22. $idAA = $rekordAA[0];
  23. $numerAA = $rekordAA[1];
  24. $nazwaAA = $rekordAA[2];
  25. }
  26.  
  27. $toJestMojaNAZWA2 = $nazwaAA;
  28. $toJestMojePotrzebneID2 = $idAA;
  29.  
  30. //========= inny, następny zakres szukania = to tylko przyklad poglądowy... ===================
  31.  
  32.  
  33. $wynikBB = mysql_query ("SELECT * FROM tabela WHERE numer >= '17000' ORDER BY numer DESC LIMIT 1;") or
  34. die ("bł±d w pytaniu2");
  35.  
  36. while ($rekordBB = mysql_fetch_array ($wynikBB)) {
  37.  
  38. $idBB = $rekordBB[0];
  39. $numerBB = $rekordBB[1];
  40. $nazwBB = $rekordBB[2];
  41. }
  42.  
  43. $toJestMojaNAZWA3 = $nazwaBB;
  44. $toJestMojePotrzebneID3 = $idBB;
  45.  
  46. // =========== w pewnym, dalszym miejscu skryptu potrzeuję użyć tych trzech danych -- wiadomo pamiętana jest tylko wartość 3 a ja potrzebuję i 1 i 2=============
  47.  
  48. echo "$toJestMojaNAZWA1";
  49. echo "$toJestMojePotrzebneID1";
  50. echo "$toJestMojaNAZWA2";
  51. echo "$toJestMojePotrzebneID2";
  52. echo "$toJestMojaNAZWA3";
  53. echo "$toJestMojePotrzebneID3";
  54.  
  55. // =========== w pewnym, dalszym miejscu skryptu potrzeuję RAZ JESZCZE użyć tych trzech danych -- wiadomo pamiętana jest tylko wartość 3 a ja potrzebuję i 1 i 2=============
  56.  
  57. echo "$toJestMojaNAZWA1";
  58. echo "$toJestMojePotrzebneID1";
  59. echo "$toJestMojaNAZWA2";
  60. echo "$toJestMojePotrzebneID2";
  61. echo "$toJestMojaNAZWA3";
  62. echo "$toJestMojePotrzebneID3";
  63.  
  64. // =========== w pewnym, dalszym miejscu skryptu potrzeuję RAZ JESZCZE użyć tych trzech danych -- wiadomo pamiętana jest tylko wartość 3 a ja potrzebuję i 1 i 2=============
  65.  
  66. echo "$toJestMojaNAZWA1";
  67. echo "$toJestMojePotrzebneID1";
  68. echo "$toJestMojaNAZWA2";
  69. echo "$toJestMojePotrzebneID2";
  70. echo "$toJestMojaNAZWA3";
  71. echo "$toJestMojePotrzebneID3";


Proszę mi podpowiedzieć jak w prosty sposob to zrobić...

Alina
potreb
Możesz jednym zapytaniem pobrać te trzy stosując operator OR dla SQL.
Później pobrane dane wrzucasz do tablicy, a następnie foreachem, czy też tam bez wyciągasz je.
AlinaMalutka
niestety nie mogę tak zrobić. Musiałam wybrać opisany sposób i dlatego się męczę ale mam nadzieją, że ktoś wpadnie na jakiś prosty i genialny sposób...
potreb
Dlaczego musisz tak zrobić?, przedstaw opis tego co chcesz wykonać, zawsze istnieją inne optymalne a nawet lepsze rozwiązania.
Piszesz ze chcesz wydobyć jedną daną, stosujesz LIMIT 1 a robisz porównanie większy lub równy, wystarczy chyba tylko równy i nie musi wtedy być limitu.
AlinaMalutka
to jest tylko przykład. Musialam zastosować bardzo różnorakie warunki i zawęzić LIMITem. Chodzi mi o sprawę zapisanie na stałe zmiennej {bez nawiesow aktywności} tak aby się nie kasowala...

questionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gif? dostęp do koleżankowej podpowiedzi będę miała dopero za 2 tygodnie o rozwiązanie potrzeuję do 12 czerwca (test...). Podobno jest to proste ale nie dla mnie...... POMOCY w tymmmm.

Czekam aż Ktoś mi pomoże......
andrzej7322
Użyj funkcj: SESSION.
Zapisz tą zmienną do sesji.
AlinaMalutka
Podpowiedź jest dobra ale wolałabym uniknąć tego rozwiązania. SESSION mam już mocno załadowaną a postawione mam zadanie czytelnego kodu.... i nie tylko. Może coś innego - będę wdzięczna. Mam jeszcze czas do jutrzejszego wieczora a jak szczęśliwie się zloży to do najbliższego wtorku. Czekam dalej...
andrzej7322
Może zrób bez pętli
  1. $rekordBB = mysql_fetch_array ($wynikBB);

albo
  1. $file = "plik.txt";
  2. $fp = fopen($file, "w");
  3. flock($fp, 2);
  4. fwrite($fp, $zmienna);
  5. flock($fp, 3);
  6. fclose($fp);

zapisz do pliku textowego i odczytaj pozniej

  1. $zmienna=file_get_contents('plik.txt');
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.