Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Aktualizowanie danych do bazy.
Forum PHP.pl > Forum > Przedszkole
vifon
Witam, mój problem polega na tym, że napisałem taki mały skrypcik do aktualizowania danych bazy mysql.. i wszystko ładnie działa, poza tym, że gdy jest jeden rekord w bazie wszystko jest ok, problem pojawia się gdy jest więcej niż 1.. wtedy aktualizuje tylko ostatni rekord.. z tego co czytałem trzeba by zastosować jakąś pętle.. ( chyba ) próbowałem - niestety nie mogę sobie z tym poradzić więc proszę Was o pomoc, Dzięki z góry.

  1. <?php
  2. If ($a ==''){
  3. $wynik = mysql_query("SELECT * FROM uslugi")
  4. or die('Błąd zapytania');
  5.  
  6. if(mysql_num_rows($wynik) > 0) {
  7. echo "<table cellpadding=0 border=2>";
  8.  
  9. echo "<tr>";
  10. echo "<td><center><b>USLUGA</td>";
  11. echo "<td><center><b>CENA</td>";
  12. echo "<td><center><b>STATUS</td>";
  13.  
  14. echo "</tr></b></center>";
  15. while($r = mysql_fetch_assoc($wynik)) {
  16. $statu=$r['status'];
  17. $id=$r['id'];
  18. echo "<tr>";
  19. echo '<form action="uslugi.php" method="post">
  20. <input type="hidden" name="a" value="save" />
  21. <input type="hidden" name="id" value="'.$id.'" />
  22. ';
  23.  
  24. echo "<td><input disabled=disabled type=text value=".$r['usluga']." size=1></td>";
  25. echo "<td><input type=text name='cena' value=".$r['cena']." size=1></td>";
  26. echo '<td><SELECT name="status" style="width: 95px;">
  27. <option disabled="disabled">'.$statu.'</option>
  28. <option value="Aktywny">Aktywny</option>
  29. <option value="Nieaktywny">Nieaktywny</option>
  30. </select></td><center> ';
  31.  
  32. echo "</tr>";
  33. }
  34.  
  35. echo "</table>";
  36. echo'<input type="submit" value="Aktualizuj"></center></form>';
  37.  
  38. }
  39. }
  40.  
  41. elseif($a == 'save') {
  42.  
  43.  
  44. $status = $_POST['status'];
  45. $cena = $_POST['cena'];
  46. $id = $_POST['id'];
  47.  
  48.  
  49. mysql_query("UPDATE uslugi SET `status`='$status', `cena`='$cena' WHERE `id`= '$id'")
  50. or die('Błąd zapytania');
  51. echo '
  52.  
  53. <table><tr>
  54. <td><img src=images/loading.gif></td>
  55. <td>Dane zostały zaktualizowane!</td>
  56. </tr></table>
  57.  
  58. <meta http-equiv=refresh content=2;url=uslugi.php>
  59.  
  60. ';
  61. }
  62.  
  63. ?>
buliq
Więc przeanalizuj co właśnie zrobiłeś smile.gif

