Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z UPDATE
Forum PHP.pl > Forum > PHP
asterix1983
mam taki problem: zrobiłem sobie formularz, który pobiera dane do pól, a następnie umożliwia ich zmiane(można powiedzieć zwyczajny formularz). Niestety nie wiem dlaczego nie chce działać podstawowa jego funkcja ->UPDATE<-
oto i on:
  1. <?php
  2. //update_reklamacja.php 
  3.  
  4. if($akcja=='zmiendane') { 
  5. $sql_U = "UPDATE reklamacja 
  6. SET id_klienta='$id_klienta', 
  7. data_reklamacji='$data_reklamacji', data_zwrotu='$data_zwrotu', 
  8. stan='$stan', 
  9. opis_usterki='$opis_usterki' , dodatkowe_info='$dodatkowe_info', 
  10. os_przyj='$os_przyj', os_modyf='$os_modyf' 
  11. WHERE id_reklamacji='$id_reklamacji' "; 
  12.  
  13. $wynik_u=mysql_query($sql_U); 
  14.  
  15. if (!$wynik_u) { 
  16. echo 'Zmiany sie nie powiodły'; 
  17. } 
  18. else 
  19. { 
  20. echo 'Zmiany się powiodły'; 
  21.  
  22. } 
  23.  
  24. } 
  25.  
  26. $sql="select id_reklamacji, id_klienta, data_reklamacji, data_zwrotu, stan, 
  27.  opis_usterki, dodatkowe_info, os_przyj, os_modyf from reklamacja"; 
  28.  
  29. $wynik=mysql_query($sql); 
  30.  
  31. $ile=mysql_num_rows($wynik); 
  32.  
  33. if (!$ile) { 
  34. print ("<p>Brak zanowień</p><br/>"); 
  35. } 
  36. else { 
  37.  
  38. echo "<form action='update_reklamacja.php' method='POST'>"; 
  39. echo "<input type='hidden' name='akcja' value='zmiendane'>"; //tablea 
  40. echo '<table align=center border=2>'; 
  41. echo '<tr> 
  42. <td>ID REK </td> 
  43. <td>ID KLIENTA </td> 
  44. <td>DATA REKLAMACJI </td> 
  45. <td>DATA ZWROTU </td> 
  46. <td>STAN </td> 
  47. <td>OPIS USTERKI </TD> 
  48. <td>INFO DLA KLIENTA </td> 
  49. <td>OS PRZYJM. USTERKE </td> 
  50. <td>OS MODYF. </td> 
  51. </tr>'; 
  52.  
  53.  
  54. for ($i=; $i<$ile ; $i++) 
  55. { 
  56. $wiersz=mysql_fetch_row($wynik); 
  57.  
  58. echo "<tr><td>"; 
  59. echo "<input type='text' size='3' name='id_reklamacji' value='$wiersz[0]' DISABLED>"; 
  60. echo "</td>"; 
  61. echo "<td>"; 
  62. echo "<input type='text' size='2' name='id_klienta' value='$wiersz[1]'>"; 
  63. echo "</td>"; 
  64. echo "<td>"; 
  65. echo "<input type='text' size='10' name='data_reklamacji' value='$wiersz[2]'>"; 
  66. echo "</td>"; 
  67. echo "<td>"; 
  68. echo "<input type='text' size='10' name='data_zwrotu' value='$wiersz[3]'>"; 
  69. echo "</td>"; 
  70. echo "<td> "; 
  71. echo "<SELECT NAME='stan'> 
  72.  <OPTION>Do odbioru 
  73.  <OPTION>W naprawie 
  74.  <OPTION SELECTED DISABLED>$wiersz[4] 
  75. </SELECT>" ; 
  76. echo "</td> "; 
  77. echo "<td>"; 
  78. echo "<textarea name='opis_usterki'cols='17' rows='6'>$wiersz[5]</textarea>"; 
  79. echo "</td>"; 
  80. echo "<td>"; 
  81. echo "<textarea name='dodatkowe_info'cols='17' rows='6'>$wiersz[6]</textarea>"; 
  82. echo "</td>"; 
  83. echo "<td>"; 
  84. echo "<input type='text' name='os_przyj' value='$wiersz[7]' DISABLED>"; 
  85. echo "</td>"; 
  86. echo "<td>"; 
  87. echo "<input type='text' name='os_modyf' value='$wiersz[8]'>"; 
  88. echo "</td>"; 
  89. echo "<td>"; 
  90. echo "</td></tr>"; 
  91.  
  92. } 
  93. echo '</table>'; 
  94. //koniec tablea 
  95.  
  96. echo "<input align='center' type='submit' name='akcja' value='zmień' onclick='confirm('JESTEŚ PEWNY !!! questionmark.gif? ')'>"; 
  97. echo "</form>"; 
  98.  
  99. }
  100.  
  101. ?>

