Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Update'owanie kilku rekordów jednocześnie do odpowiednich kolumn
dawidos_95
post
Post #1





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 13.06.2012

Ostrzeżenie: (0%)
-----


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>


Ten post edytował dawidos_95 3.07.2013, 20:16:09
Go to the top of the page
+Quote Post
cim
post
Post #2





Grupa: Zarejestrowani
Postów: 208
Pomógł: 28
Dołączył: 9.08.2004
Skąd: Stargard

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
dawidos_95
post
Post #3





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 13.06.2012

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
cim
post
Post #4





Grupa: Zarejestrowani
Postów: 208
Pomógł: 28
Dołączył: 9.08.2004
Skąd: Stargard

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
dawidos_95
post
Post #5





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 13.06.2012

Ostrzeżenie: (0%)
-----


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'].'"/>

Ten post edytował dawidos_95 5.07.2013, 09:00:19
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #6





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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. }


Go to the top of the page
+Quote Post
dawidos_95
post
Post #7





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 13.06.2012

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 10:19