Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Multi Upload Image
Forum PHP.pl > Forum > PHP
webd.jk
Witam,

Za nim ktoś odeśle do Google lub innej wyszukiwarki niech doczyta do końca. Po googlowałem troszkę. Znalazłem kilka rozwiązań, ale żadne nie spełniło moich wymagań.

Na stronie jest formularz. który zawiera pola różnego typu w tym - "n"(nie wiadomo ile) pól typu file.

Co chciałbym osiągnąć:

Po zatwierdzeniu formularza skrypt ma za zadanie:

- poddać dane walidacii (server-side)
- przenieść pliki na serwer do katalogu którego nazwa jest określona w jednym z pól formularza (mkdir('sciezka/'.$_POST['nazwa']))
- jeśli zdjęcia zostały wgrane prawidłowo to wgrywamy dane z formularza do bazy danych
- jeśli zapytanie wykonało się prawidłowo to wyciągamy ID wstawionego rekordu
- następnie do drugiej tabeli wgrywamy ID wstawionego rekordu i nazwę zdjęcia
- w przypadku niepowodzeń któregokolwiek z zapytań usuwamy zdjęcia z dysku

Brak pomysłu :/ Jakby ktoś miał choćby jakieś sugestie jak rozwiązać ten problem będę wdzięczny.

Drobne wskazówki mile widziane.
Nie będę się upierał, ale chciałbym, aby skrypt był odporny na wyłączony JS i to rodzi kolejne problemy :/
Reptile ReX
Nic innego niż zacząć robić, to nie jest trudne, a gdy pojawi się problem, to zapytać.
wookieb
To, że nie znalazłeś gotowców to myślisz, że znajdziesz go tutaj? Myślisz, że jak rzucisz listę TWOICH wymagań wszyscy rzucą Ci sie odpowiedzą z seriami "od początku php" i podadzą Ci na talerzu? Zapomnij.
Odrazu określ czego chcesz. Nikt gotowca Ci nie da a jak nie masz zamiaru brać się za pisanie (co już powinieneś zacząć) daj ogłoszenie na Forum: Gielda ofert
webd.jk
Nie zrozumieliśmy się. Nie oczekiwałem kodu, ale raczej jakieś wskazówki. Kod piszę cały czas i już jest nawet spory postęp. Jak skończę to podrzucę do weryfikacji.

No i wypociłem 'coś' :/ Trochę pomieszanie z poplataniem. Jest może ktoś chętny na pomoc w uporządkowaniu kodu? Nie testowałem jeszcze gruntowanie kodu, ale na pierwszy rzut oka działa poprawnie(na drugi coś nie tak z transakcją). Wszelkie sugestie mile widziane.

