Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] aktualna wartość w liście wyboru
Forum PHP.pl > Forum > Przedszkole
ten_typ
Mam kod:
  1. <?php
  2. echo '<tr><td>Poziom:</td><td>
  3.        <div><select name="id_kursu">';
  4. $wynik = mysql_query("SELECT kurs.id_kursu, kurs.nazwa_kursu, poziom.nazwa_poziomu from poziom inner join poziom_kursu on poziom.id_poziomu=poziom_kursu.id_poziomu inner join kurs on poziom_kursu.id_kursu=kurs.id_kursu");
  5. $ilosc_wierszy1 = mysql_num_rows($wynik);
  6. for ($i = 0; $i <$ilosc_wierszy1 ; $i++){
  7. $wiersz = mysql_fetch_array($wynik);
  8. echo "<option value=\"".$wiersz["id_kursu"]."\">".$wiersz["nazwa_poziomu"]." ".$wiersz["nazwa_kursu"]."";
  9. }
  10. echo </option></select></div></td></tr>
  11. ?>


Jak zrobić, aby pokazywało mi aktualny wybór?
Grzyw
Na przykład tak:

  1. <?php
  2. echo '<tr><td>Poziom:</td><td>
  3.       <div><select name="id_kursu">';
  4. $wynik = mysql_query("SELECT kurs.id_kursu, kurs.nazwa_kursu, poziom.nazwa_poziomu from poziom inner join poziom_kursu on poziom.id_poziomu=poziom_kursu.id_poziomu inner join kurs on poziom_kursu.id_kursu=kurs.id_kursu");
  5. $ilosc_wierszy1 = mysql_num_rows($wynik);
  6. for ($i = 0; $i <$ilosc_wierszy1 ; $i++){
  7. $wiersz = mysql_fetch_array($wynik);
  8. $selected = ($wiersz['id_kursu']==$tutaj_zmienna_ktora_przechowuje_wybrana_wartosc) ? 'selected="selected" : ';
  9. echo "<option $selected value=\"".$wiersz["id_kursu"]."\">".$wiersz["nazwa_poziomu"]." ".$wiersz["nazwa_kursu"]."";
  10. }
  11. echo </option></select></div></td></tr>
  12. ?>


Przy okazji, poczytaj o foreach" title="Zobacz w manualu PHP" target="_manual i zastąp tą instrukcją pętlę for
ten_typ
Zrobiłem tak:
  1. <?php
  2. <tr><td>Poziom:</td><td>
  3.        <div><select name="id_kursu">';
  4. $wynik = mysql_query("SELECT id_kursu, nazwa_kursu, nazwa_poziomu from kurs inner join poziom_kursu using (id_kursu) inner join poziom using (id_poziomu)");
  5. $ilosc_wierszy1 = mysql_num_rows($wynik);
  6. for ($i = 0; $i <$ilosc_wierszy1 ; $i++)
  7. {
  8. $wiersz = mysql_fetch_array($wynik);
  9. $selected = ($wiersz['id_kursu']==$id_kursu); 'selected="selected" : ';
  10. echo "<option $selected value=\"".$wiersz["id_kursu"]."\">".$wiersz["nazwa_poziomu"]." ".$wiersz["nazwa_kursu"]."";
  11. }
  12. echo '</option></select></div></td></tr>
  13. ?>


