Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]Pobieranie danych z bazy danych do listy rozwijalnej.
Forum PHP.pl > Forum > Przedszkole
Vion
Witam
Zrobiłem sobie taki skrypt który pozwala dodać menu które może należeć do dowolnego bloku. I teraz chcę umożliwić edycję danego menu, żeby użytkownik mógł wybrać z listy rozwijalnej blok do którego ma należeć menu po edycji. Ale ważne jest aby w liście rozwijalnej jako selected była zaznaczony blok przed edycją. Zrobiłem do tego taki skrypt

  1. <select name="blok_id">
  2.            <option value="<?php echo $row1['blok_id'];?>" selected>
  3.            
  4.            <?php echo $row1['blok_name'];?>
  5.            </option>
  6.            <?php
  7.            $wynik = mysql_query("SELECT * FROM engine_menu_blok");
  8.            while($row = mysql_fetch_assoc($wynik)) { ?>
  9.            <option value="<?php echo $row['blok_id'];?>"><?php echo $row['blok_name'];?></option>; <?php
  10.             } ?>
  11.    </select>


Ale wychodzi mi coś takiego że w liście rozwijalnej jest jako selected zaznaczona stara opcja, ale też jest w liście jako nowa opcja czyli 2 razy. Więc jak zrobić aby opcja zaznaczona w selected sie nie powtarzała ? Dla lepszego zrozumienia dodaję obrazek gdzie widać ten błąd. Opcja Menu Glowne wystepuje 2 dwukrotnie raz jako selected a drugi raz gdy z bazy są pobierane wszystkie opcje.

Daiquiri
Jeżeli musi tam być ten wynik górny (o ile dobrze rozumiem) to po prostu zrób warunek po while: jeżeli $row['blok_name'] = cośtam to nie rób nic, w innym przypadku wyświetl kolejny poziom listy. Ewentualnie jeżeli $row['blok_name'] = cośtam to wyświetlaj jako selected, a w innym przypadku normalnie party.gif .
Miszazdw
Cytat(Vion @ 7.08.2009, 13:23:06 ) *
  1. <select name="blok_id">
  2.            <option value="<?php echo $row1['blok_id'];?>" selected>
  3.            
  4.            <?php echo $row1['blok_name'];?>
  5.            </option>
  6.            <?php
  7.            $wynik = mysql_query("SELECT * FROM engine_menu_blok");
  8.            while($row = mysql_fetch_assoc($wynik)) { ?>
  9.            <option value="<?php echo $row['blok_id'];?>"><?php echo $row['blok_name'];?></option>; <?php
  10.             } ?>
  11.    </select>


Popatrz na swój kod. Najpierw dajesz jedna opcje - na początku.

  1. <option value="<?php echo $row1['blok_id'];?>" selected>
  2.  
  3. <?php echo $row1['blok_name'];?>
  4. </option>


a później wszystko listujesz pętlą while. To logiczne ze pierwszy wpis pojawi się dwa razy. Tak na szybko zagnieźdź kolejną pętle w while, i wtedy if-a daj i po problemie. if($==1) {}.

Pozdrawiam
kefirek
  1. <?php
  2. $result = mysql_query("SELECT * FROM engine_menu_blok");
  3. $link = ""; $sel = "";
  4. while ($data = mysql_fetch_assoc($result)) {
  5. if (isset($site_links)) $sel = ($site_links == $data['blok_id'] ? " selected" : "");
  6. $link .= "<option value='".$data['blok_id']."'$sel>".$data['blok_name']."</option>\n";
  7. }
  8. echo "<select name='cat'  style='width:250px;'>$link</select>";
  9. ?>
Vion

gdyby ktoś miał podobny problem to prezentuje tutaj rozwiązanie które dostałem na innym forum

  1. <select name="blok_id">
  2. <?php
  3. $wynik = mysql_query("SELECT * FROM engine_menu_blok");
  4. while($row = mysql_fetch_assoc($wynik)) { ?>
  5. <option value="<?php echo $row['blok_id'];?>" <?php echo $row1['blok_id']==$row['blok_id']?"selected":""; ?>><?php echo $row['blok_name'] ?></option>; <?php
  6. } ?>
  7. </select>
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.