Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Zaznaczenie "selected" w formularzu
Forum PHP.pl > Forum > Przedszkole
Kshyhoo
1. Mam formularz, w którym pobieram wartość czasu za pomocą pola wyboru, który dodaję do obecnego czasu. Zapisuję to w bazie danych.
2. Pobieram dane z bazy i chcę zaznaczyć slelekta... problem w tym, że nie mogę poradzić sobie z wymyśleniem sposobu.
Formularz przed wysłaniem:
  1. <select id="" name="czased" class="textbox" style="width: 150px">
  2. <option value=""> Czas na edycję </option>
  3. <option value="3600" >1 godzina</option>
  4. <option value="10800" >3 godziny</option>
  5. <option value="21600" >6 godzin</option>
  6. <option value="43200" >12 godzin</option>
  7. <option value="86400" >1 dzień</option>
  8. <option value="172800" >2 dni</option>
  9. <option value="259200" >3 dni</option>

Przy zapisie:
  1. $czased = time() + 172800;//48 godzin

Przy odbiorze:
  1. <select id="" name="czased" class="textbox" style="width: 150px">
  2. <option value=""> Czas na edycję </option>
  3. <option value="3600" <?php $czasok == 3600 ? 'selected="selected"' : ''?>>1 godzina</option>
  4. <option value="10800" <?php $czasok == 10800 ? 'selected="selected"' : ''?>>3 godziny</option>
  5. <option value="21600" <?php $czasok == 21600 ? 'selected="selected"' : ''?>>6 godzin</option>
  6. <option value="43200" <?php $czasok == 43200 ? 'selected="selected"' : ""?>>12 godzin</option>
  7. <option value="86400" <?php $czasok == 86400 ? 'selected="selected"' : ""?>>1 dzień</option>
  8. <option value="172800" <?php $czasok == 172800 ? 'selected="selected"' : ""?>>2 dni</option>
  9. <option value="259200" <?php $czasok == 259200 ? 'selected="selected"' : ""?>>3 dni</option>

Problemem jest zmienny czas, który uzyskuję po pobraniu z bazy.
  1. $nowtime = time();
  2. $czasok = $czased - $nowtime;

Jakieś pomysły?
nospor
Tyle czasu na forum i nie wiesz, ze by wyswietlic cos w php to trzeba uzyc ECHO?

<?php if ($czasok == 3600) echo 'selected="selected"'; ?>
analogicznie reszta
Kshyhoo
A to przegapiłem przy wklepywaniu na forum. Powinno być tak:
  1. <select id="" name="czased" class="textbox" style="width: 150px">
  2. <option value=""> Czas na edycję </option>
  3. <option value="3600" <?php echo $czasok == 3600 ? 'selected="selected"' : ''?>>1 godzina</option>
  4. <option value="10800" <?php echo $czasok == 10800 ? 'selected="selected"' : ''?>>3 godziny</option>
  5. <option value="21600" <?php echo $czasok == 21600 ? 'selected="selected"' : ''?>>6 godzin</option>
  6. <option value="43200" <?php echo $czasok == 43200 ? 'selected="selected"' : ''?>>12 godzin</option>
  7. <option value="86400" <?php echo $czasok == 86400 ? 'selected="selected"' : ''?>>1 dzień</option>
  8. <option value="172800" <?php echo $czasok == 172800 ? 'selected="selected"' : ''?>>2 dni</option>
  9. <option value="259200" <?php echo $czasok == 259200 ? 'selected="selected"' : ''?>>3 dni</option>
nospor
$nowtime = time();
$czasok = $czased - $nowtime;
No dobra, ale przeciez time() w momencie zapisywania do bazy oraz w momencie odczytu z bazy bedzie rozny, wiec nigdy nie otrzymasz wartosci 3600, 10800..... itd... znaczy nie nigdy, ale baaaaardzo rzadko.... Musisz w bazie zapisywac normalnie wartosc 3600, 10800 ... itd i ja potem wyswietlac.
freemp3
W zasadzie ten kod zadziała tylko w dwóch przypadkach, wtedy gdy zmienna będzie miała wartość 10800 oraz będzie z przedziału od 172800 do 259199.
Dlaczego tak? A no dlatego, ze przecież 3600 także jest mniejsze od 21600 i 43200 itd. Musisz sprecyzować zakresy zarówno od górnej jak i dolnej granicy. Ponad to zapisujesz np. wartość 3600 a później sprawdasz czy czas jest mniejsze? Może lepiej będzie dodać mniejsze lub równe?

