Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][MySQL][PHP]mysql w oprion selecta
Forum PHP.pl > Forum > Przedszkole
eminiasty
Mam taki kod:
  1. <select class="form-control place_holder" name="rank" required >';
  2.  
  3. $query2="SELECT ".$prefix."rank.* FROM ".$prefix."rank ";
  4. $result = mysqli_query($link,$query2) or die(mysqli_error());
  5. echo '<option value='.$row['rank_id'].'>'.$row['name'].'</option>';
  6.  
  7. while($r = mysqli_fetch_assoc($result)) {
  8. echo '<option value='.$r['rank_id'].'>'.$r['name'].'</option>';
  9. }
  10.  
  11. echo '</select>';


Wszystko fajnie tylko problem w tym ze kod wyjsciowy zwraca cos takiego:



czyli :

w bazie w tabeli rang sa 3 rangi root,mod,user a tu zawsze zwraca mi istniejaca + te 3 z bazy

echo '<option value='.$row['rank_id'].'>'.$row['name'].'</option>'; <--- wiem ta linia mowi o tym by zwracalo istniejaca

no ale jak zrobic zeby zwrocilo 3(czyli te z tabeli rank) i zeby ta pierwsza to byla ta ktora ma uzytkownik ktory w danej chwili jest edytowany czyli zalozmy edit&id=321
KsaR
zamiast
SELECT
Zrob
SELECT DISTINCT

Za from `tabela` dodaj WHERE `id`=321
I ewentualnie za tym LIMIT 3
...
  1. $query2='SELECT DISTINCT '.$prefix.'rank.* FROM '.$prefix.'rank WHERE '.$prefix.'`id`=321 LIMIT 3';

Nie wiem, co zawiera to $prefix ale dodalem wrazie czego za WHERE tongue.gif
--
O ile dobrze zrozumialem aaevil.gif
CuteOne
Musisz wykonać dwa zapytania
1. Jest tym które zwróci przypisaną rangę
2. Te które pobierze wszystkie wyniki z bazy

Następnie w pętli porównujesz ID z pierwszego zapytania z ID drugiego, gdy się zgadzają dodajesz atrybut selected do option
eminiasty
-dwie pierwsze rzeczy juz robie
Cytat(CuteOne @ 24.09.2015, 23:13:06 ) *
gdy się zgadzają dodajesz atrybut selected do option

ale jak w select dodaje sie ify? jak jeden atrybut dac do ifa?
mazyl
do db tam gdzie masz zapisane możesz dodać kolumne selected

a w pętli do <option> dodaj warunek
  1. if($row['selected'] == true) { echo "selected"; }
eminiasty
a bez dodawania nowej kolumny nie pojdzie?

probuje na dwa sposoby ale jakos mi nie idzie

A
  1. if($r['name'] == $row['name'])
  2. {
  3. echo "<option selected='selected' value='".$row['rank_id']."'>".$row['name']."</option>";
  4. }
  5. else
  6. {
  7. '<option value='.$row['rank_id'].'>'.$row['name'].'</option>';
  8. }


B
  1. echo'<option'; if($r['name'] == $row['name']) echo"selected"; echo'>'.$row['name'].'</option>';
mazyl
  1. <select class="form-control place_holder" name="rank" required >';
  2.  
  3. $query2="SELECT ".$prefix."rank.* FROM ".$prefix."rank ";
  4. $result = mysqli_query($link,$query2) or die(mysqli_error());
  5.  
  6. while($r = mysqli_fetch_assoc($result)) {
  7.  
  8. echo '<option value='.$r['rank_id'].';
  9. if($r['selected'] == 1) { echo "selected"; }
  10. echo '>'.$r['name'].'</option>';
  11. }
  12.  
  13. echo '</select>';


wybacz nie doczytałem tego że masz już gdzieś info która ma być wyświetlana 1 opcja.

to ten kod co podesłałem, ifa przerób na warunek który ma być spełniony. wtedy nie musisz dodawać nic do db

a jest okej, zjadleś w else echo smile.gif


eminiasty
dzieki dokladnie o to chodzilo smile.gif
KsaR
Co do:
  1. echo '<option value='.$r['rank_id'].';
  2. if($r['selected'] == 1) { echo "selected"; }
  3. echo '>'.$r['name'].'</option>';


