Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Upload plików + formularz + walidacja, problem z działaniem skryptu
casperii
post 10.06.2018, 08:28:51
Post #1





Grupa: Zarejestrowani
Postów: 680
Pomógł: 28
Dołączył: 14.08.2014

Ostrzeżenie: (0%)
-----


Panowie robię poprzez formularz przesył plików oraz zwykły input który jest walidowany, niestety pojawił się problem, który polega na tym, że jeśli wysyłam bez "uaktywnienia" walidacji wszystko działa ok, natomiast jeśli "auaktywni" się walidacja gdzieś gubi zmienną:

kod html:
  1. <form method="post" name="dodaj" enctype="multipart/form-data">
  2. Avatar: <input type="text" name="avatar" value="">
  3. Wgraj plik: <input type="file" name="plik[]">
  4. <input type="submit" name="dodaj" value="Zapisz">
  5. </form>


kod php:
  1. if(array_key_exists('dodaj', $_POST)){
  2. $avatar = $_POST['avatar'];
  3. $mojplik = isset($_FILES['plik'])? $_FILES['plik'] : array();
  4.  
  5. if(empty($avatar)){
  6. $blad = "Brak nazwy avatar.";
  7. }else{
  8. try{
  9. $errors = true;
  10. if(isset($mojplik['name'])){
  11. if (!file_exists(''.server().'/avatar/'.$ids.'')) {
  12. mkdir(''.server().'/avatar/'.$ids.'', 0777);
  13. foreach ($mojplik['name'] as $val=>$fileName){
  14.  
  15. $FileTmpOne = $mojplik['tmp_name'][0];
  16. $FileNameOne = $mojplik['name'][0];
  17. $FileSizeOne = $mojplik['size'][0] / 1000;
  18. $format = explode('.', $FileNameOne);
  19. $obrazek1 = md5($FileTmpOne.$FileSizeOne.$ids);
  20.  
  21. if(is_uploaded_file($FileTmpOne)) {
  22. if($FileSizeOne <= 5000){
  23. if($format[1] == 'jpg'){
  24. move_uploaded_file($FileTmpOne, ''.server().'/avatar/'.$ids.'/'.$obrazek1.'.jpg');
  25. }else{
  26. $msg = 'Dozwolony tylko jpg.';
  27. $errors = false;
  28. }
  29. }else{
  30. $msg = 'Dozwolony tylko do 5 mb';
  31. $errors = false;
  32. }
  33. }
  34.  
  35. $FileTmpTwo = $mojplik['tmp_name'][1];
  36. $FileNameTwo = $mojplik['name'][1];
  37. $FileSizeTwo = $mojplik['size'][1] / 1000;
  38. $format = explode('.', $FileNameTwo);
  39. $obrazek2 = md5($FileTmpTwo.$FileSizeTwo.$ids);
  40.  
  41. if($errors == true){
  42. $pdo = new db_connect();
  43. $sql = $pdo->prepare("INSERT INTO `users` (
  44. `ids`, `obrazek1`, `obrazek2`)
  45. VALUES (
  46. :item, :obrazek1)");
  47.  
  48. $sql->bindValue(':ids', $ids, PDO::PARAM_INT);
  49. $sql->bindValue(':obrazek1', $obrazek1, PDO::PARAM_STR);
  50. $sql->bindValue(':obrazek2', $obrazek2, PDO::PARAM_STR);
  51. $sql->execute();
  52.  
  53. $msg = 'super dodano.';
  54. }else{
  55. $msg = 'błąd';
  56. }
  57.  
  58. }catch(PDOException $e){
  59. echo $e->getMessage();
  60. $msg = 'błąd dodania.';
  61. }
  62. }
  63. }


Robiąc print_r($obrazek1) - widzę, że zmienna $obrazek1 w przypadku wykrycia walidacji i ponownym wysłaniu formularza gdzieś się traci.
Ktoś pomoże ?

Aha operacje na pliku robię na tablicy , gdyż dojdzie jeszcze możliwość wgrania innego formatu.

Ten post edytował casperii 10.06.2018, 17:35:08
Go to the top of the page
+Quote Post
SmokAnalog
post 10.06.2018, 10:38:26
Post #2





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Co dokładnie masz na myśli? Pliki wybrane w input file zostaną zapomniane przy ponownym wyświetleniu formularza i nie da ich się tam ponownie wrzucić (kwestie bezpieczeństwa). Za każdym razem użytkownik będzie musiał ponownie wybrać plik. Możesz to usprawnić w taki sposób, że zapiszesz plik mimo błędu, a w ponownie wyświetlonym formularzu pokażesz np. input hidden, żeby sobie połączyć ten formularz z plikiem.
Go to the top of the page
+Quote Post
casperii
post 10.06.2018, 14:35:15
Post #3





Grupa: Zarejestrowani
Postów: 680
Pomógł: 28
Dołączył: 14.08.2014

Ostrzeżenie: (0%)
-----


@SmokAnalog chodziło mi o sytuacje, gdzie wrzucam plik powyżej 5 mb, walidacja krzyknie błędem, wrzucę ponownie do inputa file plik tym razem mniejszy niż 5 mb , to plik ten już się nie uploaduje. tak jakby nie widział go ?
Go to the top of the page
+Quote Post
trueblue
post 10.06.2018, 17:11:22
Post #4





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


A skąd się biorą wartości dla zmiennych $zdjecie1 oraz $fileTwo?


--------------------
Go to the top of the page
+Quote Post
casperii
post 10.06.2018, 17:36:11
Post #5





Grupa: Zarejestrowani
Postów: 680
Pomógł: 28
Dołączył: 14.08.2014

Ostrzeżenie: (0%)
-----


@trueblue zobacz teraz smile.gif błędne wartości podałem do zapisu do bazy, ale to nie ma znaczenia bo problem polega na uploadzie plików po wykrzyczeniu błędów.
Go to the top of the page
+Quote Post
trueblue
post 10.06.2018, 18:09:24
Post #6





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


A linii 11 się przyglądałeś?


--------------------
Go to the top of the page
+Quote Post
casperii
post 10.06.2018, 18:16:43
Post #7





Grupa: Zarejestrowani
Postów: 680
Pomógł: 28
Dołączył: 14.08.2014

Ostrzeżenie: (0%)
-----


A co tam niepokojącego jest w linii 11 ?
Jeżeli plik nie istnieje tworzy katalog.
Go to the top of the page
+Quote Post
trueblue
post 10.06.2018, 18:26:46
Post #8





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


A jeśli istnieje?


--------------------
Go to the top of the page
+Quote Post
casperii
post 10.06.2018, 18:44:51
Post #9





Grupa: Zarejestrowani
Postów: 680
Pomógł: 28
Dołączył: 14.08.2014

Ostrzeżenie: (0%)
-----


w tym formularzu nie ma możliwości , żeby istniał , ale można w razie W warunek inny zrobić, ale nadal nie wiem gdzie leży problem z tym , że za pierwszym razem uploaduje pliki, za drugim już nie.
Go to the top of the page
+Quote Post
trueblue
post 10.06.2018, 18:46:45
Post #10





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Zmienna $ids ma wartość niepowtarzalną?
Skąd ona się bierze?


--------------------
Go to the top of the page
+Quote Post
casperii
post 10.06.2018, 18:56:18
Post #11





Grupa: Zarejestrowani
Postów: 680
Pomógł: 28
Dołączył: 14.08.2014

Ostrzeżenie: (0%)
-----


$ids = jest generowana losowo, jest niepowtarzalna.
Go to the top of the page
+Quote Post
trueblue
post 10.06.2018, 18:59:19
Post #12





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Czyli kiedy pierwszy raz robię upload, to $ids może mieć wartość 1, a za drugim razem, 2, tak?

Przyjrzyj się INSERT.

Co dokładnie nie działa? Sprawdzałeś krok po kroku jaka fragment jest wywoływany, a jaki nie?


--------------------
Go to the top of the page
+Quote Post
casperii
post 10.06.2018, 19:06:35
Post #13





Grupa: Zarejestrowani
Postów: 680
Pomógł: 28
Dołączył: 14.08.2014

Ostrzeżenie: (0%)
-----


Ja bym się nie "czepiał" SQLa gdyż ten za każdym razem dodaje do bazy, problem jest wyłącznie przy uploadowaniu po raz drugi ( w sensie po wyświetleniu komunikatu, że za duży plik) pliku na serwer.
Dokładnie jak się odświeży to $ids otrzyma nowy identyfikator ( sensie ponownie na stronie).

Dobra już widzę problem, mimo , że formularz nie został dopisany do bazy to ten katalog się tworzy z $ids i tu się pojawia problem.

Ten post edytował casperii 10.06.2018, 19:09:41
Go to the top of the page
+Quote Post
trueblue
post 10.06.2018, 19:08:37
Post #14





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


A ja bym w tym momencie się czepiał, bo wstawiasz do trzech kolumn, dwie wartości.
Po prostu nie podajesz w pełni poprawnego fragmentu kodu.

Sprawdzałeś kroku po kroku gdzie jest problem?

//edycja
Czyli jednak $ids nie jest niepowtarzalne, tak?
I dlatego if, o którym pisałem powoduje za drugim razem ominięcie całego uploadu.

Ten post edytował trueblue 10.06.2018, 19:13:11


--------------------
Go to the top of the page
+Quote Post
casperii
post 10.06.2018, 19:15:00
Post #15





Grupa: Zarejestrowani
Postów: 680
Pomógł: 28
Dołączył: 14.08.2014

Ostrzeżenie: (0%)
-----


$ids jest generowany - jest nie powtarzalny, ale widać z każdym wejściem na stronę smile.gif
Zaraz czy działa.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 29.03.2024 - 16:49