Dodatkowo co jeśli zmienna będzie równa bądź większa 259200?
Kshyhoo
No właśnie o to chodzi. Mam sporo wpisów w bazie i teraz zmieniać wszystko...?
Jak dam zapis:
  1. <?php echo $czasok >= 3600 ? 'selected="selected"' : ''?>

to mi pokazuje jedną poniżej (czyli np. zamiast 12 godzin, pokaże 6). Jak zrobię:
  1. <?php echo $czasok <= 3600 ? 'selected="selected"' : ''?>

to mi pokazuję ostatnią...
nospor
Cytat
. Mam sporo wpisów w bazie i teraz zmieniać wszystko...?
Jak sie zle projektuje to potem niestety tak jest wink.gif
Jak bedziesz zaokragla to przy zapisie bedziesz znowu modyfikowal wpis i jak przy dodanio ustawiles na 4 godziny, a przy modyfikacji zaokraglisz do 2, to zamiast wstepnie na 4 godziny przestawi ci sie na 4 godziny i 20 minut. Jest to prawidlowe zalozenie w twojej aplikacji?

Jesli zakragalnie nadal ci pasuje to musisz leciec od wartosci najwiekszej i sprawdzac czasok < odtej wartosci. jesli jest prawda to ja ustawiasz jako czasok i w ten sposob bedziesz mial wartosc $czasok. Potem w swoich option normalnie robisz jak robiles:
?php echo $czasok == 3600 ? 'selected="selected"' : ''?>
proste
Kshyhoo
To było najprostsze rozwiązanie. Potrzebne jest mi do do edycji artykułu. Do time() dodaję zadeklarowany czas i zapisuję w bazie, przy pobieraniu z bazy porównuję do z obecnym i mam pozostały czas do edycji.
nospor
No to ci napisalem:
Cytat
Jesli zakragalnie nadal ci pasuje to musisz leciec od wartosci najwiekszej i sprawdzac czasok < odtej wartosci. jesli jest prawda to ja ustawiasz jako czasok i w ten sposob bedziesz mial wartosc $czasok. Potem w swoich option normalnie robisz jak robiles:
?php echo $czasok == 3600 ? 'selected="selected"' : ''?>
proste
Kshyhoo
I tak będę musiał na razie zaznaczać. Teraz zabieram się za coś ambitniejszego, kategorie w multiple:
  1. $result = dbquery("SELECT kat_id, kat_kategoria FROM kategorie WHERE kat_cat='0' ORDER BY kat_order");
  2. if (dbrows($result) != 0) {
  3. while ($data = dbarray($result)) {
  4. $result2 = dbquery("SELECT kat_id, kat_kategoria FROM kategorie WHERE kat_cat='".$data['kat_id']."' ORDER BY kat_order");
  5. if (dbrows($result2) != 0) {
  6. $kat_list .= "<optgroup label='".$data['kat_kategoria']."'>\r\n";
  7. while ($data2 = dbarray($result2)) {
  8. if ($_GET['kat_id'] == $data2['kat_id']) {
  9. $sel = " selected";
  10. } else {
  11. $sel = "";
  12. }
  13. $kat_list .= "<option value='".$data2['kat_id']."'$sel>".$data2['kat_kategoria']."</option>\r\n";
  14. }
  15. $kat_list .= "</optgroup>\r\n";
  16. }
  17. }
  18. }
  19. echo '<select name="kat_id[]" id="kat" class="textbox" style="width: 150px" size="5" multiple>'.$kat_list.'</select>';

Jak to zaznaczyć?
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.