Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MSSQL][PHP]Zapis rekrdów pobranych przez pętlę while
eurosoft
post
Post #1





Grupa: Zarejestrowani
Postów: 179
Pomógł: 0
Dołączył: 5.11.2010

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


Witam, mam problem przy zapisie rekordów pobranych do tabeli poprzez petlę while. Do bazy zapisuje mi się właściwa ilość rekordów, ale wszystkie posiadają dane z ostatniego rekordu, jak to można zróżnicowć. dziękuję za poradę.
Tak pobieram dane do tabeli:
  1. {
  2. echo '<form action="skladki.php" method="post">';
  3. echo '<input type="hidden" name="a" value="save">';
  4. echo "<input type=\"hidden\" name=\"rodzaj\" value=SK>";
  5.  
  6. echo "<input type=\"image\" style=\"width: 30px; height: 30px\" src=\"img/ikony/Save.png\" alt=\"Zapisz\" title=\"Zapisz\" onClick=\"java script:submit();\">&nbsp;&nbsp;&nbsp;&nbsp;</input>";
  7. echo "<input type=\"image\" style=\"width: 30px; height: 30px\" src=\"img/ikony/wyloguj.png\" alt=\"Rejestr Wpłat / Wypłat\" title=\"Rejestr Wpłat / Wypłat\" onClick=\"self.close()\"></input>";
  8. echo "Obciążenie dotyczy:<br><input type=text name=opis size=\"50\"></input><br>";
  9. echo "Podstawowa kwota obciążenia:<br><input type=text name=\"kwota\" size=\"20\"></input></p>";
  10. echo "Obciążenia";
  11. echo "<br><br>";
  12. echo "<table border=1 cellspacing=0 cellpadding=1 bgcolor=#ADB79E bordercolor=grey>";
  13. echo "<tr>";
  14. echo "<th>L.p.</th>";
  15. echo "<th>Nazwisko i Imię</th>";
  16. echo "<th>Treść</th>";
  17. echo "<th>Data</th>";
  18. echo "<th>% wpłaty</th>";
  19. echo "</tr>";
  20.  
  21. $k = 0; while($r = mysql_fetch_array($wynikkasa))
  22. {
  23. $k++;
  24. echo "<tr>";
  25. echo "<td>".$k."</td>";
  26. echo "<td><input type=\"text\" name=\"imie_nazwisko\" value=\"$r[login]\"></td>";
  27. echo "<td>w/g opisu powyżej</td>";
  28. echo "<td>$data</td>";
  29. echo "<td><input type=\"text\" size=\"5\" value=\"100\" maxlength=\"3\" name=\"procent\" onkeyup=\"CheckIsFloat(this);\"/></td>";
  30. echo "</tr>";
  31. }
  32. echo "</table></center></form>";
  33. }


