Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [HTML][MySQL][PHP]mysql w oprion selecta
eminiasty
post
Post #1





Grupa: Zarejestrowani
Postów: 267
Pomógł: 0
Dołączył: 11.09.2015

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


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





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


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

Ten post edytował KsaR 24.09.2015, 22:16:41


--------------------
Go to the top of the page
+Quote Post
CuteOne
post
Post #3





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


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

Ten post edytował CuteOne 24.09.2015, 22:13:45
Go to the top of the page
+Quote Post
eminiasty
post
Post #4





Grupa: Zarejestrowani
Postów: 267
Pomógł: 0
Dołączył: 11.09.2015

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


-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?

Ten post edytował eminiasty 24.09.2015, 22:34:50
Go to the top of the page
+Quote Post
mazyl
post
Post #5





Grupa: Zarejestrowani
Postów: 139
Pomógł: 2
Dołączył: 2.12.2011

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


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





Grupa: Zarejestrowani
Postów: 267
Pomógł: 0
Dołączył: 11.09.2015

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


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>';
Go to the top of the page
+Quote Post
mazyl
post
Post #7





Grupa: Zarejestrowani
Postów: 139
Pomógł: 2
Dołączył: 2.12.2011

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


  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


Go to the top of the page
+Quote Post
eminiasty
post
Post #8





Grupa: Zarejestrowani
Postów: 267
Pomógł: 0
Dołączył: 11.09.2015

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


dzieki dokladnie o to chodzilo smile.gif
Go to the top of the page
+Quote Post
KsaR
post
Post #9





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


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

Ten post edytował KsaR 24.09.2015, 23:05:16


--------------------
Go to the top of the page
+Quote Post
CuteOne
post
Post #10





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


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

Ten post edytował CuteOne 25.09.2015, 11:03:27
Go to the top of the page
+Quote Post
eminiasty
post
Post #11





Grupa: Zarejestrowani
Postów: 267
Pomógł: 0
Dołączył: 11.09.2015

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


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





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


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

Ten post edytował CuteOne 26.09.2015, 00:30:41
Go to the top of the page
+Quote Post
eminiasty
post
Post #13





Grupa: Zarejestrowani
Postów: 267
Pomógł: 0
Dołączył: 11.09.2015

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


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?
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 - 23:32