Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]walidacja załącznika, wysyła mimo warunku
jaroslavmo
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 21.03.2022

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


Użyłem php mailer do wysyłania emaila, chciałbym zrobić walidację wielkości pliku po stronie serwera.

stowrzyłem taki warunek

  1.  
  2. $maxsize = 2*1024*1024
  3.  
  4. if(isset($_Files['file']['name'])) {
  5.  
  6. if($_FILES['file']['size'] > $maxsize) {
  7. echo 'zbyt duży plik';
  8.  
  9. } else {
  10. $mail->AddAttachment($_FILES['file']['tmp_name'], $_FILES['file']['name']);
  11. }
  12.  
  13. }
  14.  
  15.  
  16.  


mimo tego mail się wysyła bez załącznika, ale wysyła. Chciałbym to zmienić.
Poniżej cały mój kod php





  1.  
  2.  
  3.  
  4. <?php
  5. ini_set('display_errors', '1');
  6. ini_set('display_startup_errors', '1');
  7.  
  8. $honeypot = $_POST['honey'];
  9. $nameU = $_POST['name'];
  10. $email = $_POST['email'];
  11. $content = $_POST['message'];
  12. $phoneU = $_POST['phone'];
  13. $fileUpload = $_POST['file'];
  14.  
  15. use PHPMailer\PHPMailer\PHPMailer;
  16. use PHPMailer\PHPMailer\SMTP;
  17. use PHPMailer\PHPMailer\Exception;
  18.  
  19. require 'autoload.php';
  20.  
  21. if ($_SERVER["REQUEST_METHOD"] == "POST") {
  22. // robot detection
  23. $honeypot = trim($_POST["honey"]);
  24.  
  25. if(!empty($honeypot)) {
  26. echo "NO SPAM!";
  27. }
  28.  
  29. $mail = new PHPMailer; //From email address and name
  30. $mail->From = $email ;
  31.  
  32. $mail->FromName = $nameU; //To address and name
  33. $mail->addAddress("jaroslaw.mor@gmail.com", "Vomo");//Recipient name is optional
  34.  
  35. $mail->isHTML(true);
  36. $mail->Subject = "Zapytanie ze strony www";
  37. $mail->Body = "Telefon:$phoneU<br><br>Treść wiadomośći:<br>$content";
  38. $mail->AltBody = "Telefon:$phoneU\n$content";
  39.  
  40. $maxsize = 2*1024*1024;
  41.  
  42.  
  43.  
  44. if(isset($_Files['file']['name'])) {
  45.  
  46. if($_FILES['file']['size'] > $maxsize) {
  47. echo 'zbyt duży plik';
  48.  
  49. } else {
  50. $mail->AddAttachment($_FILES['file']['tmp_name'], $_FILES['file']['name']);
  51. }
  52.  
  53. }
  54.  
  55.  
  56.  
  57. if(!$mail->send())
  58. {
  59. echo "Mailer Error: " . $mail->ErrorInfo;
  60. }
  61. else
  62. {
  63. header("Location: sent.html");
  64. exit();
  65. }
  66.  
  67. }
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74.  

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 14)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




ZNajdz 10 roznic

$_Files
$_FILES
Go to the top of the page
+Quote Post
jaroslavmo
post
Post #3





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 21.03.2022

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


Dzięki za wskazówkę, poprawiłem ale niestety nadal tak samo.
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




To sprawdz co dokladnie dostajesz w $_FILES

print_r($_FILES);
exit;
Go to the top of the page
+Quote Post
jaroslavmo
post
Post #5





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 21.03.2022

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


Cytat(nospor @ 21.03.2022, 18:07:28 ) *
To sprawdz co dokladnie dostajesz w $_FILES

print_r($_FILES);
exit;




Array ( [uploded-file] => Array ( [name] => Tropico 5 V1.10 Trainer +6.rar [type] => application/octet-stream [tmp_name] => /tmp/www/mork/phpqbDtSk [error] => 0 [size] => 4585995 ) ) 1
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




