Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zle wykonanie WHILE i wpisanie do bazy
Forum PHP.pl > Forum > PHP
roghatt
Najpierw kawałek kodu
  1. <FORM ACTION="index.php?top=<?=$ADM_TOP_FAKTURA?>" METHOD="POST" enctype="multipart/form-data">
  2. <?
  3. echo "<table border=\"0\" cellspacing=\"4\">";
  4. echo "<tr>";
  5. echo "<td style=\"background-color: #dffcf8\" colspan=\"3\">";
  6. ?>
  7. Wpisz numer faktury: <INPUT TYPE="TEXT" NAME="nrfaktury" size="25">
  8. <?
  9. echo "</td>";
  10. echo "</tr>";
  11. while($row=mysql_fetch_array($wynik1))
  12. {
  13. $id=$row['id'];
  14. $nazwa= $row['nazwa'];
  15. $cenan = $row['cenan'];
  16. $podatek = $row['podatek'];
  17. $nrfaktury = $_POST['nrfaktury'];
  18.  
  19. echo "<tr>";
  20. echo "<td style=\"background-color: #dffcf8\">";
  21. echo $nazwa;
  22. echo "</td>";
  23. echo "<td style=\"background-color: #dffcf8\">";
  24. echo "$cenan";
  25. echo " zl.";
  26. echo "</td>";
  27. echo "<td style=\"background-color: #dffcf8\">";
  28. ?>
  29. Wpisz ilosc: <INPUT TYPE="TEXT" NAME="ilosc" size="5">
  30. <?
  31. $ilosc = $_POST['ilosc'];
  32. echo "</td>";
  33. echo "</tr>";
  34.  
  35. if ($nrfaktury) {
  36. mysql_query ("INSERT INTO faktura VALUES (' ','$nazwa', '$cenan', '$podatek', '$pkwiu', '$jm','$kreska','$nrfaktury','$ilosc');");
  37. if (mysql_affected_rows()>0) echo("Faktura dodana.");
  38. $result=dbquery($sql,$conn);
  39.  
  40. }
  41. }
  42.  
  43. echo "</table>";
  44. ?>
  45. <input type="hidden" name="test" value="test"><br>
  46. <input type="submit" value="&nbsp;&nbsp;&nbsp;&nbsp;Dodaj&nbsp;&nbsp;&nbsp;&nbsp;">
  47. </form>


Formularz wygląda tak.
Na samej górze pole do wpisania nr faktury.
Pod spodem jedno pod drugim spis produktów nazwa i cena (pobierane z innej tabeli). Obok produktu pole na wpisanie ilości.

Wszystko po kliknięciu na "Dodaj" powinno być wpisane do drugiej tabeli. Wszystko pięknie mi wpisuje, nazwę, cenę, i inne parametry. Numer faktury mi też wpisuje do tabeli, ale w polu "ilość" wpisywana jest ostatnia wartość wpisana przy ostatnim produkcie.
Czyli np. jak wpiszę przy produktach ilość:
Produkt1 ilosc:5
Produkt2 ilosc:6
Produkt3 ilosc:7

i w tabeli w polu ilość wszędzie jest cyfra 7. Po kliknięciu w "dodaj" wywołana jest ta sama strona z formularzem bo w nim znajduje się funkcja wpisywania do bazy.
Nie mogę sobie poradzić jedynie z wpisywaniem tej ilości przy każdym produkcie.
Mam 5 produktów i wyświetla się 5 razy "Faktura dodana" więc 5 razy jest do bazy dodawane ale jak pisałem wpisuje w polu "ilość" wszędzie ostatnią wartość.

Dodatkowo jaki parametr dodać aby nie wpisywało do bazy produktu w której nic nie wpiszemy w polu "ilość"
Myślałem, że:
  1. if ($ilosc) {
  2. mysql_query ("INSERT INTO faktura VALUES (' ','$nazwa', '$cenan', '$podatek', '$pkwiu', '$jm','$kreska','$nrfaktury','$ilosc');");
  3. if (mysql_affected_rows()>0) echo("Faktura dodana.");
  4. $result=dbquery($sql,$conn);
  5. }

ale coś nie do końca działa.
Proszę o wskazówki.
nexis
Cytat(freelinkz @ 7.09.2009, 21:42:24 ) *
Proszę o wskazówki.

  1. wyłącz register_globals
  2. odwołuj się do danych z formularza poprzez $_POST['nazwa_zmiennej']
  3. wyświetl sobie dane otrzymane z formularza i zobacz co w nich masz - print_r($_POST);
