Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Zmienna w zmiennej
Forum PHP.pl > Forum > PHP
Buła
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?
MateuszS
tak

przed petla
$i=0;

w petli

echo $wynik['category_'.$i]; //wynik z mysql, przyklad
$i++;
Buła
  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
Fifi209
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ć.
Buła
No to jak to powinno wyglądać?
Chcę osiągnąć taki efekt jak opisałem w pierwszym poście.
thek
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.
Buła
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.
thek
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";
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.