Zachęcam do zapoznania się z Ternary Operator. Przydatny tongue.gif
  1. echo '<option value="'.$r['rank_id'].'"',($r['selected']==1?' selected':''),'>'.$r['name'].'</option>';

http://davidwalsh.name/php-shorthand-if-el...rnary-operators
CuteOne
Przykład mazyla jest zły z jednego powodu, jeżeli będziesz miał więcej niż jednego użytkownika, i każdy z nich będzie miał przypisane inne role, to co wtedy? Dla każdego użytkownika będziesz tworzył nową tabelę?

W zależności od tego czy user, może mieć jedną czy wiele ról:
1. Dodaj nową tabelę, która łączy użytkownika z rolą np. user_roles (id_uzytkownika, id_roli), i jeżeli ma mieć jedną rolę, to ustaw unique na id_uzytkownika
2.
  1.  
  2. $query = mysqli_query("
  3. SELECT rank.*,
  4. (SELECT `id_roli` FROM `user_roles` WHERE `id_roli` = `rank_id` AND `id_uzytkownika` = " . $id_uzytkownika .") as `selected`
  5. FROM rank");
  6.  
  7. echo '<select>';
  8. while ($row = mysqli_fetch_assoc($query)) {
  9. echo '<option ' . (!is_null($row['selected']) ? 'selected="selected"' :'') . '>(...)</option>';
  10. }
  11. (...)

3. To jest opcja na jeden użytkownik = jedna rola, dla wielu polecam checkboxy wink.gif

smile.gif
eminiasty
nie no jest ok..

tylko teraz dziwna rzecz..

  1. <select class="form-control place_holder" name="rank">';
  2.  
  3. $query2="SELECT ".$prefix."rank.* FROM ".$prefix."rank ";
  4. $result = mysqli_query($link,$query2) or die(mysqli_error());
  5. //echo '<option value='.$row['rank_id'].'>'.$row['name'].'</option>';
  6.  
  7. while($r = mysqli_fetch_assoc($result)) {
  8.  
  9. echo '<option value="'.$r['rank_id'].'"';
  10. if($r['rank'] == $row['rank']) {
  11. echo "selected";
  12. }
  13. echo '>'.$r['rank'].'</option>';
  14.  
  15. }
  16.  
  17. echo '</select>';


wysylajac formularz nie odczytuje nic w $_POST['rank'] ? dlaczego? przeciez powinno normalnie przesylac chyba..?
CuteOne
1. Sprawdź co zwraca var_dump($_POST); .
2. Jeżeli jest pusta, to sprawdź czy w <form> masz parametr method="post"
3. Jeżeli i to nie zadziała, to pewnie coś w htmlu spieprzyłeś wink.gif
eminiasty
1. var_dump($_POST); . -> zwraca puste chodz to cholernie dziwne bo powinno wartosc ranka
2. Jeżeli jest pusta, to sprawdź czy w <form> masz parametr method="post" -> jest post
3. Jeżeli i to nie zadziała, to pewnie coś w htmlu spieprzyłeś wink.gif -> wartosc html pokazuje

inne pola z formularza dzialaja ale to jedno nie



Nie wiem czy to problem czy nie ale..
zapytanie z $row jest typu:
  1. SELECT ".$prefix."users_info.*, ".$prefix."users.*, ".$prefix."rank.*...

kazda z tych tabel am klucz glowny id(autonumerowanie)

i teraz jak mam ta pentle w switchu

  1. while($r = mysqli_fetch_assoc($result)) {
  2.  
  3. echo '<option value="'.$r['id'].'"';
  4. if($r['id'] == $row['rank_id']) {
  5. echo "selected";
  6. }
  7. echo '>'.$r['rank'].'</option>';
  8.  
  9. }


to skad php wie ze biore id z rank a nie z users skoro tak samo sie nazywa.

na poczatku towrzenia bazy chcialem nazywac pola users_id rank id itp ale ktos poweidzial ze klucze tabel wystarczy nazywac id

kod dziala juz ok, blad sie rozwiazal sam ale zostaje mi taka zagwostka?
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.