Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]Kolejność w select
Forum PHP.pl > Forum > Przedszkole
Endri
Witam. Piszę system artykułów i doszedłem do kodu, który ma edytować artykuły z bazy danych. Plik wysyłający dane do bazy danych działa, ale pojawił się problem z formularzem.
Każdy artykuł ma przyporządkowane ID kategorii, do której należy.

Wygląda on tak:
  1. <?php
  2.    $id=$_GET['id'];
  3. $uchwyt = mysqli_connect('localhost', 'root' , '');
  4. mysqli_select_db($uchwyt, "strona");
  5.    $query=mysqli_query($uchwyt, "SELECT * FROM artykuly WHERE id='$id'");
  6. $rekord=mysqli_fetch_array($query);
  7. $idkat=$rekord['idkat'];
  8. $query2=mysqli_query($uchwyt, "SELECT nazwa FROM category WHERE id='$idkat'");
  9. $wiersz=mysqli_fetch_array($query);
  10. $nazwa=$wiersz['nazwa'];
  11. $query = mysqli_query($uchwyt, "select * from category order by id desc limit 0,3");
  12.  
  13.    echo 'Edytuj Artykuł';
  14.    echo '<form method="POST" action="edytujform.php?id='.$rekord['id'].'">';
  15.    echo 'Tytuł:<br /><textarea type="text" name="tytul">'.$rekord['tytul'].'</textarea><br />';
  16.    echo 'Treść:<br /><textarea type="text" name="tresc">'.$rekord['tresc'].'</textarea>';
  17.    echo '<select name="kategoria"/>';
  18.    $querys=mysqli_query($uchwyt, "SELECT * FROM category");
  19.           while($wiersz = mysqli_fetch_array($querys))
  20.              {
  21.        
  22.            $id = $wiersz['id'];
  23.        $nazwa = $wiersz['nazwa'];
  24.  
  25.              echo "<option value=$id>$nazwa</option>";
  26.          }
  27.          echo '</select>';
  28.    echo '<input type="submit" value="Edytuj">';
  29.    echo '</form>';
  30. ?>


Problem pojawia się przy kategorii. Chcę, aby była możliwość jej edycji, ale nie wiem jak zrobić, aby w 1 polu pojawiała się nazwa kategorii, do której należy artykuł.

Przykład: Artykuł należy do 3 kategorii.
Zamiast:
1
2
3
4
(to robi mój skrypt)
Było:
3
1
2
4


Zna ktoś może sposób na zrobienie tego? Mój jedyny pomysł opierał się na wyświetleniu ręcznie a nie z while nazwy kategorii.

W razie niejasności - pytać.
zebupl
Szczerze, nie rozumiem z czym dokładnie masz problem, może jednak troszkę jaśniej?
Endri
Chcę, żeby w polu <select> wyświetlało na 1 pozycji nazwę kategorii, w której jest dany artykuł, a dopiero potem resztę. Dlatego proszę o pomoc.

Zrozumiałe już?
webasek
Możesz zrobić sprawdzenie czy kolejna kategoria jest taka jak kategoria artykułu jeśli tak to w option dajesz selected i gotowe
drzalek
Miałem ten sam problem, rozwiązałem go w ten sposób, że poza pętlą na pierwszym miejscu umiesciłem kategorię do której należy "artykuł"

  1. <select name="nazwa">
  2. <?php
  3. $zapytanie1="SELECT * FROM artykuły WHERE artykuł=1";
  4. $query1=mysql_query($zapytanie1);
  5. $row1=mysql_fetch_array($query1);
  6.  
  7. $zaytanie2="SELECT * FROM kategorie ORDER BY id_kategorii";
  8. $query2=mysql_query($zapytanie2);
  9.  
  10. echo '<option value="row1['id_kategorii']">'.$row1['kategoria'].'</option>';
  11. while($row2($query2))
  12. {
  13. echo '<option value="'.$row2['id_kategorii'].'">'.$row2['kategoria'].'</option>';
  14. }
  15. ?>
  16. </select>


