Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Zaznaczenie kilku checkbox'ów a zmiana w bazie.
Forum PHP.pl > Forum > Przedszkole
kopek
Wyświetlam listę użytkowników pobieraną z bazy z jednej tabeli. Poprzez zaznaczenie checkboxa przy danej osobie i kliknięciu przycisku formularza następuje zmiana jednego z parametru danego rekordu. Jak sobie poradzić aby móc zaznaczyć kilku użytkowników i zmienić im to pole jednym kliknięciem dla wszystkich? Teraz wygląda to tak:

  1. if (isset($_POST['cash'])){
  2. connection();
  3. $ins = mysql_query("SET NAMES 'utf8'");
  4. $ins = mysql_query("SET CHARACTER SET 'utf8_general_ci'");
  5. $ins = "SELECT * FROM delegacja WHERE numer='$opcja'";
  6. $query=mysql_query($ins);
  7. $wynik=mysql_fetch_array($query);
  8. if ($wynik['cash']=='nierozliczone'){
  9. $ins = "UPDATE delegacja SET cash='rozliczone' WHERE numer='$opcja'";
  10. $exec=mysql_query($ins);
  11. }
  12. else{
  13. $ins = "UPDATE delegacja SET cash='nierozliczone' WHERE numer='$opcja'";
  14. $exec=mysql_query($ins);
  15. }
  16. }
Aqu
Ja bym użył IF który po prostu zmieni wartośc na odwortną, o tak:
  1. UPDATE delegacje SET cash=IF(cash="rozliczone", "nierozliczone", "rozliczone") WHERE id IN(1,2,3...)
kopek
Ale powiedzmy, że na liście jest 100 osób a chcę zaznaczyć tylko 10 i zmienić im parametr to już chyba ten IF się nie sprawdzi. W ogóle chyba trochę nie za bardzo to odpwiedź na moje pytanie. Może powiniennem dodać w pierwszym poście "...dla wszystkich zaznaczonych."
emkej
Robisz sobie formularz:
Kod
<input type="checkbox" name="status[]" value="1" \> Osoba 1
<input type="checkbox" name="status[]" value="2"  \> Osoba 2
<input type="checkbox" name="status[]" value="3"  \> Osoba 3
<input type="checkbox" name="status[]" value="4"  \> Osoba 4
<input type="checkbox" name="status[]" value="5"  \> Osoba 5
<input type="checkbox" name="status[]" value="6"  \> Osoba 6
<input type="checkbox" name="status[]" value="7"  \> Osoba 7

A potem odbierasz tablice z id osob, ktore chcesz zmienic:
  1. $varArr = $_POST['status'];


I w petli kazdego z tablicy UPDATEujesz wink.gif
mmmmmmm
@emkej - chyba żartujesz. Zresztą widać po uśmieszku...
@Aqu podał dobry sposób - z IN. Pozostaje tablicę przerobić do IN()
Aqu
Wydaje mi się, że jednak dobrze Cię zrozumiałem, w IN musisz podać id które chcesz zmienić. Moje zaptanie po prostu zmienia wartość z obecnej na tą drugą. Albo zrób tak, powinno działać:
  1. <?PHP
  2. if(isset($_POST['id']))
  3. {
  4. foreach($_POST['id'] as $name => $value)
  5. {
  6. $in .= $value;
  7. if(isset($_POST['id'][$name+1])) $in .= ',';
  8. }
  9.  
  10. $sql = 'UPDATE delegacja SET cash="'.$_POST['submit'].'" WHERE id IN('.$in.')';
  11. echo $sql;
  12. }
  13.  
  14. '
  15. <form method="post">
  16. <input type="checkbox" name="id[]" value="1"/>Pracownik 1<br>
  17. <input type="checkbox" name="id[]" value="5"/>Pracownik 5<br>
  18. <input type="checkbox" name="id[]" value="6"/>Pracownik 6<br>
  19. Zmień na: <input type="submit" name="submit" value="nierozliczeni"/> / <input type="submit" name="submit" value="rozliczeni"/><br>
  20. </form>';
  21. ?>
kopek
Problem tylko jest taki, że jak zmienię name="opcja" na name="id[]" to trochę mi to skomplikuje projekt bo ten checkbox ma podpiętych kilka zdarzeń w zależności na jaki przycisk się kliknie po zaznaczeniu checkboxa, dlatego chciałbym poszukać jakiegoś rozwiązania, które zadziała w takiej formie bez ingerowania w już wyświetlonych użytkowników, którzy są wyciągani z bazy w formie tabeli.
Tak wygląda wyświetlanie użytkowników:
  1. connection();
  2. $sql = mysql_query("SET NAMES 'utf8'");
  3. $sql = mysql_query("SET CHARACTER SET 'utf8_polish_ci'");
  4. $sql = "SELECT * FROM delegacja ORDER BY numer DESC LIMIT $limit";
  5. $query=mysql_query($sql);
  6. while ($wynik=mysql_fetch_array($query)){
  7. ?><tr
  8. <?
  9. if ($wynik['cancel']=='1') {
  10. ?>style="text-decoration: line-through;" <?
  11. }
  12. ?>
  13. >
  14. <td align="center" <? kolor($wynik['nazwa']);?>><font face="Verdana"><? echo $wynik['numer'];?>/<? echo date('y')?></td>
  15. <td align="center" <? kolor($wynik['nazwa']);?>><font face="Verdana"><? echo $wynik['nazwa'];?></td>
  16. <td align="center" <? kolor($wynik['nazwa']);?>><font face="Verdana">
  17. <? if ($wynik['lokalizacja_']==""){
  18. echo $wynik['lokalizacja'];
  19. }
  20. else {
  21. echo $wynik['lokalizacja']." - ".$wynik['lokalizacja_'];
  22. }
  23. ?>
  24. </td>
  25. <td align="center" <? kolor($wynik['nazwa']);?>><font face="Verdana"><? echo $wynik['cel'];?></td>
  26. <td align="center" <? kolor($wynik['nazwa']);?>><font face="Verdana"><? echo substr($wynik['pojazd'],0,7);?></td>
  27. <td align="center" <? kolor($wynik['nazwa']);?>><font face="Verdana">
  28. <? if ($wynik['data_start']!=$wynik['data_end']){
  29. echo $wynik['data_start']; ?> - <? echo $wynik['data_end'];}
  30. else{
  31. echo $wynik['data_start'];
  32. }
  33. ?>
  34. </td>
  35. <td align="center">
  36. <input type="checkbox" name="opcja" value="<? echo $wynik['numer'];?>"/>
  37. </td>
  38. <td align="center">
  39. <?
  40. if ($wynik['cash']=='nierozliczone'){
  41. ?><font color="red"><?
  42. echo $wynik['cash'];
  43. ?></font><?
  44. }
  45. else {
  46. ?><font color="green"><?
  47. echo $wynik['cash'];
  48. ?></font><?
  49. }
  50. ?></td>
  51. </tr><?
  52. }
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.