Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: "Undefined index" -> $_FILES['x']['x']
Forum PHP.pl > Forum > Przedszkole
Tornax
Witam

W trakcie pisania skryptu natrafiłem na następujący błąd:

Notice: Undefined index: image_file in c:\www\polej\index.php(134) : eval()'d code on line 123

Linia 123:
Kod
if (is_uploaded_file($_FILES['image_file']['tmp_name']))


Pojawia się on w trakcie przetwarzania formularza z wysłanym plikiem. Zmienna $_FILES['image_file'] jest nieutworzona, sprawdzałem przez isset(). W formularzu oczywiście istnieje linijka:

Kod
<INPUT TYPE="file" NAME="image_file">


Jest również odpowiednio przygotowany do wysyłania plików formularz, entype poprawny

Kod
<FORM ACTION="index.php?w=add&mod=ra" METHOD="POST" ENTYPE="multipart/form-data">


Cały kod ma za zadanie zapisać pare rzeczy z pól tekstowych + odebrać plik (obrazek) i zminiaturyzować. Zanim ktoś poleci sprawdzanie ustawień php dodam, że rozpracowywałem w osobnym pliku php odbieranie i miniaturyzacje obrazka:

Kod
<form action="<?=$_SERVER["PHP_SELF"]?>" method=post enctype="multipart/form-data">
  Select A File To Upload: <input type="file" name="image_file"><br>
  <input type="submit" name="submitter" value="Upload File">
</form>

<?
$max_rozmiar = 1024*1024;

$prts=explode('/',$_SERVER['PHP_SELF']);
$adr=$_SERVER['DOCUMENT_ROOT'];
for($x=0;$x<(count($prts)-1);$x++)
{
  $adr.=$prts[$x].'/';
}

if (is_uploaded_file($_FILES['image_file']['tmp_name'])) {
    if ($_FILES['image_file']['size'] > $max_rozmiar)
    {
      echo 'Bł±d! Plik jest za duży!';
    }
    else
    {
      $dir=''; //Musi zawierać '/' na końcu
      $path=$adr.$dir.$_FILES['image_file']['name'];
      echo 'Odebrano plik. Pocz±tkowa nazwa: '.$_FILES['image_file']['name'];
      echo '<br/>';
      if (isset($_FILES['image_file']['type']))
        echo 'Typ: '.$_FILES['image_file']['type'].'<br/>';
      move_uploaded_file($_FILES['image_file']['tmp_name'],$path);
      
      $im_file_name=$path;
      $image_attribs=getimagesize($im_file_name);
      $im_old=imageCreateFromJpeg($im_file_name);

      $th_max_width = 144;
      $th_max_height = 144;
      $ratio = ($image_attribs[0] > $image_attribs[1]) ? $th_max_width/$image_attribs[0] : $th_max_height/$image_attribs[1];
      $th_width = $image_attribs[0] * $ratio;
      $th_height = $image_attribs[1] * $ratio;
      $im_new = imagecreatetruecolor($th_width,$th_height);
      imageAntiAlias($im_new,true);

      $th_file_name=$path;
      imageCopyResampled($im_new,$im_old,0,0,0,0,$th_width,$th_height, $image_attribs[0], $image_attribs[1]);
      imageJpeg($im_new,$th_file_name,80);
    }
}
else
{
  echo 'Bł±d przy przesyłaniu danych!';
}

?>


O dziwo na tym samym serwerze ten kod działa w osobnym pliku, natomiast w pliku do którego go skopiowałem już nie. Nie za bardzo potrafię zrozumieć w czym jest problem, zastanawiam się czy nie leży on w wysłanych wcześniej nagłówkach. Jeżeli ktoś mógłby podzielić się jakimś sugestiami to byłbym bardzo wdzięczny.
nospor
MAsz takiego NOTICE, gdyż przy pierwszym uruchomieniu skyptu (jeszcze przed wyslanie formualrza) ten skrypt jest wykonywany. No a przed wyslanie formualrza ta zmienna nie istnieje. Zapewne gdy wysylasz formualrz z plikiem to już tego problemu nie ma.
Daj se chociażby warunek:
  1. <?php
  2.  
  3. if (isset($_FILES['image_file']))
  4. {
  5. //i tu dopiero upload
  6. }
  7.  
  8. ?>
tornax
Nie. Ponieważ kod jest podzielony na części switch'em. Fromularz uruchamia się gdy $_GET['mod']='r' natomiast po wysłaniu (submit) zmienia $_GET['mod']='ra'. Mialbyś rację gdbym wchodził do części przetwarzającej formularz ręcznie ale zawsze wchodze do niej po przez wysłanie formularza.

Pozatym napisałem wcześniej, że po wysłaniu formularza zmienna $_FILES['image_file'] nie istnieje co sprawdzałem warunkiem z isset() tak więc wpowadzenie proponowanego przez Ciebie rozwiązania nic nie da.
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.