Tym sposobem mam tą daną kategorię dwa razy w liście, ale w sumie to nie przeszkadza, przynajmniej u mnie smile.gif
kusiu
  1. <?php
  2.    $id=$_GET['id'];
  3. $uchwyt = mysqli_connect('localhost', 'root' , '');
  4. mysqli_select_db($uchwyt, "strona");
  5.    $query=mysqli_query($uchwyt, "SELECT * FROM artykuly WHERE id='$id'");
  6. $rekord=mysqli_fetch_array($query);
  7. $idkat=$rekord['idkat'];
  8. $query2=mysqli_query($uchwyt, "SELECT nazwa FROM category WHERE id='$idkat'");
  9. $wiersz=mysqli_fetch_array($query);
  10. $nazwa=$wiersz['nazwa'];
  11. $query = mysqli_query($uchwyt, "select * from category order by id desc limit 0,3");
  12.  
  13.    echo 'Edytuj Artykuł';
  14.    echo '<form method="POST" action="edytujform.php?id='.$rekord['id'].'">';
  15.    echo 'Tytuł:<br /><textarea type="text" name="tytul">'.$rekord['tytul'].'</textarea><br />';
  16.    echo 'Treść:<br /><textarea type="text" name="tresc">'.$rekord['tresc'].'</textarea>';
  17.    echo '<select name="kategoria"/>';
  18.    $querys=mysqli_query($uchwyt, "SELECT * FROM category");
  19.           while($wiersz = mysqli_fetch_array($querys))
  20.              {
  21.        
  22.            $id = $wiersz['id'];
  23.            $nazwa = $wiersz['nazwa'];
  24.            if($_GET['id']==$id) $selected="selected";
  25.            else $selected="";
  26.              echo "<option value=$id $selected>$nazwa</option>";
  27.          }
  28.          echo '</select>';
  29.    echo '<input type="submit" value="Edytuj">';
  30.    echo '</form>';
  31. ?>
zebupl
Więc tak jeśli masz poprawnie skonstruowaną bazę czyli

Tabela artykuły : Tabela kategorie (1:n - każdy artykuł należy do jednej kategorii a każda kategoria może być przypisana do n artykułów) wówczas wystarczy:

  1. SELECT * FROM artykuly WHERE id='$id


w tym zapytaniu masz dane o artykule ale również dane (klucz obcy) do kategorii i w option robisz selected jeśli ten klucz jest równy temu z listy kategorii jaką pobierasz.

pozdrawiam
munky
Endri
kusiu:
Kod nie działa, nie wyświetla żadnego błędu.
webasek
Możesz skorzystać z tego co napisał drzalek tylko dodać

  1. <select name="nazwa">
  2. <?php
  3. $zapytanie1="SELECT * FROM artykuły WHERE artykuł=1";
  4. $query1=mysql_query($zapytanie1);
  5. $row1=mysql_fetch_array($query1);
  6.  
  7. $zaytanie2="SELECT * FROM kategorie ORDER BY id_kategorii";
  8. $query2=mysql_query($zapytanie2);
  9.  
  10. echo '<option value="row1['id_kategorii']">'.$row1['kategoria'].'</option>';
  11. while($row2($query2))
  12. {
  13. if (row1['id_kategorii'] !=$row2['id_kategorii'])
  14. {
  15. echo '<option value="'.$row2['id_kategorii'].'">'.$row2['kategoria'].'</option>';
  16. }
  17. }
  18. ?>
  19. </select>


Po za tym dostałeś trzy te same odpowiedzi nawet kusiu pokusił się o napisanie kodu kombinuj bo to jest rozwiązanie.
drzalek
Heh, że też nie wpadłem na to, że if'em można się pozbyć dublującego się option smile.gif także dzięki smile.gif
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.