• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Odbieranie pliku przez serwer - Undefined index

Object Storage Arubacloud
0 głosów
341 wizyt
pytanie zadane 18 marca 2018 w PHP przez Lahimowicz Początkujący (300 p.)

Cześć. Z góry chciałbym poinformować wszystkich że przepatrzyłem całe forum, to jak i inne (w tym i anglojęzyczne) i nie znalazłem odpowiedzi na mój problem. Mianowicie w momencie kiedy chce wysłać plik na serwer o to takim kodem:

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>Wysyłanie pliku</title>
</head>
<body>
	<form name="formularz1" enctype="multipart/form-data" action="http://localhost/skrypt.php" method="post">
		Nazwa pliku:
		<input type="file" name="plik1">
		<input type="submit" name="wyslij" value="Wyślij plik">
	</form>
</body>
</html>

I odebrać go tym:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Odbieranie pliku</title>
</head>
<body>
    <?php	
      $uploaddir = 'C:\xampp\htdocs\przeslane_pliki\\';

      if($_FILES['plik1']['error'] == UPLOAD_ERR_OK){
	    $plik1 = $_POST['plik1'];
        $new_name = $uploaddir . $_FILES['plik1']['name'];
        $temp_name = $_FILES['plik1']['tmp_name'];
        if(move_uploaded_file($temp_name, $new_name)){
          echo "Plik został załadowany.";
        }
        else{
          echo "Nieprawidłowy plik.";
        }
      }
      else{
        echo "Wystąpił błąd: ";
        switch($_FILES['plik1']['error']){
          case UPLOAD_ERR_INI_SIZE  :
          case UPLOAD_ERR_FORM_SIZE :
            echo "Przekroczony maksymalny rozmiar pliku!";
            break;
          case UPLOAD_ERR_PARTIAL :
            echo "Odebrano tylko część pliku!";
            break;
          case UPLOAD_ERR_NO_FILE :
            echo "Plik nie został pobrany!";
            break;
          case UPLOAD_ERR_NO_TMP_DIR:
            echo "Brak dostępu do katalogu tymczasowego!";
            break;
          case UPLOAD_ERR_CANT_WRITE:
            echo "Nie udało się zapisać pliku na dysku serwera!";
            break;
          case UPLOAD_ERR_EXTENSION:
            echo "Ładowanie pliku przerwane przez rozszerzenie PHP!";
          default :
            echo "Nieznany typ błędu!";
        }
      }
    ?>
</body>
</html>

W momencie kiedy przesyłam "poprawnie" plik wyświetla się tylko jedna informacja:

Notice: Undefined index: plik1 in C:\xampp\htdocs\skrypt.php on line 12

W przypadku kiedy wysyłam plik o zbyt dużym rozmiarze wyświetla się:


Warning: POST Content-Length of 69021850 bytes exceeds the limit of 8388608 bytes in Unknown on line 0

Notice: Undefined index: plik1 in C:\xampp\htdocs\skrypt.php on line 11

Notice: Undefined index: plik1 in C:\xampp\htdocs\skrypt.php on line 12

Notice: Undefined index: plik1 in C:\xampp\htdocs\skrypt.php on line 13

Notice: Undefined index: plik1 in C:\xampp\htdocs\skrypt.php on line 14
Nieprawidłowy plik.

Nie dziwi mnie pierwsza linijka ponieważ jest ona w pełni zrozumiała chociaż w momencie kiedy jest obsługa błędów napisana przeze mnie to czy nie powinien się wyświetlić mój komunikat:"Przekroczony maksymalny rozmiar pliku!"?

Kiedy robiłem prosty kalkulator i przesyłałem dane metodą POST również był problem z undefined index jednak udało mi się go rozwiązać tym sposobem który właśnie znalazłem na tej stronie:

<?php
if((!isset($_POST["nazwa"]))){
header('Location: strona.html');
exit;
}
?>

W sumie nie rozumiem jednak jakie ma tu zadanie header('Location: strona.html'); więc jeżeli mógłby mi ktoś to przy okazji wyjaśnić.

Jeszcze raz podkreślam przeszukałem chyba wszystkie możliwe strony odnośnie tego problemu czy to polskie czy angielskie i żadne rozwiązanie problemu nie przyniosło efektu.

(tak spróbowałem sprawdzić (isset) czy tablica nie jest pusta i przypisać ją zmiennej plik1 ale nic to nie zmieniło.

Z góry dziękuje za pomoc.

1 odpowiedź

0 głosów
odpowiedź 18 marca 2018 przez Bosswell Nałogowiec (36,470 p.)
$plik1 = $_POST['plik1'];

Linia 12. Nie ma takiej zmiennej. Dlatego wyskakują błędy.

Ten header ma za zadanie odesłać użytkownika do strona.html w przypadku, gdy zmienna $_POST["nazwa"] nie jest ustawiona.
komentarz 18 marca 2018 przez Lahimowicz Początkujący (300 p.)

Próbowałem już w taki sposób stworzyć taką zmienne jednak pomimo tego nie było rezultatu więc usunąłem tą linijkę z kodu. Ale że ty tak napisałeś to już aby być na 100% pewnym że to nie działa jeszcze raz dopisałem i tak samo nie działa. Tym razem pokazuje że jeszcze właśnie w tej linijce $plik1 = $_POST['plik1']; 
Notice: Undefined index: plik1

Nie mam pojęcia czemu tak się dzieje :> Może znasz jeszcze inne możliwe przyczyny tej "notki"?

komentarz 18 marca 2018 przez Bosswell Nałogowiec (36,470 p.)
Bo ona jest zła.To nie zmienna POST przechowuje dane, a zmienna FILES.
komentarz 18 marca 2018 przez Lahimowicz Początkujący (300 p.)
Czyli musze napisać: $plik1 = $_FILES['plik1'];  ?
komentarz 18 marca 2018 przez Bosswell Nałogowiec (36,470 p.)
Tu masz przykład, jak coś takiego zrobić.

http://php.net/manual/en/features.file-upload.post-method.php

Podobne pytania

0 głosów
2 odpowiedzi 1,135 wizyt
pytanie zadane 6 stycznia 2018 w PHP przez GKMB Nowicjusz (150 p.)
0 głosów
1 odpowiedź 174 wizyt
pytanie zadane 19 lutego 2019 w PHP przez Vilsin Nowicjusz (150 p.)
0 głosów
1 odpowiedź 1,178 wizyt
pytanie zadane 12 lipca 2018 w PHP przez Thorwaldsen Początkujący (250 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...