Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql] Checkbox + update = problem
Forum PHP.pl > Forum > PHP
macromatic
Witam,

ślęczę już od paru dobrych godzin i nie mam pomysłu jak wykonac następującą rzecz:

1. Mam formularz w którym użytkownik edytuje wcześniej wczytane z bazy danych informacje.
Kod wygląda następująco:

  1. <?php
  2. echo' <form method="post" action="'.$_PHPSELF.'">
  3. <table width="100%" border="0">
  4. <tr>
  5. <td width="10%"><div align="center"><b><input type="text" size="2%" name="pozycja[]" value="'.$pozycja.'"></b></div></td>
  6. <td width="30%"><div align="center"><b><input type="text" size="20%" name="nazwa[]" value="'.$nazwa.'"></b></div></td>
  7. <td width="10%"><div align="center"><b><input type="text" size="2%" name="mecze[]" value="'.$mecze.'"></b></div></td>
  8. <td width="10%"><div align="center"><b><input type="text" size="2%" name="z[]" value="'.$z.'"></b></div></td>
  9. <td width="10%"><div align="center"><b><input type="text" size="2%" name="r[]" value="'.$r.'"></b></div></td>
  10. <td width="10%"><div align="center"><b><input type="text" size="2%" name="p[]" value="'.$p.'"></b></div></td>
  11. <td width="10%"><div align="center"><b><input type="text" size="4%" name="bramki[]" value="'.$bramki.'"></b></div></td>
  12. <td width="10%"><div align="center"><b><input type="text" size="4%" name="punkty[]" value="'.$punkty.'"></b></div></td>
  13. </tr>
  14. </table>
  15. <input type="hidden" name="zespolid[]" value="'.$zespolid.'">';
  16. }
  17. }
  18. echo'<div align="center"><p><input type="submit" name="edytuj" value="Zapisz"></p></div>';
  19. }
  20. echo'</form>';
  21. ?>


