Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL] Zmienna w zmiennej
Buła
post
Post #1





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 21.01.2009

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


Witam.

Znów mam problem z PHP.
Wyciągam rekordy z bazy:

  1. $c1_res = mysql_query("SELECT `category_name` FROM lpf_categories WHERE main_category_id='1' ORDER BY category_id ASC");
  2.  
  3. if (mysql_num_rows($c1_res) != 0)
  4. {
  5. while ($cat1_list_data = mysql_fetch_array($c1_res))
  6. {
  7. $cat1_list .= "<option value='".$cat1_list_data['category_id']."' ".$cat1_select."> — ".$cat1_list_data['category_name']."</option>\n";
  8. }
  9. }


Wszystko śmiga, ale problem w tym że muszę dla 10 kategorii wyciągnąć rekordy i gdybym chciał to zrobić znanymi mi sposobami, musiałbym ten skrypt napisać jeszcze 10x i zmienić tylko nazwy zmiennych na kolejne...
Czy mógłbym tak zrobić, że wziąć jeden skrypt w pętle FOR i utworzyć jakby zmienną w zmiennej?

Działałoby to tak, że w pętli byłaby dodatkowa zmienna która za każdym 'okrążeniem' powiększała by się o 1, aż do 10.
Zmienną tą wstawiłbym w te poprzednie zmienne:

$cat{tutaj ta zmienna}_list, $c{tutaj ta zmienna}_res
itp.

Czy można tak wstawić w jedną zmienną drugą, żeby to normalnie działało?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
MateuszS
post
Post #2





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


tak

przed petla
$i=0;

w petli

echo $wynik['category_'.$i]; //wynik z mysql, przyklad
$i++;


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
Buła
post
Post #3





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 21.01.2009

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


  1. for ($i = 1; $i <= 10; $i++)
  2. {
  3. $c[$i]_res = mysql_query("SELECT `category_name` FROM lpf_categories WHERE main_category_id='".$i."' ORDER BY category_id ASC");
  4.  
  5. if (mysql_num_rows($c[$i]_res) != 0)
  6. {
  7. while ($cat[$i]_list_data = mysql_fetch_array($c[$i]_res))
  8. {
  9. $cat[$i]_list .= "<option value='".$cat[$i]_list_data['category_id']."'> — ".$cat[$i]_list_data['category_name']."</option>\n";
  10. }
  11. }
  12. }


Co jest źle? Chwile działało jakby, a teraz znowu wywala błąd:

Parse error: syntax error, unexpected T_STRING in /home/accounts_b/bulkas/public_html/browse.php on line 48
Go to the top of the page
+Quote Post
Fifi209
post
Post #4





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Na parse error nikt tutaj nie pomoże bo parser dokładnie piszę gdzie masz błąd.

P.S. Co to jest?!
  1. $c[$i]_res


Masz pełno takich "zmiennych", nie wyobrażam sobie jak to ma działać.


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
Buła
post
Post #5





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 21.01.2009

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


No to jak to powinno wyglądać?
Chcę osiągnąć taki efekt jak opisałem w pierwszym poście.
Go to the top of the page
+Quote Post
thek
post
Post #6





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




Zrób nieco optymalizacji smile.gif Po co przechowywać wynik dziesięciu zapytań, skoro możesz jednym pobrać wszystko i potem tylko jedna pętla winksmiley.jpg
  1. $lista = array(); //dla 1 i 3 przypadku lub po prostu $lista = '' jeśli to ma być string, czyli przypadek 2
  2. $kategorie = '1,2,3,4,5,6,7,8,9';
  3. $result = mysql_query(' SELECT category_name FROM lpf_categories WHERE main_category_id IN ('.$kategorie.') ORDER BY category_id ASC' );
  4. if( $result && mysql_num_rows( $result ) ) {
  5. while( $row = mysql_fetch_assoc( $result ) ) {
  6. $lista[] = '<option value="'.$row['category_id'].'">'.$row['category_name'].'</option>'; //przypadek 1
  7. //$lista .= '<option value="'.$row['category_id'].'">'.$row['category_name']."</option>\n"; <- jeśli to ciąg - przypadek 2
  8. //$lista[ $row['category_id'] ] = $row['category_name']; <- jeśli tylko wyciągasz id i kategorię do tablicy - przypadek 3
  9. }
  10. }
To czy użyjesz tylko ciągu, tablicy, czy wycąigniesz jedynie do tablicy id i nazwę kategorii a potem podczas robienia całego select uzupełnisz w pętli while brakujące pola to Twój wybór. Jak widzisz możliwości jest minimum 3 winksmiley.jpg a to jakie id pchniesz to Twoja sprawa i jak. Możesz użyć na sztywno w ciągu jak ja, ale rónie dobrze wyciągnąć podzapytaniem w samym SQL. Znów możliwości jest kilka smile.gif


EDIT: Bym zapomniał... Jeśli chcesz wyrzucić powtarzające się ( nie znam truktury bazy więc może się coś powtarzać ) to użyj DISTINCT we właściwym miejscu.

Ten post edytował thek 11.11.2009, 14:30:20


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
Buła
post
Post #7





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 21.01.2009

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


Dzięki.
Mam jeszcze jedno pytanie, chyba ostatnie biggrin.gif

Chciałbym żeby pobierało z adresu strony liczbę:

  1. $page_category=htmlspecialchars($_GET['category']);


I według pobranej zmiennej zaznaczało odpowiednią pozycję w selectbox.
Napisałem takie coś: (fragment)

  1. if ($page_category == $cat1_list_data['category_id']) { $cat1_select = 'selected'; }
  2. $cat1_list .= "<option value='".$cat1_list_data['category_id']."' ".$cat1_select."> — ".$cat1_list_data['category_name']."</option>\n";


I teraz zastanawiam się co jest nie tak, bo nie działa.
Go to the top of the page
+Quote Post
thek
post
Post #8





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




To nie działa, bo zmienna zawierająca napis selected jest czyszczona zaraz po wyjściu z warunku IF, gdyż jest zmienną lokalną. By dopisywało musisz dopisać to wewnątrz option lub zrobić ją jako lokalną dla WHILE, a jednocześnie globalną dla IF. Albo więc:
  1. $cat1_select ='';
  2. if ($page_category == $cat1_list_data['category_id']) { $cat1_select = 'selected'; }
  3. $cat1_list .= "<option value='".$cat1_list_data['category_id']."' ".$cat1_select."> ? ".$cat1_list_data['category_name']."</option>\n";
Albo trójkowy operator czyli alternatywna forma IF (chodzi o zapis by uniknąć tyle klamerek):
  1. $cat1_list .= "<option value='".$cat1_list_data['category_id']."'".( echo ($page_category == $cat1_list_data['category_id']) ? ' selected="selected"' : '' )."> ? ".$cat1_list_data['category_name']."</option>\n";


Ten post edytował thek 11.11.2009, 16:45:32


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 17:37