Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Kilka formularzy zapisanych do bazy
Forum PHP.pl > Forum > Przedszkole
alien69
Witam.
Na początku zaznaczę że to mój pierwszy post smile.gif
Mam problem z wprowadzaniem danych z formularza do bazy.
Mam taki kod, który wyświetla mi wszystkie dostępne towary w magazynie. Jego celem ma być wysłanie danych o towarach zakupionych.
Ponieważ w bazie jest więcej niż jeden towar(rekord) czy jest możliwość jakiejś pętli czy czegoś aby każdy rekord z wpisaną wartością ilosc_s został zapisany do innej bazy? Zaznaczam że wprowadzenie metodą $_POST dla jednego rekordu (dodanie towaru do bazy) udało mi się wykonać. Natomiast mam problem z wieloma rekordami

  1. <?php
  2.  
  3. $connection = @mysql_connect(localhost,root,dex)
  4.  
  5. or die ('brak polaczenia');
  6. $db = @mysql_select_db('Sklep',$connection)
  7. or die ('brak polaczenia');
  8. $wynik = mysql_query("SELECT * FROM magazyn ORDER BY nazwa")
  9. or die('błąd zapytania');
  10. echo "<table cellpandding=\"2\" border=1>";
  11. echo "<tr>";
  12. echo   "<td width='120'>nazwa</td>";
  13. echo    "<td width='40'>ilosc</td>";
  14. echo    "<td width='50'>cena_n</td>";
  15. echo    "<td width='50'>cena_b</td>";
  16. echo  "</tr>";
  17. echo "</table>";
  18. if(mysql_num_rows($wynik) > 0) {
  19. echo "<table border=1>";
  20. while($r = mysql_fetch_array($wynik)) {
  21. echo "<tr>";
  22. echo ('<form action="kup.php" method="post">');
  23. echo ('<td width="120"><input type="text" value="'.$r[1].'" name="nazwa" />  </td>');
  24. echo ('<td width="120"><input type="text" value="'.$r[2].'" name="ilosc" /> </td>');
  25. echo ('<td width="120"><input type="text" value="'.$r[3].'" name="cena_n" />  </td>');
  26. echo ('<td width="120"><input type="text" value="'.$r[4].'" name="cena_b" />  </td>');
  27. echo ('<td width="50"><input type="text" value="ilość" name="ilosc_s" />  </td>');
  28. echo "</tr>";
  29. }
  30. echo "</table>";
  31.  
  32.  
  33. echo "<br />";
  34. echo ('<input type="submit" value="dodaj" />');
  35. mysql_close($connection);
  36. }
  37. ?>

Z góry dziękuję za wszelkie sugestie
Krytykę przyjmuję ze skuchą biggrin.gif

W takiej postaci do bazy zostaje dodany tylko ostatni rekord.
Czyli trzeba zastosować jakiś sposób numeracji pól.
No to mam zagwozdkę.
TheaSiX
po pierwsze kod PHP ujmij w znaczniki
Cytat
[ php]
[ /php]

aby został on czytelnie wyświetlony na forum

i możesz pokazać kod pliku kup.php ?

I takie pytanie, czemu wszystkie rekordy wyświetlasz w input text ?
alien69
prawdę mówiąc na chwilę obecną tak już namieszałem, próbując coś poprawić że kup.php nie ma całkowicie sensu.
Zastosowałem input text aby móc wykorzystać $_POST.
zastanawiam się nad pętlą w kup.php, jaką trzeba zastosować.

Apropo pytania TheaSiX czy można pola input zadeklarować w innej formie aby nie było możliwości zmiany wartości.
Czy nik nie ma pomysłu pętle czy inną magiczną sztuczkę aby to zadzaiałało?
TheaSiX
przeczytałem Twojego posta jeszcze raz.

powód dla którego przesłany zostaje tylko ostatni rekord to dlatego, że formularz otwierasz N razy, a zamykasz go tylko raz, np:

  1. </form>

Logiczne jest więc działanie, że tylko ostatni form zostanie przesłany. Ja w takich rzeczach użyłbym osobnych przycisków dla każdego forma lub normalne wyświetlanie + użycie linku kup.php?nazwa=$nazwa&cena=$cena etc. + metody GET

