Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Aktualizacja wielu rekordów
Forum PHP.pl > Forum > Przedszkole
Fezq
Witam,
podczas tworzenia mojej strony internetowej napotkałem pewien problem z którym nie mogę poradzić sobie już od dłuższego czasu. Mianowicie chodzi o aktualizacje kilku rekordów jednym zapytaniem.
W podanym niżej kodzie wyświetlam w pętli wszystkie nazwy zespołów alfabetycznie, wraz z ich aktualnym statusem, który możemy zmieniać na dowolną liczbę. Screen
Chciałbym, aby po wciśnięciu buttona zaktualizowały mi się statusy wszystkich zespołów na takie jakie zostały wpisane w inpucie.
  1. $ok = trim($_POST['ok']);
  2. $result = mysql_query("SELECT * FROM zespoly ORDER BY nazwa");
  3. $row = mysql_fetch_assoc($result);
  4.  
  5. echo '<form action="" method="post">';
  6. do
  7. {
  8. echo' <div style="float: left; width:25%"><a href="zespol-'.$row['id'].'.html"><input type="text" name="nazwa[]" readonly="readonly" value="'.$row['nazwa'].'"> </a></div>' ;
  9. echo'<input type="text" name="status[]" maxlength="1" size="3" value="'.stripslashes($row['status']).'"/>';
  10. }
  11. while($row = mysql_fetch_assoc($result));
  12. $identyfikatory = array($row['id']);
  13.  
  14. echo '<p>
  15.  
  16. <div style="float: left; width:30%;">Finalizacja</div>
  17. <div style="float: left; width:70%"><input type="submit" name="ok" value="Dodaj"></div>
  18. </form>';
  19.  
  20.  
  21. if ($ok == 'Dodaj')
  22. {
  23. $ile = 0;
  24. $tab_nazwa = array($_POST['nazwa']);
  25. $tab_status = array($_POST['status']);
  26.  
  27. foreach ($identyfikatory as $id)
  28. {
  29. $nazwa = $tab_nazwa[0][$ile];
  30. $status = $tab_status[0][$ile];
  31.  
  32. $rezultat = mysql_query("UPDATE zespoly SET status='$status' WHERE id='$id'")
  33. or die("Błąd");
  34. $ile++;
  35. }
  36. }

Po wykonaniu tego zapytania nie aktualizuje mi się żaden rekord, lub aktualizuje mi się tylko jeden (pierwszy w kolejności).
Problemu upatruje w pętli foreach, tak więc zamiast niej przygotowałem sobie drugą, która również nie działa:
  1. for ($i = 0; $i < 99; $i++)
  2. {
  3. $sql = "update zespoly set status = '".$_POST['status'.$i]."' where id = ".$_POST['id'.$i];
  4. }
Wicepsik
Status to liczby 0 i 1 ?
Fezq
Tak, gdzie 1 to zespół aktywny i 0 nieaktywny.
Wicepsik
  1. /*$result = mysql_query("SELECT * FROM zespoly ORDER BY nazwa");
  2. $row = mysql_fetch_assoc($result);
  3.  
  4. echo '<form action="" method="post">';
  5.  
  6. do
  7. {
  8.  
  9. echo '<input type="text" readonly="readonly" value="'.$row['nazwa'].'">' ;
  10. echo '<input type="hidden" name="id[]" value="'.$row['id'].'">' ;
  11.   echo'<input type="text" name="status[]" maxlength="1" size="3" value="'.stripslashes($row['status']).'"/>';
  12.  
  13. }while($row = mysql_fetch_assoc($result));*/
  14.  
  15. $ok = 'Dodaj';
  16. $_POST['id'] = array(100,200,300,400,500,600,700,800);
  17. $_POST['status'] = array(0,1,1,0,1,0,1,0);
  18.  
  19.  
  20. if ($ok == 'Dodaj')
  21. {
  22. // Status - 0
  23. $a = array();
  24. // Status - 1
  25. $b = array();
  26.  
  27. $i=0;
  28. foreach($_POST['id'] as $v){
  29. if($_POST['status'][$i] == 0){
  30. $a[] = $v;
  31. }else{
  32. $b[] = $v;
  33. }
  34. $i++;
  35. }
  36.  
  37. //mysql_query('UPDATE zespoly SET status="0" WHERE id = IN('.implode(',', $a).')';
  38. //mysql_query('UPDATE zespoly SET status="1" WHERE id = IN('.implode(',', $b).')';
  39.  
  40. echo 'UPDATE zespoly SET status = 0 WHERE id IN('.implode(',', $a).')';
  41. echo 'UPDATE zespoly SET status = 1 WHERE id IN('.implode(',', $b).')';
  42. }
Fezq
Hmm, nie do końca działa poprawnie, wydaję mi się, że błąd jest w zapytaniu. A może jest sposób, aby aktualizować dane podobnym kodem do tego mojego z pierwszego postu?
Wtedy mógłbym ten kod wykorzystać, też do innych skryptów, bo ten podany przez Ciebie miałby działać tylko w sytuacji kiedy aktualizuje skrypt o status 0 lub 1.

Z góry dziękuje i pozdrawiam.
Wicepsik
Dałem Ci tylko przykład kodu. Jak chcesz inaczej to sobie przerób. Jest dużo możliwości.
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.