Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wybranie danych do edycji za pomaca checkbox-a PROBLEM
Forum PHP.pl > Forum > PHP
niebieszki
Witam

Mam bardzo specyficzny problem. Postaram się to wyjaśnić w jak najbardziej przyjazny sposób.

Chciałbym aby po zaznaczenie jakiegoś chackboxa były dostępne dla niego opcje jak edytuj czy usuń (ie chodzi mi o to aby się nagle te opcje pojawiły tylko aby po zaznaczeniu 3 wiersza wyświetlić się widok z edycja danych 3 wiersza). Jak przechwycić tą dana aby np. doczepić jej id z polu value do paska adresu albo zmiennej POST - może tego w ogóle tak się nie robi proszę o nakierowanie mnie na odpowiednie rozwiązanie.

Poniżej schematyczny rysunek jak by to miało wyglądać: Rożne opcje które miały by być dostosowane do konkretnego wiersza z tabeli (rozpoznamy go po zaznaczeniu checkboxa



Może moje rozumowanie jest zupełnie blednę i trzeba to robić jakimiś innymi technikami. Proszę o poradę jak do takiego czegoś się zabrać

edit:

tu jest drugi przykład bardziej ilustrujący co chce zrobić:

gdy zaznaczymy pole przy pierwszej i klikniemy drukuj to wydrukuje się dane z pierwszej zaś gdy zaznaczymy druga to wydrukuje się dane z drugiej
fander
Witam

Rozwiązanie nie jest błędne ale dość specyficzne a jak to ugryźć?

plik lista.php

  1. // skrypt pobierania rekordów z bazy
  2.  
  3. $lista //rekordy pobrane z bazy
  4.  
  5. echo '<form action="" method="">
  6. <table>
  7. <tr>
  8. <th></ht>
  9. <th>nazwa</th>
  10. <th>kolumna_x</th>
  11. </tr>';
  12. foreath($lista as $key => $val){
  13. echo '
  14. <tr>
  15. <td>
  16. <input type="cheackbox" name="element[]" value="'.$val["id"].'" />
  17. </td>
  18. <td>'.$val["nazwa"].'</td>
  19. <td>'.$val["kolumna_x"].'</td>
  20. </tr>';
  21. }
  22.  
  23. </table>
  24. <input type="submit" name="akcja" value="edytuj" />
  25. <input type="submit" name="akcja" value="usuń" />
  26. </form>';


Poz zaznaczeniu paru elementów i kliknięciu na edytuj, zostaną do skryptu dane w jako tablica POST.
Przykładowa tablica POST będzie wyglądała następująco :
Kod
  array(
      element => array(
          0 => 1,
          1 => 2,
          2 => 5
   ),
  "akcja" => "edytuj"
  )
  
  Wartości odpowiednich kluczy w tabli odpowiadają kluczom głównym w tabeli (bazie danych) poszczególnych elementów.


Teraz aby wyświetlić okienko z edycją tworzysz następujący kod:

  1.  
  2. switch($_POST['akcja']){
  3. case "edycja":
  4. echo '<form action="" metchod="POST">';
  5. foreatch($_POST['element'] as $key => $v){
  6. $el = $connection->query("SELECT * FROM tabela WHERE id=".$v->fetchAll(PDO::FETCH_ASSOC); // ja tutaj pobieram z tabelki odpowiednie rekordy używając PDO ale tobie zostawiam wybranie sposobu pobierania danych z bazy
  7. if(isset($el[0])){
  8. $el = $el[0];
  9. echo '
  10. <table>
  11. <tr>
  12. <td>
  13. <input type="hidden" name="elemnt['.$key.'][id]" value="'.$el["id"].'" /><br />
  14. <input type="text" name="nazwa" value="'.$el['nazwa'].'" /><br />
  15. <input type="typjakiś" name="kolumnax" value="'.$el["kolumnax"].'"
  16. </td>
  17. </tr>
  18. </table>
  19. ';
  20. }
  21. <input type="submit" name="akcja" value="zapisz" />';
  22. </form>';
  23. break;
  24. }


Po kliknięciu zapisz zostaną wysłane dane do skryptu. Tablica POST będzie wyglądała następująco

Kod
   array(
       element => array(
          0 => array(
                     id => 1,
                     nazwa => {wartość}
                     kolumnax => {vartość}
                  )
          1 => array(
                     id => 3,
                     nazwa => {wartość}
                     kolumnax => {vartość}
                  )
          2 => array(
                     id => 5,
                     nazwa => {wartość}
                     kolumnax => {vartość}
                  )
       ),
       akcja => zapisz
   )


Aby zapisać dane robisz foreach to tablicy $_POST['element'] i dla każdego elementu wykonujesz update na tabeli w bazie danych. Ale to już sobie sam dopiszesz smile.gif


Pozdrawiam
niebieszki
super odpowiedz dziękuje bardzo.

Mam tylko mały problem przy stworzeniu tej drugiej tablicy ze zmiennej post.

Jak zrobiłeś (od jakiego kawałka kodu zależy) to iż w tablicy post mamy tablice element na którą składają się zmienne id nazwa itp. U mnie po wyswitleniu tablicy element znajduje się tylko id.
lord2105
tak?

  1.  
  2. <input type="hidden" name="elemnt['.$key.'][id]" value="'.$el["id"].'" /><br />
  3.  
  4. <input type="text" name="nazwa" value="'.$el['nazwa'].'" /><br />
  5.  
  6. <input type="typjakiś" name="kolumnax" value="'.$el["kolumnax"].'" />
niebieszki
Tak wiem dokładnie ta cześć kodu odpowiada za to ale czy nie bedzie tak ze w zmiennej globoalnej Post bedzie tablica element przechowujaca tylko id

A dodatkowo bedzie trzeba sie osobno odwoływać do zmiennej post i wnej bedzie zapisana zmianna o nazwie nazwa i zmienna kolumnax - ale tylko wartosci z ostatniej petli.
Czy ja coś zle rozumiem?
lord2105
będzie to tablica wielowymiarowa tzn $_POST[0]['kolumna'],$_POST[0]['nazwa'],$_POST[0]['id']
niebieszki
tak wiem i do tego chhce dazyc....

ale czy pole typu hidden powinno miec nazwe: name="elemnt[ a inne pola juz nie musza?

Wiec prosze wytłumacz mi bo ja chyba troche nie kapuje jak one moge wyladować w 2 wymiarze tablicy post element skoro one nie maja nazw tablicowych tak jak np. kolumnax : name="kolumnax"

po prostu czy nie powinno byc tak aby stworzyc taka tablice?:


  1. <input type="hidden" name="elemnt['.$key.'][id]" value="'.$el["id"].'" /><br />
  2.  
  3. <input type="text" name="elemnt['.$key.'][nazwa]" value="'.$el['nazwa'].'" /><br />
  4.  
  5. <input type="typjakiś" name="elemnt['.$key.'][kolumnax]" value="'.$el["kolumnax"].'"
lord2105
a powinno ;P gratuluję spostrzegawczości :)nie zauważyłem tongue.gif
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.