save_product.php 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. <?php
  2. require_once('conn.php');
  3. // Check login status
  4. checkLogin("信息管理");
  5. // Initialize all variables to avoid undefined warnings
  6. $id = isset($_POST['id']) ? $_POST['id'] : '';
  7. $product_name = isset($_POST['ProductName']) ? htmlspecialcharsFix($_POST['ProductName']) : '';
  8. $product_img = isset($_POST['ProductImg']) ? htmlspecialcharsFix($_POST['ProductImg']) : '';
  9. $unit = isset($_POST['unit']) ? htmlspecialcharsFix($_POST['unit']) : '';
  10. $moq = isset($_POST['moq']) ? htmlspecialcharsFix($_POST['moq']) : '';
  11. $category_id = isset($_POST['category_id']) ? intval($_POST['category_id']) : 0;
  12. $nosale = isset($_POST['nosale']) ? $_POST['nosale'] : array();
  13. $note = isset($_POST['note']) ? htmlspecialcharsFix($_POST['note']) : '';
  14. $tips = isset($_POST['tips']) ? htmlspecialcharsFix($_POST['tips']) : '';
  15. $keys = isset($_POST['keys']) ? $_POST['keys'] : '';
  16. $page = isset($_POST['page']) ? $_POST['page'] : 1;
  17. // Initialize specification variables
  18. $spec_name = isset($_POST['spec_name']) ? $_POST['spec_name'] : array();
  19. $spec_value = isset($_POST['spec_value']) ? $_POST['spec_value'] : array();
  20. $spec_price = isset($_POST['spec_price']) ? $_POST['spec_price'] : array();
  21. $spec_moq = isset($_POST['spec_moq']) ? $_POST['spec_moq'] : array();
  22. $spec_code = isset($_POST['spec_code']) ? $_POST['spec_code'] : array();
  23. $spec_sort = isset($_POST['spec_sort']) ? $_POST['spec_sort'] : array();
  24. $spec_id = isset($_POST['spec_id']) ? $_POST['spec_id'] : array();
  25. // Redirect URL
  26. $redirect_url = "products.php?Keys=" . $keys . "&Page=" . $page;
  27. if ($category_id) {
  28. $redirect_url .= "&category_id=" . $category_id;
  29. }
  30. // Determine if this is an edit or a new record
  31. $is_edit = (!empty($id) && is_numeric($id));
  32. // Process nosale array into comma-separated string
  33. $nosale_str = '';
  34. if (is_array($nosale) && !empty($nosale)) {
  35. $nosale_clean = array_map('intval', $nosale); // Ensure all values are integers
  36. $nosale_str = implode(',', $nosale_clean);
  37. }
  38. // Validate form data
  39. if (empty($product_name)) {
  40. // You could add error handling here
  41. header("Location: " . $redirect_url);
  42. exit();
  43. }
  44. // Validate specifications - at least one specification is required with all fields filled
  45. $has_valid_specs = false;
  46. if (is_array($spec_name) && !empty($spec_name)) {
  47. foreach ($spec_name as $key => $name) {
  48. if (!empty($name) && isset($spec_price[$key]) && !empty($spec_price[$key]) &&
  49. isset($spec_moq[$key]) && !empty($spec_moq[$key])) {
  50. $has_valid_specs = true;
  51. break;
  52. }
  53. }
  54. }
  55. if (!$has_valid_specs) {
  56. // Redirect back with error message
  57. header("Location: " . $redirect_url . "&error=missing_specs");
  58. exit();
  59. }
  60. if ($is_edit) {
  61. // Update existing product
  62. $sql = "UPDATE products SET
  63. ProductName = '" . mysqli_real_escape_string($conn, $product_name) . "',
  64. ProductImg = '" . mysqli_real_escape_string($conn, $product_img) . "',
  65. Addtime = NOW(),
  66. moq = '" . mysqli_real_escape_string($conn, $moq) . "',
  67. unit = '" . mysqli_real_escape_string($conn, $unit) . "',
  68. nosale = '" . $nosale_str . "',
  69. note = '" . mysqli_real_escape_string($conn, $note) . "',
  70. tips = '" . mysqli_real_escape_string($conn, $tips) . "',
  71. category_id = " . $category_id . "
  72. WHERE id = " . (int)$id;
  73. mysqli_query($conn, $sql);
  74. // Track which specification IDs we're keeping in this update
  75. $kept_spec_ids = array();
  76. // Process specifications
  77. if (is_array($spec_name) && !empty($spec_name)) {
  78. foreach ($spec_name as $key => $name) {
  79. if (!empty($name) && isset($spec_price[$key]) && !empty($spec_price[$key])) {
  80. $spec_price_value = isset($spec_price[$key]) && is_numeric($spec_price[$key]) ? (float)$spec_price[$key] : 0;
  81. $spec_moq_value = isset($spec_moq[$key]) && is_numeric($spec_moq[$key]) ? (int)$spec_moq[$key] : 1;
  82. $spec_code_value = isset($spec_code[$key]) ? mysqli_real_escape_string($conn, $spec_code[$key]) : '';
  83. $spec_sort_value = isset($spec_sort[$key]) && is_numeric($spec_sort[$key]) ? (int)$spec_sort[$key] : 0;
  84. $spec_value_value = isset($spec_value[$key]) ? mysqli_real_escape_string($conn, $spec_value[$key]) : '';
  85. $spec_id_value = isset($spec_id[$key]) && is_numeric($spec_id[$key]) ? (int)$spec_id[$key] : 0;
  86. if ($spec_id_value > 0) {
  87. // Update existing specification
  88. $sql = "UPDATE product_specifications SET
  89. spec_name = '" . mysqli_real_escape_string($conn, $name) . "',
  90. spec_value = '" . $spec_value_value . "',
  91. price = " . $spec_price_value . ",
  92. min_order_quantity = " . $spec_moq_value . ",
  93. spec_code = '" . $spec_code_value . "',
  94. sort_order = " . $spec_sort_value . "
  95. WHERE id = " . $spec_id_value . " AND product_id = " . (int)$id;
  96. mysqli_query($conn, $sql);
  97. // Add to kept IDs list
  98. $kept_spec_ids[] = $spec_id_value;
  99. } else {
  100. // Insert new specification
  101. $sql = "INSERT INTO product_specifications
  102. (product_id, spec_name, spec_value, price, min_order_quantity, spec_code, addtime, sort_order)
  103. VALUES (
  104. " . (int)$id . ",
  105. '" . mysqli_real_escape_string($conn, $name) . "',
  106. '" . $spec_value_value . "',
  107. " . $spec_price_value . ",
  108. " . $spec_moq_value . ",
  109. '" . $spec_code_value . "',
  110. NOW(),
  111. " . $spec_sort_value . "
  112. )";
  113. mysqli_query($conn, $sql);
  114. // Add newly inserted ID to kept list
  115. $kept_spec_ids[] = mysqli_insert_id($conn);
  116. }
  117. }
  118. }
  119. }
  120. // Delete specifications that were removed in the form
  121. if (!empty($kept_spec_ids)) {
  122. $delete_sql = "DELETE FROM product_specifications WHERE product_id = " . (int)$id;
  123. if (count($kept_spec_ids) > 0) {
  124. $delete_sql .= " AND id NOT IN (" . implode(',', $kept_spec_ids) . ")";
  125. }
  126. mysqli_query($conn, $delete_sql);
  127. } else {
  128. // If no specifications are kept, delete all specifications for this product
  129. mysqli_query($conn, "DELETE FROM product_specifications WHERE product_id = " . (int)$id);
  130. }
  131. } else {
  132. // Insert new product
  133. $sql = "INSERT INTO products (ProductName, ProductImg, Addtime, moq, unit, nosale, note, tips, category_id)
  134. VALUES (
  135. '" . mysqli_real_escape_string($conn, $product_name) . "',
  136. '" . mysqli_real_escape_string($conn, $product_img) . "',
  137. NOW(),
  138. '" . mysqli_real_escape_string($conn, $moq) . "',
  139. '" . mysqli_real_escape_string($conn, $unit) . "',
  140. '" . $nosale_str . "',
  141. '" . mysqli_real_escape_string($conn, $note) . "',
  142. '" . mysqli_real_escape_string($conn, $tips) . "',
  143. " . $category_id . "
  144. )";
  145. mysqli_query($conn, $sql);
  146. $id = mysqli_insert_id($conn);
  147. // Add specifications for new product
  148. if (is_array($spec_name) && !empty($spec_name)) {
  149. foreach ($spec_name as $key => $name) {
  150. if (!empty($name) && isset($spec_price[$key]) && !empty($spec_price[$key])) {
  151. $spec_price_value = isset($spec_price[$key]) && is_numeric($spec_price[$key]) ? (float)$spec_price[$key] : 0;
  152. $spec_moq_value = isset($spec_moq[$key]) && is_numeric($spec_moq[$key]) ? (int)$spec_moq[$key] : 1;
  153. $spec_code_value = isset($spec_code[$key]) ? mysqli_real_escape_string($conn, $spec_code[$key]) : '';
  154. $spec_sort_value = isset($spec_sort[$key]) && is_numeric($spec_sort[$key]) ? (int)$spec_sort[$key] : 0;
  155. $spec_value_value = isset($spec_value[$key]) ? mysqli_real_escape_string($conn, $spec_value[$key]) : '';
  156. $sql = "INSERT INTO product_specifications
  157. (product_id, spec_name, spec_value, price, min_order_quantity, spec_code, addtime, sort_order)
  158. VALUES (
  159. " . (int)$id . ",
  160. '" . mysqli_real_escape_string($conn, $name) . "',
  161. '" . $spec_value_value . "',
  162. " . $spec_price_value . ",
  163. " . $spec_moq_value . ",
  164. '" . $spec_code_value . "',
  165. NOW(),
  166. " . $spec_sort_value . "
  167. )";
  168. mysqli_query($conn, $sql);
  169. }
  170. }
  171. }
  172. }
  173. // Redirect after save
  174. mysqli_close($conn);
  175. header("Location: " . $redirect_url);
  176. exit();