Tworzysz formularz z kilkoma wierszami, natomiast przesyłasz sobie dane tylko ostatniego. A to dlatego że w nazwach pól nie tworzysz tablic ([]). Jak już to zrobisz otrzymasz wszystkie dane w postawi tablicy, będziesz mógł zastosować swoją pętlę smile.gif
vifon
Rozumiem o co Ci chodzi tylko nie bardzo wiem jak to zrobić.. wydaje mi się, że tutaj powinna być tablica while($r = mysql_fetch_assoc($wynik[tablica?])) {

jak byś mógł mnie jeszcze trochę naprowadzić..


@@@ EDIT

  1. <?php
  2. If ($a ==''){
  3. $wynik = mysql_query("SELECT * FROM uslugi")
  4. or die('Błąd zapytania');
  5.  
  6. if(mysql_num_rows($wynik) > 0) {
  7. echo "<table cellpadding=0 border=2>";
  8.  
  9. echo "<tr>";
  10. echo "<td><center><b>USLUGA</td>";
  11. echo "<td><center><b>CENA</td>";
  12. echo "<td><center><b>STATUS</td>";
  13.  
  14. echo "</tr></b></center>";
  15. while($r = mysql_fetch_assoc($wynik)) {
  16. $statu=$r['status'];
  17. $id=$r['id'];
  18. echo "<tr>";
  19. echo '<form action="uslugi.php" method="post">
  20. <input type="hidden" name="a" value="save" />
  21. <input type="hidden" name="id" value="'.$id.'" />
  22. ';
  23. $licznik=licznik+1;
  24. echo "<td><input disabled=disabled type=text value=".$r['usluga']." size=1></td>";
  25. echo "<td><input type=text name='cena[licznik]' value=".$r['cena']." size=1></td>";
  26. echo '<td><SELECT name="status[licznik]" style="width: 95px;">
  27. <option disabled="disabled">'.$statu.'</option>
  28. <option value="Aktywny">Aktywny</option>
  29. <option value="Nieaktywny">Nieaktywny</option>
  30. </select></td><center> ';
  31.  
  32. echo "</tr>";
  33. }


i później do bazy też robie pętle, licznik i dodaje np where `id`='$licznik' ?
buliq
Najlepiej gdyby była to tablica for. Zobacz:

  1. <input type="text" name="cos[]" />
  2. <input type="text" name="cos[]" />
  3. <input type="text" name="cos[]" />
  4. <input type="text" name="cos[]" />
  5. <input type="text" name="cos[]" />

Utworzyliśmy 5 inputów, każdy o tej samej nazwie jednak dodanie na końcu [] spowoduje wysłanie tych danych w postaci tablicy, gdzie kluczem jest kolejna liczba zaczynając od 0.
Po stronie php obsłużymy to tak:
  1. for ($i=0;$i<count($_POST['cos']);$i++) {
  2. echo $_POST['cos'][$i];
  3. }


Jeżeli utworzymy kilka pól w ten sposób, a ich ilosć jest taka sama to wystarczy wykonać jedną pętlę for - $i będzie poprawnym indeksem dla każdej z danych smile.gif
vifon
Zrobiłem to tak i coś nie śmiga.. ( sorry, że Was (Ciebie) tak wykorzystuję, ale wdl mnie jest ok a jednak nie działa..

  1. <?php
  2. If ($a ==''){
  3. $wynik = mysql_query("SELECT * FROM uslugi")
  4. or die('Błąd zapytania');
  5.  
  6. if(mysql_num_rows($wynik) > 0) {
  7. echo "<table cellpadding=0 border=2>";
  8.  
  9. echo "<tr>";
  10. echo "<td><center><b>USLUGA</td>";
  11. echo "<td><center><b>CENA</td>";
  12. echo "<td><center><b>STATUS</td>";
  13.  
  14. echo "</tr></b></center>";
  15. while($r = mysql_fetch_assoc($wynik)) {
  16. $statu=$r['status'];
  17. $l=$l+1;
  18. $id=$r['id'][$l];
  19. echo "<tr>";
  20. echo '<form action="uslugi.php" method="post">
  21. <input type="hidden" name="a" value="save" />
  22. <input type="hidden" name="id[$l]" value="'.$id.'" />
  23. ';
  24.  
  25. echo "<td><input disabled=disabled type=text value=".$r['usluga']." size=1></td>";
  26. echo "<td><input type=text name='cena[$l]' value=".$r['cena']." size=1></td>";
  27. echo '<td><SELECT name="status[$l]" style="width: 95px;">
  28. <option disabled="disabled">'.$statu.'</option>
  29. <option value="Aktywny">Aktywny</option>
  30. <option value="Nieaktywny">Nieaktywny</option>
  31. </select></td><center> ';
  32.  
  33. echo "</tr>";
  34. }
  35.  
  36. echo "</table>";
  37. echo'<input type="submit" value="Aktualizuj"></center></form>';
  38.  
  39. }
  40. }
  41.  
  42. elseif($a == 'save') {
  43.  
  44. for ($l=0;$l<count($_POST['cos']);$l++) {
  45. $cena=$_POST['cena'][$l];
  46. $status=$_POST['cena'][$l];
  47. $id=$_POST['id'][$l];
  48.  
  49.  
  50.  
  51. mysql_query("UPDATE uslugi SET `status`='$status', `cena`='$cena' WHERE `id`= '$id'")
  52. or die('Błąd zapytania');
  53. }
  54. echo '
  55.  
  56. <table><tr>
  57. <td><img src=images/loading.gif></td>
  58. <td>Dane zostały zaktualizowane!</td>
  59. </tr></table>
  60.  
  61. <meta http-equiv=refresh content=2;url=uslugi.php>
  62.  
  63. ';
  64. }
  65.  
  66. ?>
bastard13
Nie działa przez tą linijkę:
  1. for ($l=0;$l<count($_POST['cos']);$l++)

U ciebie nie ma w tablicy $_POST klucza 'cos'. Zmień go na id, cena lub status, to powinno zadziałać.

Poza tym masz złe podstawianie tutaj:
  1. $status=$_POST['cena'][$l];
smile.gif

Dodatkowo przydałaby ci się jakaś walidacja danych.

Poza tym otwieranie form'a i input z name = 'a' powienien być przed pętlą while.
vifon
Właśnie zmieniłem i nadal to samo.. a czy z $id jest wszystko dobrze?

  1. $id=$r['id'][$l];


  1. <input type="hidden" name="id[$l]" value="'.$id.'" />
bastard13
Dodaj sobie w tym bloku elseif:
  1. var_dump($_POST);

i zobacz, czy dostajesz to, co chcesz dostać.
vifon
Wyświetla wszystko jak należy oprócz $id - a przy zapisie do bazy porównuje właśnie where `id`='$id' więc coś nie tak z tym $id - tylko co..
buliq
  1. while($r = mysql_fetch_assoc($wynik)) {
  2. $statu=$r['status'];
  3. $l=$l+1;


$l w tym momencie jest już równe 1 więc w forze też musi być od 1
bastard13
Zamień:
  1. $id=$r['id'][$l];

na
  1. $id=$r['id'];
vifon
Wyzerowałem $l przed pętlą i zmieniłem to co proponował bastard13 i nadal nic...



@@@


Obecnie kod wygląda tak:

  1. <?php
  2. If ($a ==''){
  3. $wynik = mysql_query("SELECT * FROM uslugi")
  4. or die('Błąd zapytania');
  5.  
  6. if(mysql_num_rows($wynik) > 0) {
  7. echo "<table cellpadding=0 border=2>";
  8.  
  9. echo "<tr>";
  10. echo "<td><center><b>USLUGA</td>";
  11. echo "<td><center><b>CENA</td>";
  12. echo "<td><center><b>STATUS</td>";
  13.  
  14. echo "</tr></b></center>";
  15. while($r = mysql_fetch_assoc($wynik)) {
  16. $statu=$r['status'];
  17. $l=$l+1;
  18. $id=$r['id'];
  19. echo "<tr>";
  20. echo '<form action="uslugi.php" method="post">
  21. <input type="hidden" name="a" value="save" />
  22. <input type="hidden" name="id[$l]" value="'.$id[$l].'" />';
  23.  
  24. echo "<td><input disabled=disabled type=text value=".$r['usluga']." size=1></td>";
  25. echo "<td><input type=text name='cena[$l]' value=".$r['cena']." size=1></td>";
  26. echo '<td><SELECT name="status[$l]" style="width: 95px;">
  27. <option disabled="disabled">'.$statu.'</option>
  28. <option value="Aktywny">Aktywny</option>
  29. <option value="Nieaktywny">Nieaktywny</option>
  30. </select></td><center> ';
  31.  
  32. echo "</tr>";
  33. }
  34.  
  35. echo "</table>";
  36. echo'<input type="submit" value="Aktualizuj"></center></form>';
  37. $l=0;
  38. }
  39. }
  40.  
  41. elseif($a == 'save') {
  42.  
  43. for ($l=0;$l<count($_POST['id']);$l++) {
  44. $cena=$_POST['cena'][$l];
  45. $status=$_POST['status'][$l];
  46. $id=$_POST['id'][$l];
  47.  
  48. mysql_query("UPDATE uslugi SET `status`='$status', `cena`='$cena' WHERE `id`= '$id'")
  49. or die('Błąd zapytania');
  50. }
  51. echo '
  52.  
  53. <table><tr>
  54. <td><img src=images/loading.gif></td>
  55. <td>Dane zostały zaktualizowane!</td>
  56. </tr></table>
  57. <meta http-equiv=refresh content=2;url=uslugi.php>
  58.  
  59.  
  60. ';
  61. }
  62.  
  63. ?>
buliq
  1. $l=$l+1;

przenieś na koniec while a
[php]
$l=0;
[php]
wstaw też przed while
vifon
Niestety - nic nie dało..
CuteOne
  1. <?php
  2.  
  3. if(empty($_POST)) {
  4.  
  5. $query = mysql_query("SELECT * FROM uslugi") or die(mysql_error());
  6.  
  7. if(mysql_num_rows($query)) {
  8.  
  9. $write = '<form action="uslugi.php" method="post">
  10. <input type="hidden" name="a" value="save" />
  11. <table cellpadding="0" border="2">
  12. <tr>
  13. <td class="table-cell">USLUGA</td>
  14. <td class="table-cell">CENA</td>
  15. <td class="table-cell">STATUS</td>
  16. </tr>';
  17.  
  18.  
  19. while($r = mysql_fetch_assoc($query)) {
  20.  
  21. $write .= '<tr>
  22. <input type="hidden" name="id[]" value="'.$r['id'].'" />
  23.  
  24. <td><input disabled="disabled" type="text" value="'.$r['usluga'].'" size="1"></td>
  25. <td><input type=text name="cena[]" value="'.$r['cena'].'" size="1"></td>
  26. <td><SELECT name="status[]" style="width: 95px;">
  27. <option disabled="disabled">'.$r['status'].'</option>
  28. <option value="Aktywny">Aktywny</option>
  29. <option value="Nieaktywny">Nieaktywny</option>
  30. </select></td>
  31. </tr>';
  32. }
  33.  
  34. $write .= '</table>
  35. <div class="row-center"><input type="submit" value="Aktualizuj"></div>
  36. </form>';
  37.  
  38. echo $write;
  39. }
  40. }
  41. else {
  42.  
  43. for ($i=0;$i<count($_POST['id']);$i++) {
  44.  
  45. $cena=$_POST['cena'][$i];
  46. $status=$_POST['status'][$i];
  47. $id=$_POST['id'][$i];
  48.  
  49. mysql_query("UPDATE uslugi SET `status`='$status', `cena`='$cena' WHERE `id`= '$id'")
  50. or die(mysql_error());
  51. }
  52. echo '
  53.  
  54. <table><tr>
  55. <td><img src=images/loading.gif></td>
  56. <td>Dane zostały zaktualizowane!</td>
  57. </tr></table>
  58. <meta http-equiv=refresh content=2;url=uslugi.php>';
  59. }
  60.  
  61. ?>


Sorry ale nie mogłem patrzeć na to kaleczenie HTML. Do styli dodaj sobie .table-cell i .row-center
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.