2. Po kliknięciu zapisz formularz powinien wykonac pare instrukcji foreach i zapisac aktualne dane do bazy danych.
Kod wyglada tak:

  1. <?php
  2. if (!empty($_POST['edytuj']) && !empty($_POST['zespolid'])) {
  3.  
  4. require_once ("../baza_dane.php");
  5.  
  6. $zespolid = $_POST['zespolid'];
  7. $pozycja = $_POST['pozycja'];
  8. $nazwa = $_POST['nazwa'];
  9. $mecze = $_POST['mecze'];
  10. $z = $_POST['z'];
  11. $r = $_POST['r'];
  12. $p = $_POST['p'];
  13. $bramki = $_POST['bramki'];
  14. $punkty = $_POST['punkty'];
  15.  
  16. foreach ($zespolid as $zes)
  17. foreach ($pozycja as $poz)
  18. foreach ($nazwa as $naz)
  19. foreach ($mecze as $mec)
  20. foreach ($z as $zwy)
  21. foreach ($r as $rem)
  22. foreach ($p as $por)
  23. foreach ($bramki as $bra)
  24. foreach ($punkty as $pun) {
  25. if (!empty($zes)) {
  26. $zapytanie = "UPDATE zespoly SET 
  27. pozycja = '$poz',
  28. nazwa = '$naz',
  29. mecze = '$mec',
  30. z = '$zwy',
  31. r = '$rem',
  32. p = '$por',
  33. bramki = '$bra',
  34. punkty = '$pun'
  35. WHERE zespolid = '$zes'";
  36. $wynik = mysql_query($zapytanie)
  37. or die(mysql_error());
  38. }
  39. }
  40. ?>


Jednak jak z góry wiadomo informacje się nie zapisują. Czy wie ktoś dlaczego? Funkcja mysql_error() nie zwraca żadnych błędów a np. jeżeli edytuję 3 rzeczy to powyższy kod zapisuje pierwszą poprawnie a pozostałe nadpisuje.

Wygląda to mniej więcej tak:

EDYTUJĘ:
- dana 1
- dana 2
- dana 3

PO ZAPISIE WYGLĄDA TAK
- dana 1
- dana 1
- dana 1

Czy ktoś ma pomysł jak rozwiązac problem? Mam nadzieje ze opisalem wszystko jasno i wyraznie. Jezeli sa watpliwosci moge to jescze jasniej napisac smile.gif
Lejto
też miałem z tym problem zobacz mój poprzedni temat:
http://forum.php.pl/index.php?showtopic=86...mp;#entry435424
tane do edycji musisz zapisać do tablicy i potem tablice wywołać w zapytaniu
macromatic
z 10 minut spedzilem na analizie i niestety nie wiem o co ci chodzi, moglbys rozwinac jasniej wypowiedz??

etc. jezeli dobrze rozumiem to mam takie same dane przesylane przez zmienna superglobalna POST ? tyle ze wycialem kawalek kodu wczesniej dane sa pobierane z bazy danch instrukcja select, a formularz wyswietlany w petli while.

dokladny kod formularza:

  1. <?php
  2. // FORMULARZ EDYCJI ZESPOŁU
  3. elseif (!empty($_POST['edit'])) {
  4.  
  5. require_once ("../baza_dane.php");
  6. $ilewtbl = count($_POST['zespolid']);
  7. if ($ilewtbl == "0") {
  8. echo '<b><p>Wybierz drużyny a następnie kliknij edytuj</p></b>';
  9. }
  10. else {
  11. echo '<form method="post" action="'.$_PHPSELF.'">';
  12. foreach ($_POST['zespolid'] as $zespolid) {
  13. $zapytanie = "SELECT * FROM zespoly WHERE zespolid = '$zespolid'";
  14. $wynik = mysql_query($zapytanie) or die(mysql_error());
  15. // sprawdzam czy liczba rekordow jest mniejsza od 1
  16. $lzesp = mysql_num_rows($wynik); // odczytuje liczbe zespolow
  17. if ($lzesp == 0) {
  18. echo '<p center><strong>Brak zespołu o podanym identyfikatorze
  19. .<br>Staraj się wybierac dane bezpośrednio z panelu administratora</strong></p>';
  20. }
  21. while ($zespol = mysql_fetch_array($wynik)) {
  22. $zespolid = $zespol['zespolid']; // identyfikator zespołu
  23. $liga = $zespol['liga']; // identyfikator ligi
  24. $pozycja = $zespol['pozycja']; // pozycja w lidze
  25. $nazwa = $zespol['nazwa']; // nazwa zespołu
  26. $mecze = $zespol['mecze']; // liczba rozegranych spotkań
  27. $z = $zespol['z']; // liczba zwycięstw
  28. $r = $zespol['r']; // liczba remisów
  29. $p = $zespol['p']; // liczba porażek
  30. $bramki = $zespol['bramki']; // bilans bramkowy
  31. $punkty = $zespol['punkty']; // liczba punktów
  32.  
  33. echo'
  34. <table width="100%" border="0">
  35. <tr>
  36. <td width="10%"><div align="center"><b><input type="text" size="2%" name="pozycja[]" value="'.$pozycja.'"></b></div></td>
  37. <td width="30%"><div align="center"><b><input type="text" size="20%" name="nazwa[]" value="'.$nazwa.'"></b></div></td>
  38. <td width="10%"><div align="center"><b><input type="text" size="2%" name="mecze[]" value="'.$mecze.'"></b></div></td>
  39. <td width="10%"><div align="center"><b><input type="text" size="2%" name="z[]" value="'.$z.'"></b></div></td>
  40. <td width="10%"><div align="center"><b><input type="text" size="2%" name="r[]" value="'.$r.'"></b></div></td>
  41. <td width="10%"><div align="center"><b><input type="text" size="2%" name="p[]" value="'.$p.'"></b></div></td>
  42. <td width="10%"><div align="center"><b><input type="text" size="4%" name="bramki[]" value="'.$bramki.'"></b></div></td>
  43. <td width="10%"><div align="center"><b><input type="text" size="4%" name="punkty[]" value="'.$punkty.'"></b></div></td>
  44. </tr>
  45. </table>
  46. <input type="hidden" name="zespolid[]" value="'.$zespolid.'">';
  47. }
  48. }
  49. echo'<div align="center"><p><input type="submit" name="edytuj" value="Zapisz"></p></div>';
  50. }
  51. echo'</form>';
  52. }
  53. ?>


na prawde nikt nie potrafi mi pomoc?? kurde ;/
mysz0n
a po co robisz wszedzie to foreach? co na tym zyskujesz?
nie łatwiej/lepiej normalnie zmienne do bazy wrzucić?
faster
Chyba bardziej zamotanego update'a nie widziałem smile.gif.

Problem leży w wielokrotnych pętlach foreach. Zamist zapisywać wyświetl na ekranie treść updatea i sam zobaczysz o so chozi ... (a jak to musi dłuuugo trwać). Może tak Ci będzie łątwiej na to popatrzeć:

  1. <?php
  2. foreach ($zespolid as $zes)
  3. {
  4. foreach ($pozycja as $poz)
  5.  {
  6.  foreach ($nazwa as $naz)
  7. {
  8. foreach ($mecze as $mec)
  9. {
  10. foreach ($z as $zwy)
  11. {
  12. foreach ($r as $rem)
  13. {
  14. foreach ($p as $por)
  15. {
  16. foreach ($bramki as $bra)
  17. {
  18. foreach ($punkty as $pun) 
  19. {
  20. if (!empty($zes)) 
  21. {
  22. $zapytanie = "UPDATE zespoly SET 
  23. pozycja = '$poz',
  24. nazwa = '$naz',
  25. mecze = '$mec',
  26. z = '$zwy',
  27. r = '$rem',
  28. p = '$por',
  29. bramki = '$bra',
  30. punkty = '$pun'
  31. WHERE zespolid = '$zes'";
  32.  
  33. $wynik = mysql_query($zapytanie) or die(mysql_error());
  34. }
  35. }
  36. }
  37. }
  38. }
  39. }
  40. }
  41. }
  42.  }
  43. }
  44. ?>



OŁ NOŁ stworzyłem POTFORA [sic!]

...sorki za ironię
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.