No i chyba juz widzisz ze twoje file to uploded-file a nie file

$_FILES['uploded-file']
Go to the top of the page
+Quote Post
jaroslavmo
post
Post #7





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 21.03.2022

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


By nie tworzyć nowego wątku, zapomniałem że miał być więcej niż jeden załącznik. Uwzględniając poprzednie wskazówki pętlę do załączników.

Stworzyłem pętle załączniki widzi i nie zgłasza problemu, jak kodu od walidacji nie ma, wysyła wiadomość ze załącznikami.

  1.  
  2. for ($i=0; $i < count($attachments) ; $i++) {
  3. $fileTmpName = $_FILES['uploaded-file']["tmp_name"][$i];
  4. $filename = $_FILES['uploaded-file']["name"][$i];
  5. move_uploaded_file($fileTmpName, "uploads/" . $filename);
  6. $mail-> AddAttachment("uploads/". $filename);
  7. }
  8.  
  9.  




Natomiast ten fragment

  1.  
  2. if(filesize($filename) > $maxsize) {
  3. $message ="plik jest zbyt duży";
  4. }
  5.  


wywołuje ostrzeżenie

Cytat
Warning: filesize(): stat failed for oświadczenie-o-przekazaniu-praw-majatkowych.pdf in /home/mork/public_html/vomo/mailer.php on line 55 Array ( [uploaded-file] => Array ( [name] => Array ( [0] => Klauzule informacyjne i okna zgody - wzór.pdf [1] => oświadczenie-o-przekazaniu-praw-majatkowych.pdf ) [type] => Array ( [0] => application/pdf [1] => application/pdf ) [tmp_name] => Array ( [0] => /tmp/www/mork/phpSW91R4 [1] => /tmp/www/mork/phpOAykxZ ) [error] => Array ( [0] => 0 [1] => 0 ) [size] => Array ( [0] => 148245 [1] => 56805 ) ) )



całość kodu

  1.  
  2.  
  3. <?php
  4. ini_set('display_errors', '1');
  5. ini_set('display_startup_errors', '1');
  6.  
  7. $honeypot = $_POST['honey'];
  8. $nameU = $_POST['name'];
  9. $email = $_POST['email'];
  10. $content = $_POST['message'];
  11. $phoneU = $_POST['phone'];
  12. //$fileUpload = $_POST['file'];
  13.  
  14. use PHPMailer\PHPMailer\PHPMailer;
  15. use PHPMailer\PHPMailer\SMTP;
  16. use PHPMailer\PHPMailer\Exception;
  17.  
  18. require 'autoload.php';
  19.  
  20. if ($_SERVER["REQUEST_METHOD"] == "POST") {
  21. // robot detection
  22. $honeypot = trim($_POST["honey"]);
  23.  
  24. if(!empty($honeypot)) {
  25. echo "NO SPAM!";
  26. }
  27.  
  28. $mail = new PHPMailer; //From email address and name
  29. $mail->From = $email ;
  30.  
  31. $mail->FromName = $nameU; //To address and name
  32. $mail->addAddress("jaroslaw.mor@gmail.com");//Recipient name is optional
  33.  
  34. $mail->isHTML(true);
  35. $mail->Subject = "Zapytanie ze strony www";
  36. $mail->Body = "Telefon:$phoneU<br><br>Treść wiadomośći:<br>$content";
  37. $mail->AltBody = "Telefon:$phoneU\n$content";
  38. $maxsize = 2*1024*1024;
  39. $attachments = $_FILES['uploaded-file']["name"];
  40. $acceptedFormats = array("doc", " docx" , "pdf" , "txt" , "odt", "zip", "7z", "rar", "jpg", "jpeg");
  41. $uploadedFile = $_FILES['uploaded-file']['tmp_name'];
  42.  
  43.  
  44.  
  45. for ($i=0; $i < count($attachments) ; $i++) {
  46. $fileTmpName = $_FILES['uploaded-file']["tmp_name"][$i];
  47. $filename = $_FILES['uploaded-file']["name"][$i];
  48. move_uploaded_file($fileTmpName, "uploads/" . $filename);
  49. $mail-> AddAttachment("uploads/". $filename);
  50.  
  51.  
  52. }
  53.  
  54.  
  55.  
  56. if (isset($attachments)) {
  57.  
  58. if(filesize($filename) > $maxsize) {
  59. $message ="plik jest zbyt duży";
  60. }
  61.  
  62.  
  63. else if (!in_array(pathinfo($fileTmpName, PATHINFO_EXTENSION), $acceptedFormats)) {
  64. $message ="nieprawidłowy format pliku";
  65.  
  66. } else {
  67. $message = '';
  68.  
  69. }
  70. }
  71.  
  72.  
  73.  
  74. if(!$mail->send())
  75. {
  76. echo "Mailer Error: " . $mail->ErrorInfo;
  77. die();
  78. }
  79. else
  80. {
  81. //header("Location: sent.html");
  82.  
  83. print_r($_FILES);
  84.  
  85. die();
  86. }
  87.  
  88.  
  89.  
  90.  
  91. }
  92.  