działanie jego pokazane jest na stronie http://radin.pl/sklep/sys/update_reklamacja.php

mógłby ktoś powiedzieć gdzie robie błąd ?
revyag
Zamiast $id_klienta napisz $_POST["id_klienta"], to samo z pozostałymi zmiennymi.
asterix1983
nie pomogło sad.gif
SongoQ
jaki blad wywala?
asterix1983
o to chodzi że błędu nie wywala ale także nie chce zrobić update danych i nie wiem dlaczego
SongoQ
Warunek if($akcja=='zmiendane') { jest niespelniony.
asterix1983
a mógbyś porawić to tak aby działało bo ja nie mam pomysłu, nad taką głupotą siedze cały dzień
batman
A próbowałeś:

  1. <?php
  2. if($_POST['akcja']=='zmiendane')
  3. ?>
?
asterix1983
tak próbowałem nie skutkuje sadsmiley02.gif
nospor
Powiedz mi asterix, czy to tak ciężko wyswietlic sobie zapytanie i sprawdzicm,czy oby napewno jest ono dobrze generowane? Jaksbys dal po utworzeniu zapytania:
  1. <?php
  2. echo $sql_U;
  3. ?>
i przyjrzal sie jemu, to bys zobaczyl co jest nie tak.

Robisz update ale na warunku: WHERE id_reklamacji='$id_reklamacji'
juz to powinines sprawdzic, czy oby napewno zmienna $id_reklamacji ma jakąś wartość. Gdybys to sprawdzilm, o bys zobaczyl ze nie ma zadnej wartosci. A wiesz czemu? Poniewaz dla pola input, ktory przechowuje tą wartość, nadajesz atrybut disabled. Inputy z takim attrybutem nie są przesyłane przez formularz, są poprostu olewane. Zrob z tego pola pole ukryte, lub nadaj mu atrybut readonly a nie disabled.

No idodatkowo zmodyfikuj kod o kontrole ewentualnych bledow:
  1. <?php
  2.  
  3. //.....
  4. echo $sql_U;
  5. $wynik_u=mysql_query($sql_U) or die(mysql_error()) ;
  6. //....
  7.  
  8. ?>
asterix1983
wielkie dzięki za zjechanie mnie czasami sie to przydaje, ale no właśnie ale:
wynik tego jest na stronce:http://radin.pl/sklep/sys/update_reklamacja.php
UPDATE DZIAŁA TYLKO DLA OSTATNIEGO ID_REKLAMACJI exclamation.gif!

  1. UPDATE reklamacja SET id_klienta='2', data_reklamacji='2005-10-11', data_zwrotu='2005-10-14', stan='W naprawie', opis_usterki='tutaj tylko sie robi update' , dodatkowe_info='tylko dla ostatniego wpisu, nie wiem dlaczego?', os_przyj='sta?', os_modyf='' WHERE id_reklamacji='4' Zmiany się powiodły


A tak nie może być, więc moje kolejne pytanie jest takie:
W jaki sposób przerobić zapytanie aby obojętnie dla jakiej krotki(ek) dokonam zmiany, były one odpowiednio updetowane?
Czyli np wpisuje jakąś zmianę do każdej reklamacji i tam sie dokonują zmiany, lub też wpisuje tylko w jednym(bądź dwum) id

moje zapytanie sql wygląda teraz tak:
  1. $sql_U = "UPDATE reklamacja
  2. SET id_klienta='$_POST[id_klienta]',
  3. data_reklamacji='$_POST[data_reklamacji]', data_zwrotu='$_POST[data_zwrotu]',
  4. stan='$_POST[stan]',
  5. opis_usterki='$_POST[opis_usterki]' , dodatkowe_info='$_POST[dodatkowe_info]',
  6. os_przyj='$_POST[os_przyj]', os_modyf='$_POST[os_modyf]'
  7. WHERE id_reklamacji='$_POST[id_reklamacji]' ";
nospor
Cytat
UPDATE DZIAŁA TYLKO DLA OSTATNIEGO ID_REKLAMACJI exclamation.gif!

1) nie krzycz
2) nic dziwnego, gdyz nadpisujesz dane poprzez te same nazwy inputow

