Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Optymalizacja kodu
Forum PHP.pl > Forum > Przedszkole
jabtony
Witam wszystkich. Ucze sie php od nie dawna i dla nauki tworze przyklad w ktorym zrobilem cos takiego :

Lista wybiernia - po wybraniu opcji wpis w bazie jest zmieniany na wybrany z listy

Lista otwiera sie z wybranym polem ( zaciagnietym z bazy)

Jak moza to rozwiazac inaczej ? Bo to jest troche lopatologiczne ale w koncu mi zadzialalo.

Problem byl taki ze w pierwszym wpisie select byl zaznaczony na pozycji zaciagnietej z bazy, w drugim tez ale zaznaczal rowniez wpis poprzedni itd...

Ma ktos jakies pomysly ?

  1.  
  2. while ( $row = mysql_fetch_assoc($wynik) ) {
  3.  
  4. if($row['status']==1){
  5. $bgcolor='class="status1"';
  6. $ts1='selected';
  7. $ts2=' ';
  8. $ts3=' ';
  9. $ts4=' ';
  10. $ts5=' ';
  11. $ts6=' ';
  12. $ts7=' ';
  13. $ts8=' ';
  14. $ts9=' ';
  15. $ts10=' ';
  16. $ts0=' ';
  17. }
  18. elseif($row['status']==2){
  19. $bgcolor='class="status2"';
  20. $ts1='';
  21. $ts2='selected';
  22. $ts3=' ';
  23. $ts4=' ';
  24. $ts5=' ';
  25. $ts6=' ';
  26. $ts7=' ';
  27. $ts8=' ';
  28. $ts9=' ';
  29. $ts10=' ';
  30. $ts0=' ';
  31. }
  32. elseif($row['status']==3){
  33. $bgcolor='class="status3"';
  34. $ts1='';
  35. $ts2='';
  36. $ts3='selected';
  37. $ts4=' ';
  38. $ts5=' ';
  39. $ts6=' ';
  40. $ts7=' ';
  41. $ts8=' ';
  42. $ts9=' ';
  43. $ts10=' ';
  44. $ts0=' ';
  45. }
  46. elseif($row['status']==4){
  47. $bgcolor='class="status4"';
  48. $ts1='';
  49. $ts2='';
  50. $ts3='';
  51. $ts4='selected';
  52. $ts5=' ';
  53. $ts6=' ';
  54. $ts7=' ';
  55. $ts8=' ';
  56. $ts9=' ';
  57. $ts10=' ';
  58. $ts0=' ';
  59. }
  60. elseif($row['status']==5){
  61. $bgcolor='class="status5"';
  62. $ts1='';
  63. $ts2='';
  64. $ts3='';
  65. $ts4='';
  66. $ts5='selected ';
  67. $ts6=' ';
  68. $ts7=' ';
  69. $ts8=' ';
  70. $ts9=' ';
  71. $ts10=' ';
  72. $ts0=' ';
  73. }
  74. elseif($row['status']==6){
  75. $bgcolor='class="status6"';
  76. $ts1='';
  77. $ts2='';
  78. $ts3=' ';
  79. $ts4=' ';
  80. $ts5='';
  81. $ts6='selected ';
  82. $ts7=' ';
  83. $ts8=' ';
  84. $ts9=' ';
  85. $ts10=' ';
  86. $ts0=' ';
  87. }
  88. elseif($row['status']==7){
  89. $bgcolor='class="status7"';
  90. $ts1='';
  91. $ts2='';
  92. $ts3=' ';
  93. $ts4=' ';
  94. $ts5='';
  95. $ts6=' ';
  96. $ts7='selected ';
  97. $ts8=' ';
  98. $ts9=' ';
  99. $ts10=' ';
  100. $ts0=' ';
  101. }
  102. elseif($row['status']==8){
  103. $bgcolor='class="status8"';
  104. $ts1='';
  105. $ts2='';
  106. $ts3=' ';
  107. $ts4=' ';
  108. $ts5='';
  109. $ts6=' ';
  110. $ts7=' ';
  111. $ts8='selected ';
  112. $ts9=' ';
  113. $ts10=' ';
  114. $ts0=' ';
  115. }
  116. elseif($row['status']==9){
  117. $bgcolor='class="status9"';
  118. $ts1='';
  119. $ts2='';
  120. $ts3=' ';
  121. $ts4=' ';
  122. $ts5='';
  123. $ts6=' ';
  124. $ts7=' ';
  125. $ts8=' ';
  126. $ts9=' selected';
  127. $ts10=' ';
  128. $ts0=' ';
  129. }
  130. elseif($row['status']==10){
  131. $bgcolor='class="status10"';
  132. $ts1='';
  133. $ts2='';
  134. $ts3=' ';
  135. $ts4=' ';
  136. $ts5='';
  137. $ts6=' ';
  138. $ts7=' ';
  139. $ts8=' ';
  140. $ts9=' ';
  141. $ts10='selected ';
  142. $ts0=' ';
  143. }
  144. else
  145. {
  146. $bgcolor='class="status0"';
  147. $ts1='';
  148. $ts2='';
  149. $ts3=' ';
  150. $ts4=' ';
  151. $ts5='';
  152. $ts6=' ';
  153. $ts7=' ';
  154. $ts8=' ';
  155. $ts9=' ';
  156. $ts10=' ';
  157. $ts0='selected ';
  158. }


odnosi sie to do

  1. <select id="cos" onchange="self.location.href = this.value" size="1" name="statusy">
  2. <option '.$ts1.' value="zmienstatus.php?id='.$row['id'].'&a=status&s=1">1 </option>
  3. <option '.$ts2.' value="zmienstatus.php?id='.$row['id'].'&a=status&s=2">2 </option>
  4. <option '.$ts3.' value="zmienstatus.php?id='.$row['id'].'&a=status&s=3">3 </option>
  5. <option '.$ts4.' value="zmienstatus.php?id='.$row['id'].'&a=status&s=4">4</option>
  6. <option '.$ts5.' value="zmienstatus.php?id='.$row['id'].'&a=status&s=5">5</option>
  7. <option '.$ts6.' value="zmienstatus.php?id='.$row['id'].'&a=status&s=6">6</option>
  8. <option '.$ts7.' value="zmienstatus.php?id='.$row['id'].'&a=status&s=7">7</option>
  9. <option '.$ts8.' value="zmienstatus.php?id='.$row['id'].'&a=status&s=8">8</option>
  10. <option '.$ts9.' value="zmienstatus.php?id='.$row['id'].'&a=status&s=9"></option>
  11. <option '.$ts10.' value="zmienstatus.php?id='.$row['id'].'&a=status&s=10"> 10</option>
  12. <option '.$ts0.' value="zmienstatus.php?id='.$row['id'].'&a=status&s=0">0</option>
  13.  
  14.  
  15. </select>
com
jakoś tak bardziej po ludzku poproszę, bo kod to jakiś kosmos, a Twój problem nie do końca objaśnia całą sprawę biggrin.gif
jabtony
Hm...

Jest sobie lista rozwijana

  1. <select >
  2. <option '.$ts1.' value="1">Tresc1</option>
  3. <option'.$ts2.' value="2">Tresc2</option>
  4. <option '.$ts3.' value="3">Tresc3</option>
  5. <option '.$ts4.' value="4">Tresc4</option>
  6. </select>


przy ladowaniu strony domyslnie ustawia sie nam jako pierwsza opcja ktora ma status rowny np. 2 ($ts2 = selected )
Calosc jest zapetlona z wyswietlaniem kolejnych wierszy z tabeli.
Warunki wygladaja tak jak w poprzednim poscie. Zrobilem to tak jak potrafilem ale szukam wydajniejszego rozwiazania.

  1. while ( $row = mysql_fetch_assoc($wynik) ) {
  2.  
  3.  
  4.  
  5. if($row['status']==2){
  6. $ts2='selected';
  7.  
  8.  

Piotrekkk
o to chodzi?

  1. while ($row = mysql_fetch_assoc($wynik)) {
  2.  
  3. echo '<select id = "cos" onchange = "self.location.href = this.value" size = "1" name = "statusy">';
  4. echo '<option ' . ($row['status'] == 1 ? 'selected' : '') . ' value = "zmienstatus.php?id=' . $row['id'] . '&a=status&s=1">1</option>';
  5. echo '<option ' . ($row['status'] == 2 ? 'selected' : '') . ' value = "zmienstatus.php?id=' . $row['id'] . '&a=status&s=1">2</option>';
  6. echo '<option ' . ($row['status'] == 3 ? 'selected' : '') . ' value = "zmienstatus.php?id=' . $row['id'] . '&a=status&s=1">3</option>';
  7. echo '<option ' . ($row['status'] == 4 ? 'selected' : '') . ' value = "zmienstatus.php?id=' . $row['id'] . '&a=status&s=1">4</option>';
  8. echo '<option ' . ($row['status'] == 5 ? 'selected' : '') . ' value = "zmienstatus.php?id=' . $row['id'] . '&a=status&s=1">5</option>';
  9. echo '<option ' . ($row['status'] == 6 ? 'selected' : '') . ' value = "zmienstatus.php?id=' . $row['id'] . '&a=status&s=1">6</option>';
  10. echo '<option ' . ($row['status'] == 7 ? 'selected' : '') . ' value = "zmienstatus.php?id=' . $row['id'] . '&a=status&s=1">7</option>';
  11. echo '<option ' . ($row['status'] == 8 ? 'selected' : '') . ' value = "zmienstatus.php?id=' . $row['id'] . '&a=status&s=1">8</option>';
  12. echo '<option ' . ($row['status'] == 9 ? 'selected' : '') . ' value = "zmienstatus.php?id=' . $row['id'] . '&a=status&s=1">9</option>';
  13. echo '<option ' . ($row['status'] == 10 ? 'selected' : '') . ' value = "zmienstatus.php?id=' . $row['id'] . '&a=status&s=1">10</option>';
  14. echo '<option ' . ($row['status'] == 0 ? 'selected' : '') . ' value = "zmienstatus.php?id=' . $row['id'] . '&a=status&s=1">0</option>';
  15. echo '</select>';
  16. }

jeszcze tylko kwestia:
  1. $bgcolor='class="status0"';

Gdzie tego używasz?


valkirek
Chyba nie chodzi o optymalizację tylko skrócenie kodu? Wszędzie widzę i wstawiłbym pętle for a w option to aż się o to prosi tym bardziej, że zmienia się tylko jedna cyfra
com
valkirek owszem można było to rozwiązać o wiele prościej ale są programiści i programiści smile.gif
Napisałbym ale nie o to chodzi żeby tylko gotowce zawsze czerpać czasem możną pomyśleć samemu smile.gif
jabtony
to ze petla to wiem, ale czy w inny sposob mozna uzyskac podobny efekt z tymi selectami.... i bez tylu elseif
nospor
A czytales posty Piotrekkk oraz valkirek ?
Przeciez oni podali rozwiazanie, a ty sie nadal pytasz jak to zrobic..... :/
jackraymund
  1. echo '<select id = "cos" onchange = "self.location.href = this.value" size = "1" name = "statusy">';
  2. while ($row = mysql_fetch_assoc($wynik)) {
  3. echo '<option '.($row['status'] == $row['id'] ? 'selected' : '').' value = "zmienstatus.php?id='.$row['id'].'&a=status&s=1">'.$row['id'].'</option>';
  4. }
  5. echo '</select>';

koledzy wyżej podali ci przecież gotowca, też ci daje, w wersji skróconej
najlepiej to status ustaw na 1, tamgdzie chcesz aby było zaznaczone, i wtedy z jedynką porównaj
-jabtony-
No widze widze dzieki bardzo, a jak ja pisalem moja odpowiedz to tamtych odpowiedzi nie bylo jeszcze .....
co do bgcolor to akurat w tamtym fragmencie nie bylo wywolywane

zaraz bede to probowal i wyciagal wnioski
jabtony
Zrobilem narazie tak :

  1.  
  2. <select id = "cos" onchange = "self.location.href = this.value" size = "1" name = "statusy">
  3. <option ' . ($row['status_wyd'] == 1 ? 'selected' : '') . ' value = "zmienstatuswyd.php?id=' . $row['id'] . '&a=status&s=1">1</option>
  4. <option ' . ($row['status_wyd'] == 2 ? 'selected' : '') . ' value = "zmienstatuswyd.php?id=' . $row['id'] . '&a=status&s=2">2</option>
  5. <option ' . ($row['status_wyd'] == 3 ? 'selected' : '') . ' value = "zmienstatuswyd.php?id=' . $row['id'] . '&a=status&s=3">3</option>
  6. <option ' . ($row['status_wyd'] == 4 ? 'selected' : '') . ' value = "zmienstatuswyd.php?id=' . $row['id'] . '&a=status&s=4">4</option>
  7. <option ' . ($row['status_wyd'] == 5 ? 'selected' : '') . ' value = "zmienstatuswyd.php?id=' . $row['id'] . '&a=status&s=5">5</option>
  8. <option ' . ($row['status_wyd'] == 6 ? 'selected' : '') . ' value = "zmienstatuswyd.php?id=' . $row['id'] . '&a=status&s=6">6</option>
  9. <option ' . ($row['status_wyd'] == 7 ? 'selected' : '') . ' value = "zmienstatuswyd.php?id=' . $row['id'] . '&a=status&s=7">7</option>
  10. <option ' . ($row['status_wyd'] == 8 ? 'selected' : '') . ' value = "zmienstatuswyd.php?id=' . $row['id'] . '&a=status&s=8">8</option>
  11. <option ' . ($row['status_wyd'] == 9 ? 'selected' : '') . ' value = "zmienstatuswyd.php?id=' . $row['id'] . '&a=status&s=9">9</option>
  12. <option ' . ($row['status_wyd'] == 10 ? 'selected' : '') . ' value = "zmienstatuswyd.php?id=' . $row['id'] . '&a=status&s=10">10</option>
  13. <option ' . ($row['status_wyd'] == 0 ? 'selected' : '') . ' value = "zmienstatuswyd.php?id=' . $row['id'] . '&a=status&s=0">0</option>
  14. </select>
  15.  


Czyli pozbylem sie ten zmiennej $ts1 ts2 itp zamienione przez to ($row['status_wyd'] == 1 ? 'selected'

teraz widze ze te wszystkie optiony mozna zrobic w petli z numeracja do np 10 i to chyba tyle

To co podal jackraymund niestety nie dziala bo te liczby od 0 do 10 nie sa brane z id ani z statusu i nie mozemy ich porownac do innej zmiennej.

Dziekuje bardzo za pomoc.
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.