Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Update'owanie kilku rekordów jednocześnie do odpowiednich kolumn
Forum PHP.pl > Forum > Przedszkole
dawidos_95
Witam. Mam skrypt, który pobiera z bazy danych rekordy i niektóre wartości są w textboxie. Na samym dole mam przycisk do zapisu, lecz jednak gdy chcę zapisać to coś nie wychodzi. Problem polega na tym że zawsze pobiera mi ostatni rekord do zapisu, a nie wszystkie. Macie na to sposób?

  1. if(isset($_POST['save']))
  2. {
  3. $groupmem.=$_POST['idhid'];
  4. $updated_group = array(
  5. "title" => $_POST['title'],
  6. "skin" => $_POST['skin'],
  7. "cars" => $_POST['cars'],
  8. "door" => $_POST['door'],
  9. "offers" => $_POST['offers'],
  10. "product" => $_POST['product'],
  11. "ooc" => $_POST['ooc'],
  12. "gate" => $_POST['gate'],
  13. "leader" => $_POST['leader']
  14. );
  15. $db->update_query('group_invite', $updated_group, "charid='".$_POST['idhid']."'");
  16. }


  1. while($members = $db->fetch_array($query))
  2. {
  3. $query2 = $db->simple_select('char', '*', "id='".$members['charid']."'");
  4. $char = $db->fetch_array($query2);
  5.  
  6. $user = get_user($members['forumid']);
  7. $userlink = format_name($user['username'], $user['usergroup'], $user['displaygroup']);
  8.  
  9. $i++;
  10. $groupmem.='
  11. <tr>
  12. <td><span class="smalltext" style="padding: 10px;">'.$i.'<input type="hidden" name="idhid" value="'.$members['charid'].'"</span></td>
  13. <td><span class="smalltext" style="padding: 10px;">'.$char['name'].' '.$char['surname'].'</span></td>
  14. <td><span class="smalltext" style="padding: 10px;">'.$userlink.'</span></td>
  15. <td><span class="smalltext" style="padding: 10px;"><input type="text" class="textbox" value="'.$members['title'].'"name="title" size="8"/></span></td>
  16. <td><span class="smalltext" style="padding: 10px;"><input type="text" class="textbox" value="'.$members['skin'].'"name="title" size="3" maxlength="3"/></span></td>
  17. <td><span class="smalltext" style="padding: 10px;">';
  18. if($members['cars'] == 1) {
  19. $groupmem.='<input type="checkbox" name="cars" value="1" checked="checked"/>';
  20. }else{
  21. $groupmem.='<input type="checkbox" name="cars" value="1"/>';}
  22. $groupmem.='
  23. </span></td>
  24. <td><span class="smalltext" style="padding: 10px;">';
  25. if($members['door'] == 1) {
  26. $groupmem.='<input type="checkbox" name="door" value="1" checked="checked"/>';
  27. }else{
  28. $groupmem.='<input type="checkbox" name="door" value="1"/>';}
  29. $groupmem.='
  30. </span></td>
cim
Witam,

najpierw mała uwaga:
  1. <td><span class="smalltext" style="padding: 10px;"><input type="text" class="textbox" value="'.$members['title'].'"name="title" size="8"/></span></td>
  2. <td><span class="smalltext" style="padding: 10px;"><input type="text" class="textbox" value="'.$members['skin'].'"name="title" size="3" maxlength="3"/></span></td>

oba pola maja nazwę "title", mimo że w jednym jest wartość "title" a w drugim "skin".

Twoim problemem, jest to że masz w formularzu wiele pól o tej samej nazwie (tzn. wartość każdego kolejnego pola nadpisuje wartość poprzedniego), stąd efekt odczytania tylko ostatniego wiersza.

Możesz to rozwiązać w taki sposób:
1. w każdym wierszu dodać pole ukryte z ID rekordu, którego dane są w danym wierszu; pole niech będzie "tablicowe" czyli nazwa kończy się nawiasami kwadratowymi, np: <input type="hidden" name="idRekordow[]" />
2. do nazw pól dodajesz sufix z ID rekordu, np. <input type="text" name="title_<?php $rekord['id'] ?>" />
3. przy odbieraniu formularza odczytujesz wartość tablicy z ID rekordów
4. w pętli przechodzisz i odczytujesz z POST dane dla każdego rekordu, np. $_POST['title_'. $id]

Pozdrawiam
dawidos_95
Cytat(cim @ 3.07.2013, 23:25:10 ) *
Witam,

najpierw mała uwaga:
  1. <td><span class="smalltext" style="padding: 10px;"><input type="text" class="textbox" value="'.$members['title'].'"name="title" size="8"/></span></td>
  2. <td><span class="smalltext" style="padding: 10px;"><input type="text" class="textbox" value="'.$members['skin'].'"name="title" size="3" maxlength="3"/></span></td>

oba pola maja nazwę "title", mimo że w jednym jest wartość "title" a w drugim "skin".

Twoim problemem, jest to że masz w formularzu wiele pól o tej samej nazwie (tzn. wartość każdego kolejnego pola nadpisuje wartość poprzedniego), stąd efekt odczytania tylko ostatniego wiersza.

Możesz to rozwiązać w taki sposób:
1. w każdym wierszu dodać pole ukryte z ID rekordu, którego dane są w danym wierszu; pole niech będzie "tablicowe" czyli nazwa kończy się nawiasami kwadratowymi, np: <input type="hidden" name="idRekordow[]" />
2. do nazw pól dodajesz sufix z ID rekordu, np. <input type="text" name="title_<?php $rekord['id'] ?>" />
3. przy odbieraniu formularza odczytujesz wartość tablicy z ID rekordów
4. w pętli przechodzisz i odczytujesz z POST dane dla każdego rekordu, np. $_POST['title_'. $id]

Pozdrawiam


Mógłbyś dać przykład do punktu 3,4?
cim
Witam,

poniżej Twój kod poglądowo przerobiony na przykład:
  1. if(isset($_POST['save'])) {
  2. $idRekordow = $_POST['idRekordow'];
  3.  
  4. foreach ($idRekordow as $idRekordu) {
  5. $updated_group = array(
  6. "title" => $_POST['title_' . $idRekordu],
  7. "skin" => $_POST['skin_' . $idRekordu],
  8. );
  9. $db->update_query('group_invite', $updated_group, "charid='".$_POST['idhid']."'");
  10. }
  11. }


Pozdrawiam
dawidos_95
Cytat(cim @ 4.07.2013, 23:30:52 ) *
Witam,

poniżej Twój kod poglądowo przerobiony na przykład:
  1. if(isset($_POST['save'])) {
  2. $idRekordow = $_POST['idRekordow'];
  3.  
  4. foreach ($idRekordow as $idRekordu) {
  5. $updated_group = array(
  6. "title" => $_POST['title_' . $idRekordu],
  7. "skin" => $_POST['skin_' . $idRekordu],
  8. );
  9. $db->update_query('group_invite', $updated_group, "charid='".$_POST['idhid']."'");
  10. }
  11. }


Pozdrawiam


Nie wywala mi błędów to znak że kod jest dobry. Wcześniej jak googlowałem i szukałem rozwiązania to zawsze coś nie tak było. Tylko teraz mam problem z warunkiem (chyba) w zapytaniu bo mi nie zmienia danych. Dawałem $_POST['idRekordow[], $idRekordow i nie aktualizuje danych. Co z tym?

//edit i zmienna $idRekordu pokazuje wartość 3, oraz sufixy mam takie: <input type="text" class="textbox" value="'.$members['title'].'" name="title_'.$members['id'].'" size="8"/>

i ukryte pole hidden takie: <input type="hidden" name="idRekordow[]" value="'.$members['id'].'"/>
b4rt3kk
A tak nie byłoby prościej? Formularz:

  1. <td><span class="smalltext" style="padding: 10px;">'.$i.'<input type="hidden" name="idhid[]" value="'.$members['charid'].'"</span></td>

  1. <td><span class="smalltext" style="padding: 10px;"><input type="text" class="textbox" value="'.$members['title'].'"name="title['.$members['charid'].']" size="8"/></span></td>
  2. <td><span class="smalltext" style="padding: 10px;"><input type="text" class="textbox" value="'.$members['skin'].'"name="skin['.$members['charid'].']" size="3" maxlength="3"/></span></td>


Zapis do bazy:

  1. foreach ($_POST['idhid'] as $idRekordu) {
  2. $updated_group = array(
  3. "title" => $_POST['title'][$idRekordu],
  4. "skin" => $_POST['skin'][$idRekordu],
  5. );
  6. $db->update_query('group_invite', $updated_group, "charid='".$idRekordu."'");
  7. }


dawidos_95
Cytat(b4rt3kk @ 5.07.2013, 10:16:26 ) *
A tak nie byłoby prościej? Formularz:

  1. <td><span class="smalltext" style="padding: 10px;">'.$i.'<input type="hidden" name="idhid[]" value="'.$members['charid'].'"</span></td>

  1. <td><span class="smalltext" style="padding: 10px;"><input type="text" class="textbox" value="'.$members['title'].'"name="title['.$members['charid'].']" size="8"/></span></td>
  2. <td><span class="smalltext" style="padding: 10px;"><input type="text" class="textbox" value="'.$members['skin'].'"name="skin['.$members['charid'].']" size="3" maxlength="3"/></span></td>


Zapis do bazy:

  1. foreach ($_POST['idhid'] as $idRekordu) {
  2. $updated_group = array(
  3. "title" => $_POST['title'][$idRekordu],
  4. "skin" => $_POST['skin'][$idRekordu],
  5. );
  6. $db->update_query('group_invite', $updated_group, "charid='".$idRekordu."'");
  7. }


Dzięki mistrzu! Działa wink.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.