Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dodawanie produktów oraz ich ilość i cenę do bazy danych
Forum PHP.pl > Forum > PHP
Marecki669
Witam,
mam problem z dodaniem produktów ich ilości i cen do bazy danych. Bardzo proszę o pomoc.

plik wyświetlający formularz:
  1. $addOrder_local = '<h2>Tworzenie Zamówienia</h2>';
  2. $addOrder_local .= '<br><form action="addOrder_local.php" method="POST" class="formaddOrder_local"> ';
  3. $addOrder_local .= '<div id="p_scents"><label>Nazwa produktu:</label><br><input type="text" name="product_name[0]" value="'.$_POST['product_name'][0].'"><br><br>';
  4. $addOrder_local .= '<label>Ilość:</label><br><input type="text" value="'.$_POST['number'][0].'" name="number[0]"><br><br>';
  5. $addOrder_local .= '<label>Cena produktu:</label><br><input type="text" value="'.$_POST['prise'][0].'" name="prise[0]"><br></div><br>';
  6. $addOrder_local .= '<a href="#" id="addScnt"><h4>Dodaj następny produkt</h4></a><br>';
  7. $addOrder_local .= '<br>';


plik odpowiedzialny za działanie formularza:
  1. function getaddOrder_local(){
  2.  
  3. if (isset($_POST['submit'])) {
  4. if (empty($_POST['product_name'])) {
  5. $this->message = 'Nie podano nazwy produktu!';
  6. }else if (empty($_POST['nick'])) {
  7. $this->message = 'Nie podano Nicku zamawiającego!';
  8. }else if (empty($_POST['fv'])) {
  9. $this->message = 'Nie wybrano opcji Faktury!';
  10. }else if (empty($_POST['date_of_sale'])) {
  11. $this->message = 'Nie podano daty sprzedaży!';
  12. }else if (empty($_POST['prise'])) {
  13. $this->message = 'Nie podano ceny produktu!';
  14. }else if (empty($_POST['number'])) {
  15. $this->message = 'Nie podano ilości produktu!';
  16. }else if (empty($_POST['send_prise'])) {
  17. $this->message = 'Nie podano kosztów przesyłki!';
  18. }else if (empty($_POST['sume_prise'])) {
  19. $this->message = 'Nie podano sumy do zapłaty!';
  20. }else if ($_POST['send_form'] == '-') {
  21. $this->message = 'Nie wybrano formy wysyłki!';
  22. }else if ($_POST['email'] == '-') {
  23. $this->message = 'Nie podano e-maila zamawiającego!';
  24. }else{
  25.  
  26. if ($_POST['fv'] == '1') {
  27. $fv = 'Tak';
  28. }else{
  29. $fv = 'Nie';
  30. }
  31.  
  32. if ($_POST['send_form'] == '1') {
  33. $send_form = 'Przesyłka kurierska';
  34. }else if ($_POST['send_form'] == '2') {
  35. $send_form = 'List polecony priorytetowy';
  36. }else if ($_POST['send_form'] == '3') {
  37. $send_form = 'List polecony ekonomiczny';
  38. }else if ($_POST['send_form'] == '4') {
  39. $send_form = 'Paczka pocztowa priorytetowa';
  40. }else if ($_POST['send_form'] == '5') {
  41. $send_form = 'Paczka pocztowa ekonomiczna';
  42. }else if ($_POST['send_form'] == '6') {
  43. $send_form = 'Paczka24';
  44. }else if ($_POST['send_form'] == '7') {
  45. $send_form = 'Paczka48';
  46. }else if ($_POST['send_form'] == '8') {
  47. $send_form = 'List ekonomiczny';
  48. }else if ($_POST['send_form'] == '9') {
  49. $send_form = 'List priorytetowy';
  50. }else if ($_POST['send_form'] == '10') {
  51. $send_form = 'Pocztex Kurier48';
  52. }else if ($_POST['send_form'] == '11') {
  53. $send_form = 'Przesyłka pobraniowa priorytetowa / Paczka24 pobranie';
  54. }else if ($_POST['send_form'] == '12') {
  55. $send_form = 'Przesyłka pobraniowa / Paczka48 pobranie';
  56. }
  57.  
  58.  
  59. $product_n = count($_POST['product_name']);
  60.  
  61. $query = "INSERT INTO Orders_local (nr_transakcji, nick, adres, fv, date_of_sale, send_prise, suma_prise, pay_form, send_form, send_email_p, email) VALUES ('".$_POST['nr_trans']."', '".$_POST['nick']."', '".$_POST['adres']."', '".$_POST['fv']."', '".$_POST['date_of_sale']."', '".$_POST['send_prise']."', '".$_POST['sume_prise']."', '".$_POST['pay_form']."', '".$_POST['send_form']."', '".$_POST['send_email']."', '".$_POST['email']."')";
  62. $stmt = $this -> pdo -> prepare($query);
  63. $stmt -> execute();
  64.  
  65. $products = array(
  66. 'products' => $_POST['product_name'],
  67. 'number' => $_POST['number'],
  68. 'prise' => $_POST['prise']);
  69.  
  70. $sql = "
  71. INSERT INTO Orders_products (products, number, prise)
  72. VALUES (':products', ':number', ':prise')
  73. ";
  74. $stmt = $pdo->prepare($sql);
  75. if($stmt == false) {
  76. throw new Exception(print_r($pdo->errorInfo,1).PHP_EOL.$sql);
  77. }
  78. foreach($products as $data) {
  79. $values = array(
  80. ':products' => $data['products'],
  81. ':number' => $data['number'],
  82. ':prise' => $data['prise']
  83.  
  84. );
  85. if($stmt->execute($values) == false) {
  86. throw new Exception(print_r($stmt->errorInfo(),1).PHP_EOL.$sql);
  87. }
  88. }
  89.  
  90.  
  91. }
  92. }
  93.  
  94. }