daj nazwy jako tablice, uzywajac []:
name='id_reklamacji[]'
i tak dal kazego inputa. Dobierac sie bedziesz
$_POST['id_reklamacji'][0],$_POST['id_reklamacji'][1], ....
i podobnie pozostale pola. bądz tez buduj recznie nazwy z $i:
  1. <?php
  2.  
  3. //...petla
  4. echo "<input type='text' size='3' name='id_reklamacji_$i' ....";
  5.  
  6. ?>

a dobierasz sie tez w petli:
  1. <?php
  2.  
  3. //....petla do updatea
  4. echo $_POST['id_reklamacji_'.$i]; 
  5.  
  6. ?>


obie metody byly juz na forum.

Cytat
wielkie dzięki za zjechanie mnie czasami sie to przydaje
Jak chcesz to moge częściej smile.gif
Medicom
Możesz zrobić jeszcze inaczej, a mianowicie:

  1. <?php
  2.  
  3. //...petla
  4. echo "<input type='text' size='3' name='id_reklamacji[$i]' ....";
  5.  
  6. ?>


a następnie odbierasz zmienną która w tym momencie przyjęła wartość ARRAY

  1. <?php
  2.  
  3. ..... //odbieranie innych zmiennych formularza
  4. $reklamacja_id=$_POST['id_reklamacji']; 
  5. //gotowa tablica z wartościami z formularza
  6.  
  7. print_r ($reklamacja_id); 
  8. //wyświetla ci całą zawartośc tablicy wraz z ich kluczami
  9.  
  10. ?>


dry.gif cool.gif
nospor
@morhen to co zaproponowales jest jednoznaczne z moim [] Tyle tylko ze ty jawnie nadajesz indexy dla tablicy. zastosowanie samego [] powoduje ze on sam nadaje indexy od 0
asterix1983
zrobiłem tak jak powiedziałeś:
  1. <?php
  2.  
  3. if($_POST['akcja']=='zmiendane') {
  4.  
  5. $id="select count(id_reklamacji) from reklamacja";
  6. for ($i=0;$i<=$id;$i++)
  7. {
  8. $sql_U = "UPDATE reklamacja 
  9. SET id_klienta='".$_POST['id_klienta_'.$i]."', 
  10. data_reklamacji='".$_POST['data_reklamacji_'.$i]."', data_zwrotu='".$_POST['data_zwrotu_'.$i]."', 
  11. stan='".$_POST['stan_'.$i]."', 
  12. opis_usterki='".$_POST['opis_usterki_'.$i]."' , dodatkowe_info='".$_POST['dodatkowe_info_'.$i]."', 
  13. os_przyj='".$_POST['os_przyj_'.$i]."', os_modyf='".$_POST['os_modyf_'.$i]."' 
  14. WHERE id_reklamacji='".$_POST['id_reklamacji_'.$i]."' "; 
  15.  
  16.  
  17.  
  18. echo $sql_U;
  19. $wynik_u=mysql_query($sql_U) or die(mysql_error($sql_U)); 
  20.  
  21. if (!$wynik_u) { 
  22. echo 'Zmiany sie nie powiodły'; 
  23. } 
  24. else 
  25. { 
  26. echo 'Zmiany się powiodły'; 
  27. } 
  28.  
  29. }
  30. } 
  31. ?>