thek
Masz problem bo mieszasz wszystko ze wszystkim. Zauważ, że w pętli while część danych bierzesz z bazy ale jednocześnie w tej samej pętli część danych bierzesz z $_POST. Problem z $ilosc masz taki, że powinieneś sprawdzić czy dane z $_POST z tego pola istnieją najpierw przez isset. Formularz bowiem przesyła tylko wypełnione pola. Jeśli nic nie wpiszesz to nawet go nie prześle. A masz taki babol, że do zmiennej ilosc przypisujesz nieistniejące, czyli tak naprawdę nie wiesz co tam Ci się ustawi. Posprawdzaj co masz w zmiennych to sam zauważysz byki.
maly_swd
  1. <FORM ACTION="index.php?top=<?=$ADM_TOP_FAKTURA?>" METHOD="POST" enctype="multipart/form-data">
  2. <?
  3. echo "<table border=\"0\" cellspacing=\"4\">";
  4. echo "<tr>";
  5. echo "<td style=\"background-color: #dffcf8\" colspan=\"3\">";
  6. ?>
  7. Wpisz numer faktury: <INPUT TYPE="TEXT" NAME="nrfaktury" size="25">
  8. <?
  9. echo "</td>";
  10. echo "</tr>";
  11. $i=0;
  12. while($row=mysql_fetch_array($wynik1))
  13. {
  14. $id=$row['id'];
  15. $nazwa= $row['nazwa'];
  16. $cenan = $row['cenan'];
  17. $podatek = $row['podatek'];
  18. $nrfaktury = $_POST['nrfaktury'];
  19.  
  20. echo "<tr>";
  21. echo "<td style=\"background-color: #dffcf8\">";
  22. echo $nazwa;
  23. echo "</td>";
  24. echo "<td style=\"background-color: #dffcf8\">";
  25. echo "$cenan";
  26. echo " zl.";
  27. echo "</td>";
  28. echo "<td style=\"background-color: #dffcf8\">";
  29. ?>
  30. Wpisz ilosc: <INPUT TYPE="TEXT" NAME="ilosc[]" size="5">
  31. <?
  32. $ilosc = $_POST['ilosc'][$i];
  33. echo "</td>";
  34. echo "</tr>";
  35.  
  36. if ($nrfaktury) {
  37. mysql_query ("INSERT INTO faktura VALUES (' ','$nazwa', '$cenan', '$podatek', '$pkwiu', '$jm','$kreska','$nrfaktury','$ilosc');");
  38. if (mysql_affected_rows()>0) echo("Faktura dodana.");
  39. $result=dbquery($sql,$conn);
  40.  
  41. }
  42. $i++;
  43. }
  44.  
  45. echo "</table>";
  46. ?>
  47. <input type="hidden" name="test" value="test"><br>
  48. <input type="submit" value="&nbsp;&nbsp;&nbsp;&nbsp;Dodaj&nbsp;&nbsp;&nbsp;&nbsp;">
  49. </form>
nexis
I posprzątaj swój kod trochę - np.:
  1. <?php
  2. if (isset($_POST['nrfaktury'], $_POST['ilosc'])) {
  3. foreach ($_POST['ilosc'] as $id) {
  4. $query = sprintf("INSERT INTO `faktura` VALUES ('%d')", $id); // tutaj dodaj dodatkowe pola
  5. mysql_query($query) or exit(mysql_error());
  6. }
  7. }
  8. ?>
  9. <form action="<?= $_SERVER['PHP_SELF'] ?>" method="post">
  10. <table id="uzywaj_stylow_css">
  11. <tr>
  12. <td>
  13. Wpisz numer faktury: <input type="text" name="nrfaktury" />
  14. </td>
  15. </tr>
  16. <?php
  17. $query = "Twoje zapytanie MySQL";
  18. $query = mysql_query($query) or exit(mysql_error());
  19. while ($row = mysql_fetch_array($query)) {
  20. printf('<tr><td>%s</td><td>%01.2f zł</td><td><input type="text" name="ilosc[%d]" /></td></tr>', $row['nazwa'], $row['cenan'], $row['id']);
  21. }
  22. ?>
  23. </table>
  24. <p>
  25. <input type="submit" value="Zapisz zmiany" />
  26. </p>
  27. </form>
roghatt
maly_swd dziala :-) dzieki wielkie za pomoc
juz bede wiedzial o co chodzi.

nexis dzieki za wskazowki, to jest bardzo prosty skrypt i nie uzywalem do tego styli tylko pisalem jak leci, ale widze ze kod duzo mniejszy, bede sie juz do tego stosowal.
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.