A tak próbowałem dokonać zapisu do bazy:

  1. $imie_nazwisko = $_POST['imie_nazwisko'];
  2. $data = $data;
  3. $opis = $_POST['opis'];
  4. $rodzaj = $_POST['rodzaj'];
  5. $kwota = $_POST['kwota']*($_POST['procent'])/100;
  6.  
  7.  
  8. for ($ile = 0; $ile < $n; $ile++){
  9. if (!empty($imie_nazwisko) and !empty($data) and !empty($opis) and !empty($kwota))
  10.  
  11. {
  12. $ins = @mysql_query("INSERT INTO kasa SET
  13. imie_nazwisko='$imie_nazwisko',
  14. rodzaj='$rodzaj',
  15. opis='$opis',
  16. kwota='-$kwota',
  17. data = '$data'");
  18. }
  19. }

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
CuteOne
post
Post #2





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


google -> mysql insert

zobacz jak powinien wyglądać taki zapis bo twój wygląda jak UPDATE..

Ten post edytował CuteOne 25.08.2012, 15:06:15
Go to the top of the page
+Quote Post
toaspzoo
post
Post #3





Grupa: Zarejestrowani
Postów: 778
Pomógł: 84
Dołączył: 29.07.2010
Skąd: Gliwice / Pławniowice Mistrz niezmordowanej klawiatury.

Ostrzeżenie: (20%)
X----


Dlaczego jak update ?
Tak też można, tylko jest to wolniejsze rozwiązanie od typowego wstawiania (...) values (...)
Go to the top of the page
+Quote Post
krzesik
post
Post #4





Grupa: Zarejestrowani
Postów: 516
Pomógł: 1
Dołączył: 25.08.2012

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


Cytat(CuteOne @ 25.08.2012, 16:05:56 ) *
google -> mysql insert

zobacz jak powinien wyglądać taki zapis bo twój wygląda jak UPDATE..

Tak masz rację, sekwensja była zła, jednak poprawiłem na:
  1. $ins = @mysql_query("INSERT INTO kasa (imie_nazwisko,data,opis,rodzaj,kwota) VALUES (`$imie_nazwisko`,
  2. `$data`,`$opis`,`$rodzaj`,`-$kwota`)");

i nie zapisuje mi nic....
Go to the top of the page
+Quote Post
CuteOne
post
Post #5





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


  1. $ins = mysql_query("INSERT INTO kasa (imie_nazwisko,data,opis,rodzaj,kwota) VALUES (`$imie_nazwisko`,
  2. `$data`,`$opis`,`$rodzaj`,`-$kwota`)")or die(mysql_error());


nie tłum błędów (chodzi o @ przed funkcją)
Go to the top of the page
+Quote Post
krzesik
post
Post #6





Grupa: Zarejestrowani
Postów: 516
Pomógł: 1
Dołączył: 25.08.2012

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


otrzymję taki błąd:
Unknown column 'xxx' in 'field list'

nie mam kolumny xxx, jest to imie_nazwisko w ostatnim rekordzie

Ten post edytował krzesik 25.08.2012, 21:30:44
Go to the top of the page
+Quote Post
CuteOne
post
Post #7





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


powinno być na odwrót - nazwy kolumn objęte ` ` a wartości ' '

Ten post edytował CuteOne 26.08.2012, 09:14:23
Go to the top of the page
+Quote Post
krzesik
post
Post #8





Grupa: Zarejestrowani
Postów: 516
Pomógł: 1
Dołączył: 25.08.2012

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


teraz zapisało, ale tak samo jak poprzednio czyli 13 razy ostatni rekord pobrany z tabeli wypełnionej sposobem opisanym powyżej, gdzie mam jeszcze błąd? powinienem mieć chyba jakiś wyróżnik że każdy kolejny rekord ma jakiś identyfikator? proszę o pomoc
Go to the top of the page
+Quote Post
zegarek84
post
Post #9





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


nie dałeś całego kodu PHP, gdzie w tej pętli zmieniasz wartości zmiennych które podajesz do insert'a - ja nie widzę, jeśli tak masz w swoim kodzie to co się dziwisz, że wstawia Ci te same wartości skoro to sa te same wartości zmiennych...
Go to the top of the page
+Quote Post
krzesik
post
Post #10





Grupa: Zarejestrowani
Postów: 516
Pomógł: 1
Dołączył: 25.08.2012

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


Cytat(zegarek84 @ 26.08.2012, 11:24:15 ) *
nie dałeś całego kodu PHP, gdzie w tej pętli zmieniasz wartości zmiennych które podajesz do insert'a - ja nie widzę, jeśli tak masz w swoim kodzie to co się dziwisz, że wstawia Ci te same wartości skoro to sa te same wartości zmiennych...


Nie właśnie nie mam nigdzi epodanego parametru zmiany wartości, gdzie powinienem go wstawić?

podczas odbierania danych z forma? np tak:
  1. ...
  2. $k = 0;
  3. $n = 0;
  4. while($r = mysql_fetch_array($wynikkasa))
  5. {
  6. $k++;
  7. echo "<tr>";
  8. echo "<td>".$k."</td>";
  9. echo "<td><input type=\"text\" name=\"imie_nazwisko[$n]\" value=\"$r[login]\"></td>";
  10. echo "<td>w/g opisu powyżej</td>";
  11. echo "<td>$data</td>";
  12. echo "<td><input type=\"text\" size=\"5\" value=\"100\" maxlength=\"3\" name=\"procent\" onkeyup=\"CheckIsFloat(this);\"/></td>";
  13. echo "</tr>";
  14. }
  15. echo "</table></center></form>";
  16.  
  17.  
  18.  
  19.  
  20.  
  21. $imie_nazwisko = $_POST['imie_nazwisko'][$n];
  22. $data = $data;
  23. $opis = $_POST['opis'];
  24. $rodzaj = $_POST['rodzaj'];
  25. $kwota = $_POST['kwota']*($_POST['procent'])/100;
  26. ...
  27.  


(IMG:style_emoticons/default/questionmark.gif)

Już sobie częściowo poradziłem zmieniłem kod w taki sposób:
  1. ....
  2. {
  3. $k++;
  4. echo '<tr>';
  5. echo "<td>".$k."</td>";
  6. echo "<td><input readonly type=\"text\" name=\"imie_nazwisko[]\" value=\"$r[login]\"></td>";
  7. echo '<td>wg opisu powyżej</td>';
  8. echo "<td>$data</td>";
  9. echo "<td><input type=\"text\" size=\"5\" value=\"100\" maxlength=\"3\" name=\"procent\" onkeyup=\"CheckIsFloat(this);\"/></td>";
  10. echo '</tr>';
  11. }
  12. echo "</table></center></form>";
  13. }
  14.  
  15. $imie_nazwisko = $_POST['imie_nazwisko'];
  16. $data = $data;
  17. $opis = $_POST['opis'];
  18. $rodzaj = $_POST['rodzaj'];
  19. $kwota = $_POST['kwota']*($_POST['procent'])/100;
  20.  
  21. foreach($imie_nazwisko AS $imie_nazwisko)
  22.  
  23. {
  24. if (!empty($imie_nazwisko) and !empty($data) and !empty($opis) and !empty($kwota))
  25.  
  26. {
  27. $ins = mysql_query("INSERT INTO kasa (imie_nazwisko,data,opis,rodzaj,kwota) VALUES ('$imie_nazwisko','$data','$opis','$rodzaj','-$kwota')")or die(mysql_error());
  28. }
  29.  


iość rekordów się zgadza, nazwiska są dobrze wpisywane, ale do każdego rekordu zmienia się również pole procen wykorzystywane do obliczenia kwoty, a to mi nie przechodzi.....
Go to the top of the page
+Quote Post

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: 17.09.2025 - 13:04