Ten post edytował jaroslavmo 21.03.2022, 22:00:30
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




1) Walidacja ma byc w petli a nie poza nia. No to chyba dosc logiczne. Poza petla to ty co najwyzej ostatni element mozesz zwalidowac

2)
if(filesize($filename) > $maxsize) {
A co to ma byc? przeciez $filename to nazwa pliku a nie sciezka do pliku. Komunikat bledy wyraznie ci o tym mowi. Poza tym, rozmiar przeciez masz nadal w $_FILES. Czemu z tego nie korzystasz? Czemu nafle przy petli stwierdziles ze bedziesz uzywal czegos innego? Co sie zminilo? No nic sie niezmienilo
Go to the top of the page
+Quote Post
jaroslavmo
post
Post #9





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 21.03.2022

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


zmieniłem to trochę, błędami nie sypie ale nawet jeśli waga któregoś ze załączników przekracza 2mb to i tak maila wysyła tyle że bez załączników

kod odpowiedzialny za załącznik:

  1.  
  2. if(isset($_FILES['uploaded-file'])) {
  3.  
  4. for ($i = 0; $i < count($_FILES['uploaded-file']['name']); $i++) {
  5.  
  6. if ($_FILES['uploaded-file']['error'] !== UPLOAD_ERR_OK) continue;
  7. $fileTmpName = $_FILES['uploaded-file']["tmp_name"][$i];
  8. $filename = $_FILES['uploaded-file']["name"][$i];
  9.  
  10.  
  11.  
  12. if($_FILES['uploaded-file']["name"]['size'][$i] > $maxsize) {
  13. exit('plik jest zbyt duży');
  14. } else {
  15.  
  16. move_uploaded_file($fileTmpName, "uploads/" . $filename);
  17. $mail-> AddAttachment("uploads/". $filename);
  18.  
  19. }
  20.  
  21.  
  22.  
  23.  
  24. }//loop end
  25.  
  26. }//isset end
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33. }//post end
  34.  