W bazie danych osobno mam informacje o zamówieniu a osobno produkty które zostały zamówione. Proszę o pomoc jeśli ktoś ma inną koncepcję niech też napisze. Z góry dzięki
mrWodoo
Ok, ale tak w sumie to nikt oprócz Ciebie nie wie jaki to jest ten twój problem...
Marecki669
wybacz no w sumie to nwm jak dodać te dane z formularza do bazy danych bo te dane są w array
mrWodoo
Przecież masz zapytanie SQL, jeśli się nie wykonuje to sprawdź błędy mysql lub błędy php bo może gdzieś masz babola
Marecki669
no mam ale wydaje mi się że tu mam źle napisane, że źle odczytuje te dane z fomrularza i przekształcam je do takiej formy dzięki której mogę to dodać do bazy danych
skarabe.pl
Po pierwsze nie:
  1. $sql = "
  2. INSERT INTO Orders_products (products, number, prise)
  3. VALUES (':products', ':number', ':prise')
  4. ";

Tylko (bez cudzysłowów wokół nazw zmiennych wiązanych):
  1. $sql = "
  2. INSERT INTO Orders_products (products, number, prise)
  3. VALUES (:products, :number, :prise)
  4. ";


Po drugie ten foreach nie ma ŻADNEGO sensu (przecież masz tylko jeden produkt do dodania, prawda?):
  1. foreach($products as $data) {
  2. $values = array(
  3. ':products' => $data['products'],
  4. ':number' => $data['number'],
  5. ':prise' => $data['prise']
  6.  
  7. );
  8. if($stmt->execute($values) == false) {
  9. throw new Exception(print_r($stmt->errorInfo(),1).PHP_EOL.$sql);
  10. }
  11. }

Powinno być raczej po prostu:
  1. if($stmt->execute($products) == false) {
  2. throw new Exception(print_r($stmt->errorInfo(),1).PHP_EOL.$sql);
  3. }


Po trzecie - po angielsku cena to price, a nie prise.
Marecki669
No właśnie że nie jest funkcja dodająca możliwość dodawania więcej produktów:
  1. $(function() {
  2. var scntDiv = $('#p_scents');
  3. var i = $('#p_scents p').size() + 1;
  4.  
  5. $('#addScnt').live('click', function() {
  6. $('<br><br><p><label for="p_scnts">Nazwa Produktu:<br><input type="text" id="p_scnt" size="20" name="product_name[' + i +']" value="" /></label><br><br><label for="p_scnts">Ilość:<br><input type="text" id="p_scnt" size="20" name="number[' + i +']" value="" /></label><br><br><label for="p_scnts">Cena produktu:<br><input type="text" id="p_scnt" size="20" name="prise[' + i +']" value="" /></label> <a href="#" id="remScnt">Usuń</a></p>').appendTo(scntDiv);
  7. i++;
  8. return false;
  9. });
  10.  
  11. $('#remScnt').live('click', function() {
  12. if( i > 1 ) {
  13. $(this).parents('p').remove();
  14. i--;
  15. }
  16. return false;
  17. });
  18. });


Więc do bazy dodaje wiele produktów
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.