Dalej także pozmieniałem <inputy> na tego typu
  1. <?php
  2.  echo "<input type='hidden' size='3' name='id_reklamacji_$i' value='$wiersz[0]' >"; 
  3. ?>

no i wynik jest taki że zmienia mi tylko pierwszy rekord sad.gif
why withstupidsmiley.gif
tutaj pokazane działanie
nospor
ta linijka:
  1. <?php
  2. $id="select count(id_reklamacji) from reklamacja";
  3. ?>

Tu niby pobierasz liczbę rekordów, ale ty do id przypisujesz zapytanie, a nie jego wynik. ma byc:

  1. <?php
  2. $sql="select count(id_reklamacji) from reklamacja";
  3. $result = mysql_query($sql) or die(mysql_error());
  4. $row = mysql_fetch_array($result);
  5. $count = $row[0];
  6. for ($i=0;$i<$count;$i++)
  7. {
  8. //......
  9. }
  10.  
  11. ?>

i nie <= a < smile.gif, gdyz jedziesz od 0

pozdro
asterix1983
poradziłem sobie troche inaczej z tym problemem po przez dodanie jeszcze jednego formulaża.

Niechcąc otwierać nowego topicu przedstawie swój kolejny problem(bardzo powiązany)
To samo(jak wyżej opisałem że zrobiłem) już nie może przejść mi w przypadku kiedy mam takie zapytanie w sql:
  1. <?php
  2.  
  3. $sql="
  4. UPDATE klient k, reklamacja r, zamowienia z set k.imie='".$_post['imie']."' , .... ,
  5. r.opis_usterki='".$_post['opis_usterki']."' , ... , 
  6. z.zlecenie='".$_post['zlecenie']."' , ... 
  7. Where k.id_klienta='".$_POST['id_klienta']."' ";
  8.  
  9. ?>


Zapytanie powodujące wyświetlenie danych w formularzu jest następujące:
  1. <?php
  2.  
  3. $sql="select k.id_klienta, k.imie, k.nazwisko, k.nr_tel_dom, k.nr_tel_kom,
  4.     z.id_zamowienia, z.data_zamowienia, z.data_finalizacji, z.stan_z, z.zlecenie
    , z.dodatkowe_info, z.os_odbierajaca_zlecenie, z.os_modyfik_zlecenie,
  5.         r.id_reklamacji, r.data_reklamacji, r.data_zwrotu, r.stan, r.opis_usterk
    i, r.dodatkowe_info, r.os_przyj, r.os_modyf
  6.           FROM klient k 
  7.             left join zamowienia z on z.id_klienta=k.id_klienta
  8.         left join reklamacja r on r.id_klienta=k.id_klienta 
  9.         WHERE k.id_klienta='".$_GET['id']."' ";
  10.  
  11. ?>

gdzie zmienna $_GET{'id'] przekazywana jest po przez formularz. Wszystkie dane są wyświetlane w odpowiednich inputach.

Mój problem jest taki że nie wiem jak zbudować odpowiednie zapytania/update aby po wyświetleniu się paru wyników można było zmienić każdy z wyników i żeby to zapamiętał. Sposoby które zostały podane wcześniej jakoś mi nie chcą działać sadsmiley02.gif

Dodam że wyświetlanie wyników mam zrobione na takiej samej zasadzie jak wyżej

Prosze o pomoc

Pozdrawiam
SongoQ
Morzesz cos w ten sposob zrobic
  1. UPDATE tabela SET pole = pole + 1 WHERE ..........

Przed wyswietleniem wywolujesz UPDATE.
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.