całość

  1.  
  2. <?php
  3. ini_set('display_errors', '1');
  4. ini_set('display_startup_errors', '1');
  5.  
  6. $honeypot = $_POST['honey'];
  7. $nameU = $_POST['name'];
  8. $email = $_POST['email'];
  9. $content = $_POST['message'];
  10. $phoneU = $_POST['phone'];
  11. //$fileUpload = $_POST['file'];
  12. $honeypot = trim($_POST["honey"]);
  13.  
  14. use PHPMailer\PHPMailer\PHPMailer;
  15. use PHPMailer\PHPMailer\SMTP;
  16. use PHPMailer\PHPMailer\Exception;
  17.  
  18. require 'autoload.php';
  19.  
  20. if ($_SERVER["REQUEST_METHOD"] == "POST") {
  21.  
  22. $mail = new PHPMailer; //From email address and name
  23. $mail->From = $email ;
  24.  
  25. $mail->FromName = $nameU; //To address and name
  26. $mail->addAddress("jaroslaw.mor@gmail.com");//Recipient name is optional
  27.  
  28. $mail->isHTML(true);
  29. $mail->Subject = "Zapytanie ze strony www";
  30. $mail->Body = "Telefon:$phoneU<br>Treść wiadomośći:<br><br>$content";
  31. $mail->AltBody = "Telefon:$phoneU\n$content";
  32. $maxsize = 2*1024*1024;
  33. $attachments = $_FILES['uploaded-file']["name"];
  34. $acceptedFormats = array("doc", " docx" , "pdf" , "txt" , "odt", "zip", "7z", "rar", "jpg", "jpeg");
  35.  
  36. if(!empty($honeypot)) {
  37. echo "NO SPAM!";
  38. }
  39.  
  40. if(isset($_FILES['uploaded-file'])) {
  41.  
  42. for ($i = 0; $i < count($_FILES['uploaded-file']['name']); $i++) {
  43.  
  44. if ($_FILES['uploaded-file']['error'] !== UPLOAD_ERR_OK) continue;
  45. $fileTmpName = $_FILES['uploaded-file']["tmp_name"][$i];
  46. $filename = $_FILES['uploaded-file']["name"][$i];
  47.  
  48.  
  49.  
  50. if($_FILES['uploaded-file']["name"]['size'][$i] > $maxsize) {
  51. exit('plik jest zbyt duży');
  52. } else {
  53.  
  54. move_uploaded_file($fileTmpName, "uploads/" . $filename);
  55. $mail-> AddAttachment("uploads/". $filename);
  56.  
  57. }
  58.  
  59.  
  60.  
  61.  
  62. }//loop end
  63.  
  64. }//isset end
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71. }//post end
  72.  
  73.  
  74.  
  75.  
  76.  
  77. if(!$mail->send()) {
  78. echo "Mailer Error: " . $mail->ErrorInfo;
  79. exit();
  80. }
  81.  
  82. else {
  83. header("Location: sent.html");
  84.  
  85. exit();
  86. }
  87.  
  88.  
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




$_FILES['uploaded-file']["name"]['size'][$i]
Go to the top of the page
+Quote Post
jaroslavmo
post
Post #11





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 21.03.2022

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


Cytat(nospor @ 22.03.2022, 22:40:40 ) *
$_FILES['uploaded-file']["name"]['size'][$i]


$FILES w moim warunku wygląda dokładanie tak jak to napisałeś.

nie wiem o co chodzi.

Php to nie moja działka, tak wyszło że musiałem się sam jakoś kombinować, metodą prób i błędów, googla, youtuba i stackoverflow coś wyskrobałem. Jak to k....stwo zacznie działać nikomu nie będę zawracać d.......y o php , bo się więcej tego nie tykam.

Ten post edytował jaroslavmo 22.03.2022, 23:24:45
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
$FILES w moim warunku wygląda dokładanie tak jak to napisałeś.

Ja to dokladnie wiem. Ja ci podalem ten kawalek kodu gdzie wlasnie masz blad i masz poprawic.
Go to the top of the page
+Quote Post
jaroslavmo
post
Post #13





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 21.03.2022

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


