Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] UPDATE kilku rekordow
Forum PHP.pl > Forum > Przedszkole
Koldy
Witajcie rodacy,

podczas tworzenia strony napotkałem na kolejny problem, zawsze pojawiaja sie znikąd, ale no cóż czlowiek tak sie uczy. Mianowicie, powiedzmy ze mam tabele:

TABELA:
k1, k2, k3, k4, k5

mam tam powiedzmy ok 10 rekordów, ktorych ilość moze się zmieniać w zalezności +/-1,2 no i wczytuje je do formularzy za pomocą pętli FOREACH(), więc one są dynamiczne i nie wiem po prostu jak je zupdateować (cóż za twór słowny), nie wiem jak stworzyć taki blok kodu, który po prostu, wszystkie te dynamiczne rekordy zaktualizuje po kolei od góry, a już w ogóle byłoby świetnie jakby tylko aktualizowało tylko te, które zmieniły sie po wczytaniu w formularze.

Zeby było jasne strona z formularzem wyglada tak (jest to strona ala EDIT):

Strona:

Rekord 1:
inputbox1, inputbox2, inputbox3, checkbox1, textbox1

Rekord 2:
inputbox1, inputbox2, inputbox3, checkbox1, textbox1

Rekord 3:
inputbox1, inputbox2, inputbox3, checkbox1, textbox1

Rekord 4:
inputbox1, inputbox2, inputbox3, checkbox1, textbox1

ETC.

Dodam ze rekordy wczytywane są za pomocą PDO,
pozdrawiam
mar1aczi
Pobierając dane z bazy, pobierasz również unikalny identyfikator wiersza (powinien taki być na tabeli).
Tworząc formularz, wpisujesz to unikalne id w pole "hidden".
Odbierasz dane formularza poprzez tablicę. Dla przykładu:
http://stackoverflow.com/questions/3314567...-into-php-array
http://stackoverflow.com/questions/1924324...to-array-in-php
W pobranej tablicy masz identyfikatory rekordów i na ich podstawie aktualizujesz dany wiersz (pętla foreach).
matusjamar
Witam. Mój problem jest też z tej bajki.
Formularz pobiera z bazy dane o zdjęciach z galerii. Chcę aktualizować dane w formularzu lecz...
Nie wiem co tu nie gra. Mam podobny kod, który działa ok z poleceniem INSERT INTO..
O to mój kod:
Kod
<?php
if($sesion) {
    
$fieldset = $_POST['file']; // odbieramy dane zdjęcia
if($_SERVER['REQUEST_METHOD'] == "POST") {
foreach($fieldset as $input) {
    ### query update ###
if($input[b]=='brak opisu') $opis = ''; else $opis = $input[b]; // opis zdjęcia
$query .= "UPDATE `galeria` SET `opis`='$opis', `chrono`= '$input[c]' WHERE `fotnr` = '$input[a]'; ";
$i++;
}}
$query = substr($query,0,-1);
mysql_query($query);

### odbieramy dane z bazy mysql i tworzymy formularz ze zdjęć ###
if(!isset($str)) $str1='1'; else $str1=$str;
echo '<form method="post" action="?str='.$str1.'&amp;upd">';

$q = mysql_query("SELECT `fotnr`, `dostep`, `filename`, `opis`, `gal_name`, `typ`, `chrono` FROM `galeria` WHERE `dostep`='$sdostepu' AND `gal_name` = '$gal_name' AND `typ` = 'fot' ORDER BY `chrono`");

$filenr = 1;
$opisnr = 1;
$chronolog = 1;

while($p = mysql_fetch_row($q)) {
if($p[3]=='') $brakopisu = 'brak opisu'; else $brakopisu = $p[3];
echo '<fieldset style="....">
<a class="highslide" onclick="return hs.expand(this)" href="'.$p[1].$p[2].'"><img src="'.$p[1].'mini/'.$p[2].'" alt="" /></a>';
echo '<input type="hidden" name="file['.$filenr++.'][a]" value="'.$p[0].'" />';
echo '<a href="'.get().'kasuj='.$p[0].'" style="...."><img src="../img/close.png" alt="usuń" /></a>
<input type="text" name="file['.$opisnr++.'][b]" class="abs" value="'.$p[3].'" />
<input type="text" name="file['.$chronolog++.'][c]" class="abs" value="'.$p[6].'" />
</fieldset>';
}
echo '<input type="submit" class="button" value="Zapisz" /></form>';
}

?>


Dodam tylko, że var_dump($query) wyświetla:
string(1393) "UPDATE `galeria` SET `opis`='przed domem', `chrono`= '1' WHERE `fotnr` = '199'; UPDATE `galeria` SET `opis`='Asia i Krzysiek', `chrono`= '2' WHERE `fotnr` = '200'; (...itd.itd...) UPDATE `galeria` SET `opis`='wycieczka do lasu', `chrono`= '15' WHERE `fotnr` = '213';"
Skopiowany do okna zapytania SQL phpMyAdmina rezultat var_dump działa [aktualizują się zmienione dane, a te pozostawione bez zmian dają komunikat: "MySQL zwrócił pusty wynik (zero wierszy)." ]