W headerze nic specjalnego, includuje tylko funkcje - żadnych zmyślny.

  1. <?php require_once 'header.php'; ?>
  2.  
  3. <div id="container_background">
  4. <div id="container_content"><?php
  5. $db = db_connect();
  6. $sql = 'SELECT * FROM modules WHERE modules_id = :modules_id';
  7. $mod = $db->prepare($sql);
  8. $mod->bindValue(':modules_id', $_GET['m'], PDO::PARAM_STR);
  9. $mod->execute();
  10. if(!$module = $mod->fetch(PDO::FETCH_ASSOC)){
  11. ?><p class="info err">Moduł nie istnieje!</p><?php
  12. die();
  13. }
  14.  
  15. if($_POST['buy_x']){
  16. $errors = array();
  17. $extImg = array('image/gif', 'image/jpeg', 'image/png', 'image/jpg');
  18. $insertColumn = '';
  19. $insertValue = '';
  20. $_POST = array_map('trim', $_POST);
  21.  
  22. if($module['clogo']){
  23. if($_FILES['logo']['error'] != 4){
  24. if(!in_array($_FILES['logo']['type'], $extImg)){
  25. $errors['extImg'] = 'Niepoprawny format zdjęcia!';
  26. }
  27. if($_FILES['logo']['size'] > 2097152){
  28. $errors['size'] = 'Rozmiar obrazka nie może przekraczać 2Mb!';
  29. }
  30. }else{
  31. $errors['err'] = 'Logo nie zostało wysłane';
  32. }
  33. }
  34.  
  35. fixFilesArray($_FILES['photo']);
  36. $i = 1;
  37. foreach ($_FILES['photo'] as $position => $file) {
  38. if(!in_array($file['type'], $extImg)){
  39. $errors['extImg'][$i] = 'Niepoprawny format zdjęcia!';
  40. }
  41. if($file['size'] > 2097152){
  42. $errors['size'][$i] = 'Rozmiar obrazka nie może przekraczać 2Mb!';
  43. }
  44. $i = $i+1;
  45. }
  46.  
  47. if(!preg_match("/^[a-z0-9]{3,16}$/", $_POST['site_address'])){
  48. $errors['site_address'] = 'Adres może zawierać tylko litery i cyfry';
  49. }else{
  50. $sql = 'SELECT idcompany FROM company WHERE c_site_address = :c_site_address';
  51. $name = $db->prepare($sql);
  52. $name->bindValue(':c_site_address', $_POST['site_address'], PDO::PARAM_STR);
  53. $name->execute();
  54. if($testName = $name->fetch(PDO::FETCH_ASSOC)){
  55. $errors['nameExists'] = 'Nazwa strony jest już zajęta';
  56. }else{
  57. $insertColumn .= 'c_site_address,';
  58. $insertValue .= ':c_site_address,';
  59. }
  60. }
  61.  
  62. if($module['cname']){
  63. if(empty($_POST['name'])){
  64. $errors['name'] = 'Pole nazwa firmy musi być wypełnione!';
  65. }else{
  66. $insertColumn .= ' c_name,';
  67. $insertValue .= ' :c_name,';
  68. }
  69. }
  70.  
  71. if($module['ctrade']){
  72. if(empty($_POST['trade'])){
  73. $errors['trade'] = 'Pole branża musi być wypełnione!';
  74. }else{
  75. $insertColumn .= ' c_trade,';
  76. $insertValue .= ' :c_trade,';
  77. }
  78. }
  79.  
  80. if($module['cdescription']){
  81. if(empty($_POST['description'])){
  82. $errors['description'] = 'Pole opis musi być wypełnione!';
  83. }else{
  84. $insertColumn .= ' c_description,';
  85. $insertValue .= ' :c_description,';
  86. }
  87. }
  88.  
  89. if($module['cactivity']){
  90. if(empty($_POST['activity'])){
  91. $errors['activity'] = 'Pole opis działalności musi być wypełnione!';
  92. }else{
  93. $insertColumn .= ' c_activity,';
  94. $insertValue .= ' :c_activity,';
  95. }
  96. }
  97.  
  98. if($module['chobby']){
  99. if(empty($_POST['hobby'])){
  100. $errors['hobby'] = 'Pole hobby musi być wypełnione!';
  101. }else{
  102. $insertColumn .= ' c_hobby,';
  103. $insertValue .= ' :c_hobby,';
  104. }
  105. }
  106.  
  107. if($module['cmail']){
  108. if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)){
  109. $errors['email'] = 'Pole email musi być wypełnione!';
  110. }else{
  111. $insertColumn .= ' c_email,';
  112. $insertValue .= ' :c_email,';
  113. }
  114. }
  115.  
  116. if($module['caddress']){
  117. if (!filter_var($_POST['phone'], FILTER_VALIDATE_INT)){
  118. $errors['phone'] = 'Pole phone musi być wypełnione!';
  119. }else{
  120. $insertColumn .= ' c_phonenumber,';
  121. $insertValue .= ' :c_phonenumber,';
  122. }
  123. if(empty($_POST['street'])){
  124. $errors['street'] = 'Pole ulica musi być wypełnione!';
  125. }else{
  126. $insertColumn .= ' c_street,';
  127. $insertValue .= ' :c_street,';
  128. }
  129. if(empty($_POST['city'])){
  130. $errors['city'] = 'Pole miasto musi być wypełnione!';
  131. }else{
  132. $insertColumn .= ' c_city,';
  133. $insertValue .= ' :c_city,';
  134. }
  135. if ( !preg_match('/^[0-9]{2}-?[0-9]{3}$/', $_POST['postcode'])){
  136. $errors['postcode'] = 'Nieprawidłowy kod pocztowy';
  137. }else{
  138. $insertColumn .= ' c_postcode,';
  139. $insertValue .= ' :c_postcode,';
  140. }
  141. }
  142.  
  143. if(empty($errors)){
  144. mkdir('images/company/'.$_POST['site_address'], 0777);
  145. $logo = substr($_SERVER['REQUEST_TIME'], 7,3).clearText($file['name']);
  146. if(move_uploaded_file($_FILES['logo']['tmp_name'], 'images/company/'.$_POST['site_address'].'/'.$logo)){
  147. $uploadedImg[] = 1;
  148. $insertColumn .= ' c_logo,';
  149. $insertValue .= ' :c_logo,';
  150. }else{
  151. $uploadedImg[] = 0;
  152. }
  153.  
  154.  
  155. foreach ($_FILES['photo'] as $position => $file){
  156. $imgName = substr($_SERVER['REQUEST_TIME'], 7,3).clearText($file['name']);
  157. if(move_uploaded_file($file['tmp_name'], 'images/company/'.$_POST['site_address'].'/'.$imgName)){
  158. $uploadedImg[] = 1;
  159. $imgNames[] = $imgName;
  160. }else{
  161. $uploadedImg[] = 0;
  162. }
  163. }
  164. if(!in_array(0, $uploadedImg)){
  165. $insertColumn .= 'subscription, c_view, c_registration_date';
  166. $insertValue .= ':subscription, :view, :registration_date';
  167.  
  168. $db = db_connect();
  169. $sql = 'INSERT INTO company('.$insertColumn.')
  170. VALUES('.$insertValue.')';
  171.  
  172. $stmt = $db->prepare($sql);
  173. $stmt->bindValue(':c_site_address', $_POST['site_address'], PDO::PARAM_STR);
  174. $stmt->bindValue(':subscription', $_POST['subscription'], PDO::PARAM_INT);
  175. $stmt->bindValue(':view', 0, PDO::PARAM_INT);
  176. $stmt->bindValue(':registration_date', date("Y-m-d"), PDO::PARAM_STR);
  177. if($module['cname']){
  178. $stmt->bindValue(':c_name', $_POST['name'], PDO::PARAM_STR);
  179. }
  180.  
  181. if($module['ctrade']){
  182. $stmt->bindValue(':c_trade', $_POST['trade'], PDO::PARAM_STR);
  183. }
  184. if($module['clogo']){
  185. $stmt->bindValue(':c_logo', $logo, PDO::PARAM_STR);
  186. }
  187. if($module['cdescription']){
  188. $stmt->bindValue(':c_description', $_POST['description'], PDO::PARAM_STR);
  189. }
  190.  
  191. if($module['cactivity']){
  192. $stmt->bindValue(':c_activity', $_POST['activity'], PDO::PARAM_STR);
  193. }
  194.  
  195. if($module['chobby']){
  196. $stmt->bindValue(':c_hobby', $_POST['hobby'], PDO::PARAM_STR);
  197. }
  198.  
  199. if($module['cmail']){
  200. $stmt->bindValue(':c_email', $_POST['email'], PDO::PARAM_STR);
  201. }
  202.  
  203. if($module['caddress']){
  204. $stmt->bindValue(':c_phonenumber', $_POST['phone'], PDO::PARAM_INT);
  205. $stmt->bindValue(':c_street', $_POST['street'], PDO::PARAM_STR);
  206. $stmt->bindValue(':c_city', $_POST['city'], PDO::PARAM_STR);
  207. $stmt->bindValue(':c_postcode', $_POST['postcode'], PDO::PARAM_STR);
  208. }
  209. try {
  210. $db->beginTransaction();
  211. $stmt->execute();
  212. $id = $db->lastInsertId();
  213. $sql = 'INSERT INTO company_images(idcompany, images)
  214. VALUES(:idcompany, :images)';
  215. $insImg = $db->prepare($sql);
  216. foreach($imgNames as $img){
  217. $insImg->bindValue(':idcompany', $id, PDO::PARAM_INT);
  218. $insImg->bindValue(':images', $img, PDO::PARAM_STR);
  219. $insImg->execute();
  220. }
  221. $db->commit();
  222. }catch(PDOExecption $e){
  223. $db->rollback();
  224. rrmdir('../images/comapny/'.$_POST['site_address']);
  225. print "Error!: " . $e->getMessage() . "</br>";
  226. }
  227. }
  228. }else{
  229. foreach ($errors as $err){
  230. ?><p class="info err"><?php print $err;?></p><?php
  231. }
  232. }
  233. }else{
  234. header('Location: card_list.php');
  235. }?>
  236. </div>
  237. </div>
  238. </body>
  239. </html>
  240.  
  241.  
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.