Oczywiście jest to trochę roboty przy kilkudziesięciu rekordach, więc to zależy od tego ile naraz chciałbyś wprowadzić do tej drugiej bazy. Żeby nie było, że wszystko wygląda tak źle, to w pliku kup.php możesz użyć header(Location:), aby po wprowadzeniu od razu przenosiło Cię z powrotem na stronę z wypisanymi wszystkimi produktami..
alien69
Dla potomności załączam działający kod

  1. <?php
  2.  
  3. $connection = @mysql_connect(localhost,root,dex)
  4.  
  5. or die ('brak polaczenia');
  6. $db = @mysql_select_db('Sklep',$connection)
  7. or die ('brak polaczenia');
  8. $wynik = mysql_query("SELECT * FROM magazyn ORDER BY nazwa")
  9. or die('błąd zapytania');
  10. echo "<table cellpandding=\"2\" border=1>";
  11. echo "<tr>";
  12. echo   "<td width='150'>nazwa</td>";
  13. echo    "<td width='150'>ilosc</td>";
  14. echo    "<td width='150'>cena_n</td>";
  15. echo    "<td width='150'>cena_b</td>";
  16. echo    "<td width='150'>sztuk</td>";
  17. echo  "</tr>";
  18. echo "</table>";
  19. if(mysql_num_rows($wynik) > 0) {
  20. echo "<table border=1>";
  21. while($r = mysql_fetch_array($wynik)) {
  22. echo "<tr>";
  23. echo ('<form action="kup.php" method="post">');
  24. echo ('<td width="120"><input type="text" value="'.$r[1].'" name="nazwa" />  </td>');
  25. echo ('<td width="40"><input type="text" value="'.$r[2].'" name="ilosc" /> </td>');
  26. echo ('<td width="50"><input type="text" value="'.$r[3].'" name="cena_n" />  </td>');
  27. echo ('<td width="50"><input type="text" value="'.$r[4].'" name="cena_b" />  </td>');
  28. echo ('<td width="50"><input type="text"  name="ilosc_s" />  </td>');
  29.  
  30. echo ('<td width="50"><input type="submit" value="Kup" /></form> </td>');
  31. echo "</tr>";
  32. }
  33. echo "</table>";
  34.  
  35.  
  36. echo "<br />";
  37.  
  38. mysql_close($connection);
  39. }
  40. ?>


oraz kup.php

  1. <?php
  2. $nazwa = $_POST['nazwa'];
  3. $cena_n = $_POST['cena_n'];
  4. $cena_b = $_POST['cena_b'];
  5. $ilosc_s = $_POST['ilosc_s'];
  6. if ($nazwa and $ilosc and $cena_n and $cena_b)
  7. {
  8. $connection = @mysql_connect(localhost,root,dex)
  9.  
  10. or die ('brak polaczenia');
  11. $db = @mysql_select_db('Sklep',$connection)
  12. or die ('brak polaczenia');
  13.  
  14. $ins = @mysql_query("INSERT INTO sprzedarz SET nazwa='$nazwa',ilosc='$ilosc_s',cena_netto='$cena_n',cena_brutto='$cena_b'");
  15. if($ins) echo "rekord dodany";
  16. else echo "błąd dodawania";
  17. mysql_close($connection);
  18. }
  19. header("Location: <a href=\"http://localhost/Sklep/test2.php");&#092;" target=\"_blank\">http://localhost/Sklep/test2.php");</a>
  20. ?>


ładnie dodaje towar do listy sprzedanych i wraca do list towarów
Teraz popracuje nad detalami (odejmowanie kupionego towaru od stanu magazynu itp.)
TheaSiX
header. wystarczy, że zrobisz tak: (nie wiem po co ten dodatkowy kod tam jest?)
  1. <?php
  2. header("Location: /test2.php");
  3. ?>
alien69
Prawdę mówiąc nie mam pojęcia skąd to sie tam wzięło smile.gif
u mnie wygląda to tak
header("Location: http://localhost/Sklep/test2.php");

Już wiem skąd smile.gif jak puszczam kod w znacznikach [php][/php] dodaje się automatycznie
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.