Ale nie pokazuje się ta zaznaczona opcja, pokazuje 1 rekord z tabeli.
Rafal Filipek
straszny bałagan zrobiliście i do tego z błędami :
Kod
<select name="id_kursu">
<?php
$q = mysql_query('SELECT id_kursu, nazwa_kursu, nazwa_poziomu from kurs inner join poziom_kursu using (id_kursu) inner join poziom using (id_poziomu);');
while($row = mysql_fetch_array($q)){
    $selected = ($row['id_kursu']==$id_kursu) ? 'selected="selected"' : '';
    echo '<option '.$selected.' value="'.$row['id_kursu'].'">';
    echo $row['nazwa_poziomu'].' '.$row['nazwa_kursu'];
    echo '</option>';
}
?>
</select>
ten_typ
Niestety nadal to samo :<
Rafal Filipek
Ale co to samo ? Pokazuje 1 rekord czy nie zaznacza ? Jak pokazuje 1 rekord to sobie sprawdz najpier czy twoje zapytanie zwraca więcej niż 1 rekord mysql_num_rows. A jak nie zaznacza to znaczy ze cos jest nie tak z ta zminna $id_kursu.
nospor
No ale czy $id_kursu zawiera to co ma zawierac? Zrob echo i sprawdź!
Jak nie zawiera to chyba nalezy to pobrac z forma, czyli z $_POST lub $_GET w zaleznosci od metody jaką wysylasz forma
ten_typ
Pokazuje pierwszy rekord z tabeli ale jak rozwinę to są wszystkie więc to jest ok, tylko że powinno pokazywać rekord który jest "aktualny".
  1. <?php
  2. elseif ($_GET['x'] == 'edytuj') {
  3. $zapytanie = "SELECT * FROM grupa where id_grupy='".$_GET['id_grupy']."'";
  4. $wynik = mysql_query ($zapytanie);
  5. $rekord = mysql_fetch_assoc ($wynik);
  6. $id_grupy = $rekord['id_grupy']; $nazwa_grupy = $rekord['nazwa_grupy']; $zajecia_1 = $rekord['zajecia_1'];
  7. $godzina_1 = $rekord['godzina_1']; $zajecia_2 = $rekord['zajecia_2']; $godzina_2 = $rekord['godzina_2'];
  8. $opis_grupy = $rekord['opis_grupy']; $id_kursu = $rekord['id_kursu']; $nazwa_kursu = $rekord['nazwa_kursu'];
  9. $nazwa_poziomu = $rekord['nazwa_poziomu'];
  10. echo   '<form method="post"><h3>Edycja<h3><input type="hidden" name="x" value="popraw">
  11.        <input type="hidden" name="id_grupy" value="'.$id_grupy.'">
  12.        <table width=90% align=center>
  13.        <tr><td>Nazwa grupy:</td><td><input type="text" name="nazwa_grupy" value="'.$nazwa_grupy.'"></td></tr>
  14.        <tr><td>Poziom:</td><td>
  15.        <div><select name="id_kursu">';
  16. $zapytanie = mysql_query("SELECT * from poziom inner join poziom_kursu on poziom.id_poziomu=poziom_kursu.id_poziomu inner join kurs on poziom_kursu.id_kursu=kurs.id_kursu");
  17. while($rekord = mysql_fetch_array($zapytanie)){
  18.    $selected = ($rekord['id_kursu']==$id_kursu) ? 'selected="selected"' : '';
  19.    echo '<option '.$selected.' value="'.$rekord['id_kursu'].'">';
  20.    echo $rekord['nazwa_poziomu'].' '.$rekord['nazwa_kursu'];}
  21.    echo '</option></select></div></td></tr>
  22.         <tr><td>Zajęcia (1 dzień):</td><td><input type="text" name="zajecia_1" value="'.$zajecia_1.'"></td></tr>
  23.        <tr><td>Godzina (1 zajęć):</td><td><input type="text" name="godzina_1" value="'.$godzina_1.'"></td></tr>
  24.        <tr><td>Zajęcia (2 dzień):</td><td><input type="text" name="zajecia_2" value="'.$zajecia_2.'"></td></tr>
  25.        <tr><td>Godzina (2 zajęć):</td><td><input type="text" name="godzina_2" value="'.$godzina_2.'"></td></tr>
  26.        <tr><td>Opis grupy:</td><td><input type="text" name="opis_grupy" value="'.$opis_grupy.'"></td></tr>
  27.        <tr><td></td><td><input type="submit" value="Edytuj"></td></tr></table>
  28.        </form>';
  29. ?>
Rafal Filipek
no pewnie, jak sie przeklepuje bez zastanowienia to co inni pisza to nie dziala. Powiedz mi kolego cos o zmiennej $id_kursu ktora widac w wierszu 20. ? gdzie ona jest definiowana, co przechowuje itp. - smiało smile.gif
ten_typ
Co przechowuje? Nie wiem czy o to chodzi ale ustala, który id_poziomu jest do niej dopisany i dzięki temu mamy wybór.
A gdzie jest definiowana.. wiem, że ze mną jak ze skazańcem ale staram się jakoś tego nauczyć..
Rafal Filipek
dobra, moze tak. Jak generujesz sobie te opcje w selekcie to robisz to w petli. i w tej petli masz taki wiersz
Kod
$selected = ($rekord['id_kursu']==$id_kursu) ? 'selected="selected"' : '';

i teraz tak. Zmienna $rekord['id_kursu'] zmienia sie dla kazdego rekordu przerabianego w petli wiec przykladowo kolejno moze miec wartosci 1,2,7,8,9,12 i tak dalej. Natomiast zmienna $id_kursu jest to zmienna ( dziwnie to zabrzmi ) stała która przechowuje cały czas jedna tą samą wartość ( mam taką nadzieje ). Żeby sprawdzić co przechowuje ta zmienna przed wierszem
Kod
while($rekord = mysql_fetch_array($zapytanie)){

wstaw
Kod
var_dump($id_zmienna);

na stronie pojawi ci sie wartosc jaka przechowuje ta zmienna. zeby caly skrypt dzialal ok. wartosc id zmienna musi byc rowna jednej z wartosci ktora pojawia sie dla $rekord['id_kursu']. czli w naszym przypadku w polu select bedzie zaznaczona odpowiednia pozycja jezeli $id_zmienna bedzie miała wartosc 1 lub 2lub 7lub 8lub 9lub 12.
ten_typ
Dzięki za wyrozumiałość.
Po wpisaniu
  1. <?php
  2. var_dump($id_kursu='2');
  3. ?>

i kolejnych 4,5,6 to w miejscu gdzie pojawiał mi się pierwszy rekord z tabeli, to pojawia mi się odpowiednio 2, 4, 5, 6 rekord z tabeli.
Rafal Filipek
Kod
var_dump($id_kursu); //i nic więcej
ten_typ
Jednak nie działa - nie pokazuje 'aktualnego' rekordu, tylko pierwszy z tabeli, jeśli dam:
  1. <?php
  2. var_dump($id_kursu='5');
  3. ?>

to działa, ale samo $id_kursu nie.
Grzyw
Cytat(ten_typ @ 9.01.2009, 08:26:53 ) *
Jednak nie działa - nie pokazuje 'aktualnego' rekordu, tylko pierwszy z tabeli, jeśli dam:
  1. <?php
  2. var_dump($id_kursu='5');
  3. ?>

to działa, ale samo $id_kursu nie.


Taki zapis nie ma sensu, działać będzie zawsze. var_dump" title="Zobacz w manualu PHP" target="_manual wyświetla Ci info o zmiennej, włącznie z wyświetleniem jej zawarości. W kodzie:
  1. <?php
  2. var_dump($id_kursu='5');
  3. ?>
najpierw zostaje przypisany do zmiennej string o treści '5', następnie jest ona analizowana.
Jeżeli nie działa samo var_dump($id_kursu), znaczy to, że zmienna jest pusta.
A jest pusta, bo tak, jak pisał Nospor, nie przypisałeś do niej wartości z formularza.
Pamiętaj, że po przesłaniu formularza wartości z niego siedzą w tzw. tablicach superglobalnych. W zależności od atrybutu "method" formularza, będą siedzieć albo w $_POST, albo w $_GET. U Ciebie jest method="post", więc dopisz:
  1. <?php
  2. $id_kursu = $_POST['id_kursu'];
  3. ?>


Na marginesie, tablica superglobalna $_REQUEST przechowuje $_POST i $_GET razem.
ten_typ
Dzięki ;-)

po wpisaniu $id_kursu = $rekord['id_kursu']; po while pokazuje ostatni rekord z tabeli, a po wpisaniu w inne miejsce 1 rekord pokazuje ;x
Grzyw
Zamiast:
  1. <?php
  2. while($rekord = mysql_fetch_array($zapytanie)){
  3.   $selected = ($rekord['id_kursu']==$id_kursu) ? 'selected="selected"' : '';
  4.   echo '<option '.$selected.' value="'.$rekord['id_kursu'].'">';
  5.   echo $rekord['nazwa_poziomu'].' '.$rekord['nazwa_kursu'];}
  6.   echo </option></select></div></td></tr>
  7. ?>


zmień lokalizację klamry zamykającej

  1. <?php
  2. while($rekord = mysql_fetch_array($zapytanie)){
  3.   $selected = ($rekord['id_kursu']==$id_kursu) ? 'selected="selected"' : '';
  4.   echo '<option '.$selected.' value="'.$rekord['id_kursu'].'">';
  5.   echo $rekord['nazwa_poziomu'].' '.$rekord['nazwa_kursu'];
  6.   echo '</option>'; }
  7.   echo </select></div></td></tr>;
  8. ?>
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.