Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL]Kolejność w select
-Endri-
post
Post #1





Goście







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ć.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
zebupl
post
Post #2





Grupa: Zarejestrowani
Postów: 26
Pomógł: 2
Dołączył: 7.10.2008

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


Szczerze, nie rozumiem z czym dokładnie masz problem, może jednak troszkę jaśniej?
Go to the top of the page
+Quote Post
-Endri-
post
Post #3





Goście







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





Grupa: Zarejestrowani
Postów: 274
Pomógł: 35
Dołączył: 18.07.2008
Skąd: Kielce

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


Możesz zrobić sprawdzenie czy kolejna kategoria jest taka jak kategoria artykułu jeśli tak to w option dajesz selected i gotowe


--------------------
"Tylko dwie rzeczy są nieskończone: wszechświat oraz ludzka głupota,
choć nie jestem pewien co do tej pierwszej." Albert Einstein

Wirtualny Rynek Predykcyjny
Go to the top of the page
+Quote Post
drzalek
post
Post #5





Grupa: Zarejestrowani
Postów: 170
Pomógł: 18
Dołączył: 6.03.2007

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


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





Grupa: Zarejestrowani
Postów: 163
Pomógł: 10
Dołączył: 24.01.2006

Ostrzeżenie: (30%)
XX---


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





Grupa: Zarejestrowani
Postów: 26
Pomógł: 2
Dołączył: 7.10.2008

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


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





Goście







kusiu:
Kod nie działa, nie wyświetla żadnego błędu.
Go to the top of the page
+Quote Post
webasek
post
Post #9





Grupa: Zarejestrowani
Postów: 274
Pomógł: 35
Dołączył: 18.07.2008
Skąd: Kielce

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


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.


--------------------
"Tylko dwie rzeczy są nieskończone: wszechświat oraz ludzka głupota,
choć nie jestem pewien co do tej pierwszej." Albert Einstein

Wirtualny Rynek Predykcyjny
Go to the top of the page
+Quote Post
drzalek
post
Post #10





Grupa: Zarejestrowani
Postów: 170
Pomógł: 18
Dołączył: 6.03.2007

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


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
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 - 09:35