Ok, poradziłem sobie z załącznikiem i działało a teraz mam taki dziwny problem że każdy załącznik, nawet jeśli jest mniejszy od maxsize to i tak pokazuje że plik jest zbyt duży i wykonuje się instrukcja dla zbyt dużego pliku.





  1.  
  2.  
  3.  
  4. <?php
  5. //Import PHPMailer classes into the global namespace
  6. //These must be at the top of your script, not inside a function
  7. use PHPMailer\PHPMailer\PHPMailer;
  8. use PHPMailer\PHPMailer\SMTP;
  9. use PHPMailer\PHPMailer\Exception;
  10.  
  11. //Load Composer's autoloader
  12. require 'autoload.php';
  13.  
  14. //Create an instance; passing `true` enables exceptions
  15. $mail = new PHPMailer(true);
  16. $honeypot = $_POST['honey'];
  17. $user_name = $_POST['name'];
  18. $user_email = $_POST['email'];
  19. $user_message = $_POST['message'];
  20. $user_phone = $_POST['phone'];
  21. $honeypot = trim($_POST["honey"]);
  22. $max_size = 2 * 1024 * 1204; //2mb
  23. $attachment = $_FILES['uploaded-file'];
  24.  
  25. if ($_SERVER["REQUEST_METHOD"] == "POST") {
  26.  
  27.  
  28. if(!empty($honeypot)) {
  29. echo "NO SPAM!";
  30. } else {
  31.  
  32. $mail = new PHPMailer; //From email address and name
  33. $mail->isMail();
  34.  
  35. //sender
  36. $mail->From = $user_email;
  37. $mail->FromName = $user_name;
  38.  
  39. //recipient
  40. $mail->addAddress("jaroslaw.mor@gmail.com");
  41.  
  42.  
  43. //mail subject
  44. $mail->Subject = "Zapytanie ze strony www";
  45.  
  46.  
  47. $mail->isHTML(true);
  48. //body mail
  49. $mail->Body = "Telefon:$user_phone<br><br>Treść wiadomośći:<br>$user_message";
  50. $mail->AltBody = "Telefon:$user_phone\n$content";
  51.  
  52. //attachment
  53. if(isset($attachment)) {
  54.  
  55. for ($i = 0; $i < count($_FILES['uploaded-file']['name']); $i++) {
  56. if ($_FILES['uploaded-file']['error'][$i] !== UPLOAD_ERR_OK) continue;
  57. $file_TmpName = $_FILES['uploaded-file']["tmp_name"][$i];
  58. $file_name = $_FILES['uploaded-file']["name"][$i];
  59.  
  60. if ($_FILES['uploaded-file']['size'][$i] > $maxsize) {
  61.  
  62. $message = urlencode("załącznik przekorczył limit 10MB");
  63. header("Location:".$_SERVER['HTTP_REFERER']. '#file-size-error');
  64. die();
  65.  
  66. }
  67.  
  68. else{
  69. move_uploaded_file($fileTmpName, "uploads/" . $filename);
  70. $mail-> AddAttachment("uploads/". $filename);
  71. }
  72. }//for
  73. }//isset
  74.  
  75. if(!$mail->send()) {
  76. echo "Mailer Error: " . $mail->ErrorInfo;
  77. exit();
  78. }
  79.  
  80. else {
  81. header("Location: sent.html");
  82.  
  83. exit();
  84.  
  85. }//if send else
  86.  
  87. }//honey else end
  88.  
  89. }//post end
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
Go to the top of the page
+Quote Post
nospor
post
Post #14





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




Znajdz 10 roznic

$maxsize
$max_size

Zapoznaj sie prosze i zastosuj do tego tematu
Temat: Jak poprawnie zadac pytanie oraz przygotowac srodowisko pracy

Jak zobacze jeszcze jeden post z powodu nie istniejacych zmiennych, to bede zamykal (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
jaroslavmo
post
Post #15





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 21.03.2022

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


Cytat(nospor @ 27.03.2022, 14:58:24 ) *
Znajdz 10 roznic

$maxsize
$max_size

Zapoznaj sie prosze i zastosuj do tego tematu
Temat: Jak poprawnie zadac pytanie oraz przygotowac srodowisko pracy

Jak zobacze jeszcze jeden post z powodu nie istniejacych zmiennych, to bede zamykal (IMG:style_emoticons/default/wink.gif)


dzięki link pomógł we wykryciu kolejnego babola, teraz wszystko działa (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 25.12.2025 - 06:14