Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] update w pętli
max_mcee
post
Post #1





Grupa: Zarejestrowani
Postów: 156
Pomógł: 1
Dołączył: 25.09.2007

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


Witam

Rekordy wyświetlam w pętli z bazy danych:
(IMG:http://ganski.eu/gr.jpg)

I załóżmy, że chcemy zaktualizować dane w bazie, więc pewnie trzeba to zrobić w pętli. I tutaj mam problem:

  1. if(isset($_POST['spr'])) {
  2. $ilosc_wierszy = mysql_num_rows($wynik);
  3. //$id = $dane['id'];
  4.  
  5. for ($z=1; $z<= $ilosc_wierszy; $z++) {
  6.  
  7. mysql_query("UPDATE user SET (1 = '$_POST[1]', 2 = '$_POST[2]', 3 = '$_POST[3]') WHERE id ='$z'") or die (mysql_error());
  8.  
  9. }
  10. }


Jak zaktualizować te dane w bazie ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
mortus
post
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


@Niktoś: Zapis:
  1. <input type="text" name="1" value="r">
  2. <input type="text" name="2" value="r">
  3. <input type="text" name="3" value="r">

jest niepoprawny, ale tylko z punktu widzenia specyfikacji (X)HTML. W PHP kluczem jest zawsze indeks w tablicy $_POST, a wartością wartość elementu z tablicy $_POST o wspomnianym indeksie. To nie jest błąd pod względem obslugi po stronie PHP.
No i nadal nie będzie działać.

@max_mcee: Najpierw kod:
  1. while($dane = mysql_fetch_array($wynik)) {
  2. echo '<tr><td><input type="hidden" name="id" value="'.$dane['id'].'" />'.$dane['name']."</td>";
  3. for ($d=1; $d<=date('t'); $d++){
  4. echo '<td><input type="text" name="'.$d.'" value="'.$dane[$d].'"></td>';
  5. }
  6. }

W pętli while generujesz wiele elementów o nazwie id (name="id"), a po zatwierdzeniu formularza wysyłany jest identyfikator tylko jednego, ostatniego z tych elementów. Dzieje się tak właśnie dlatego, że elementy mają taką samą nazwę. Podobnie jest w przypadku pętli for. W momencie, gdy chcesz edytować wiele wierszy w tabeli musisz posłużyć się nazwami "tablicowymi", tj. takimi, które po zatwierdzeniu formularza przesyłają w $_POST tablice. Wyglądałoby to tak:
  1. while($dane = mysql_fetch_array($wynik)) {
  2. echo '<tr><td><input type="hidden" name="ids[]" value="'.$dane['id'].'" />'.$dane['name']."</td>";
  3. for ($d=1; $d<=date('t'); $d++){
  4. echo '<td><input type="text" name="col'.$d.'_vals[]" value="'.$dane[$d].'"></td>';
  5. }
  6. }

Przesłane w ten sposób dane odbierasz w taki sposób:
  1. if(isset($POST['spr'])) {
  2. foreach($_POST['ids'] as $key => $value) {
  3. $id_rekordu = $_POST['ids'][$key];
  4. $kolumna_1 = $_POST['col1_vals'][$key];
  5. $kolumna_2 = $_POST['col2_vals'][$key];
  6. // itd.
  7. mysql_query("UPDATE `user` SET `1` = $kolumna_1, `2` = $kolumna_2 WHERE `id` = $id_rekordu");
  8. }
  9. }

Pozostaje jeszcze kwestia optymalności skryptu. Niestety wykonywanie UPDATE-ów w pętli nie jest optymalnym rozwiązaniem, lepiej posłużyć się tutaj zapytaniem MULTI-INSERT z opcją ON DUPLICATE KEY UPDATE. Ale o tym może później, jak już ogarniesz powyższy kod.

Ten post edytował mortus 1.04.2012, 17:27:34
Go to the top of the page
+Quote Post

Posty w temacie
- max_mcee   [PHP] update w pętli   1.04.2012, 15:15:42
- - lobopol   Bez nawiasu po set [PHP] pobierz, plaintext UPDATE...   1.04.2012, 15:21:07
- - max_mcee   You have an error in your SQL syntax; check the ma...   1.04.2012, 15:27:42
- - tolomei   Witaj. [PHP] pobierz, plaintext mysql_query...   1.04.2012, 15:36:39
- - max_mcee   Teraz działa. Jednak aktualizuje tylko ostatni wie...   1.04.2012, 15:46:17
- - Niktoś   Czym jest $_POST[1] i $_POST[2] ?- jeśli...   1.04.2012, 15:59:30
- - max_mcee   Tak wygląda baza: To błąd ?   1.04.2012, 16:27:28
- - Niktoś   Przecież ja nie mówiłem o bazie tylko,tylko o pola...   1.04.2012, 16:33:44
- - max_mcee   [HTML] pobierz, plaintext <tr><td>...   1.04.2012, 16:36:11
- - Niktoś   <input type="text" name="1...   1.04.2012, 16:50:25
- - max_mcee   Chciałem się odwoływać, do id użytkownika. załóżm...   1.04.2012, 16:57:50
- - Niktoś   [HTML] pobierz, plaintext <?php  ...   1.04.2012, 17:18:22
- - mortus   @Niktoś: Zapis:[HTML] pobierz, plaintext <input...   1.04.2012, 17:22:57
- - max_mcee   Nadal jest problem przy takim rozwiązaniu, poniewa...   1.04.2012, 17:31:38
|- - mortus   Cytat(max_mcee @ 1.04.2012, 18:31:38 ...   1.04.2012, 17:51:02
- - max_mcee   [PHP] pobierz, plaintext <?php  inclu...   1.04.2012, 19:04:41
- - mortus   Niektóre z aktualizowanych wartości są łańcuchami ...   1.04.2012, 23:56:05
- - max_mcee   Nadal ten sam błąd: [PHP] pobierz, plaintext Unkn...   2.04.2012, 14:45:29
- - mortus   Nadal brakuje apostrofów, przyjrzyj się uważnie mo...   2.04.2012, 15:03:13
- - max_mcee   Ok działa Czyli twierdzisz, że zamiast UPDATE wa...   2.04.2012, 15:13:38
- - mortus   Tak, trzeba tylko w pętli (tej pętli foreach) wyge...   2.04.2012, 15:35:44
- - max_mcee   Dziękuje za pomoc, przeanalizuje to co napisałeś i...   2.04.2012, 15:51:14


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: 2.10.2025 - 20:11