Ma ktoś jakiś pomysł?
YourFrog
@Koldy

Łapaj przykładowy kod na to co chcesz zrobić. Tam sobie różne rzeczy pozmieniasz. Od razu mówię że pisane na kolanie w 30 minut więc może się komuś nie podobać ;P



Tabela
  1. CREATE TABLE IF NOT EXISTS `data` (
  2. `data_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `column_1` varchar(32) NOT NULL,
  4. `column_2` varchar(32) NOT NULL,
  5. `column_3` varchar(32) NOT NULL,
  6. `column_4` varchar(32) NOT NULL,
  7. `column_5` varchar(32) NOT NULL,
  8. PRIMARY KEY (`data_id`)
  9. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;
  10.  
  11. --
  12. -- Zrzut danych tabeli `data`
  13. --
  14.  
  15. INSERT INTO `data` (`data_id`, `column_1`, `column_2`, `column_3`, `column_4`, `column_5`) VALUES
  16. (1, 'test_1_1', 'test_1_2', 'test_1_3', 'test_1_4', 'test_1_89'),
  17. (2, 'test_2_1', 'test_2_2', 'test_2_3', 'test_2_4', 'test_2_5'),
  18. (3, 'test_3_1', 'test_3_2', 'test_3_3', 'test_3_4', 'test_3_5'),
  19. (4, 'test_4_1', 'test_4_2', 'test_4_3', 'test_4_4', 'test_4_5'),
  20. (5, 'test_5_1', 'test_5_2', 'test_5_3', 'test_5_4', 'test_5_5');



conf/config.php
  1. <?php
  2.  
  3. $mysql = mysql_connect('localhost', 'root', '') or die( mysql_error() );
  4.  
  5.  
  6. function query($sql)
  7. {
  8. $resource = mysql_query($sql) or die( mysql_error() );
  9.  
  10. if( $resource === FALSE )
  11. return array();
  12.  
  13. $ret = array();
  14.  
  15. while( $row = mysql_fetch_assoc($resource) )
  16. $ret[] = $row;
  17.  
  18. return $ret;
  19. }
  20.  
  21. function update($sql)
  22. {
  23. mysql_query($sql) or die( mysql_error() );
  24. }



  1. <?php
  2.  
  3. include('conf/config.php');
  4.  
  5. if( isset($_POST['action']) && strcmp($_POST['action'], 'edit') == 0 )
  6. {
  7. if( !empty($_POST['data']) )
  8. {
  9. $dataSQL = '';
  10. foreach($_POST['data'] as $key => $row)
  11. {
  12. if( count($row) != 5 )
  13. continue;
  14.  
  15. $flag = true;
  16. for($i = 1; $i <= 5; $i++)
  17. if( !isset($row['column_' . $i]) )
  18. {
  19. $flag = false;
  20. break;
  21. }
  22.  
  23. if( $flag === FALSE )
  24. continue;
  25.  
  26. $key = (int) $key;
  27.  
  28. update('UPDATE
  29. `data`
  30. SET
  31. column_1 = "' . addslashes($row['column_1']) . '",
  32. column_2 = "' . addslashes($row['column_2']) . '",
  33. column_3 = "' . addslashes($row['column_3']) . '",
  34. column_4 = "' . addslashes($row['column_4']) . '",
  35. column_5 = "' . addslashes($row['column_5']) . '"
  36. WHERE
  37. data_id = ' . $key);
  38. }
  39. }
  40. }
  41.  
  42.  
  43. $data = query('SELECT * FROM `data`');
  44. $html = '';
  45.  
  46. foreach($data as $key => $row)
  47. {
  48. $id = $row['data_id'];
  49.  
  50. $html .= '<tr>
  51. <td><input type="text" name="data[' . $id . '][column_1]" value="' . $row['column_1'] . '"/></td>
  52. <td><input type="text" name="data[' . $id . '][column_2]" value="' . $row['column_2'] . '"/></td>
  53. <td><input type="text" name="data[' . $id . '][column_3]" value="' . $row['column_3'] . '"/></td>
  54. <td><input type="text" name="data[' . $id . '][column_4]" value="' . $row['column_4'] . '"/></td>
  55. <td><input type="text" name="data[' . $id . '][column_5]" value="' . $row['column_5'] . '"/></td>
  56. </tr>';
  57. }
  58.  
  59.  
  60. echo '<form method="POST">
  61. <input type="hidden" name="action" value="edit">
  62. <table>
  63. ' . $html . '
  64. </table>
  65.  
  66. <button type="submit">Zaaktualizuj</button>
  67. </form>';
matusjamar
Dziękuję za odpowiedź.
W końcu zadziałało. Poniżej zmieniona część kodu. Reszta bez zmian

  1. if($_SERVER['REQUEST_METHOD'] == "POST") {
  2. foreach($fieldset as $input) {
  3. ### query update ###
  4. if($input[b]=='brak opisu') $opis = ''; else $opis = $input[b]; // opis zdjęcia
  5. mysql_query("UPDATE `galeria` SET `opis`='{$opis}', `chrono`= '{$input[c]}' WHERE `fotnr` = '{$input[a]}'; ");
  6. }}

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.