Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Pętla WHILE i zapisanie na stała $zmiennej z niej wydobytej
AlinaMalutka
post
Post #1





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 6.06.2010

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


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 (IMG:style_emoticons/default/questionmark.gif) (IMG:style_emoticons/default/questionmark.gif) (IMG:style_emoticons/default/questionmark.gif) (IMG:style_emoticons/default/questionmark.gif) (IMG:style_emoticons/default/questionmark.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*
Powód edycji: [erix]: obfuskacja ;)
Go to the top of the page
+Quote Post
zend
post
Post #2





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

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


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');


Ten post edytował zend 6.06.2010, 20:08:30
Go to the top of the page
+Quote Post
AlinaMalutka
post
Post #3





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 6.06.2010

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


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





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

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


  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';}
Go to the top of the page
+Quote Post
thek
post
Post #5





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
AlinaMalutka
post
Post #6





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 6.06.2010

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






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





Grupa: Zarejestrowani
Postów: 1 568
Pomógł: 192
Dołączył: 7.03.2005
Skąd: Warszawa

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


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





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 6.06.2010

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


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





Grupa: Zarejestrowani
Postów: 1 568
Pomógł: 192
Dołączył: 7.03.2005
Skąd: Warszawa

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


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.

Ten post edytował potreb 9.06.2010, 21:05:06
Go to the top of the page
+Quote Post
AlinaMalutka
post
Post #10





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 6.06.2010

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


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...

(IMG:style_emoticons/default/questionmark.gif) (IMG:style_emoticons/default/questionmark.gif) (IMG:style_emoticons/default/questionmark.gif) (IMG:style_emoticons/default/questionmark.gif) (IMG:style_emoticons/default/questionmark.gif) (IMG:style_emoticons/default/questionmark.gif) (IMG:style_emoticons/default/questionmark.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......
Go to the top of the page
+Quote Post
andrzej7322
post
Post #11





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 8.05.2010

Ostrzeżenie: (20%)
X----


Użyj funkcj: SESSION.
Zapisz tą zmienną do sesji.
Go to the top of the page
+Quote Post
AlinaMalutka
post
Post #12





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 6.06.2010

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


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





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 8.05.2010

Ostrzeżenie: (20%)
X----


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');
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: 22.08.2025 - 17:22