Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Znowu upload plików - błąd
Forum PHP.pl > Forum > Przedszkole
Misiur66
Może pokażę całość i to co chce uzyskać, bo po jednym błędzie to nie ma sensu. Moja rejestracja opiera się na krokach (3, 4 to potwierdzenie poprawności danych). W 3 kroku można zauploadować avatar. W bazie danych mam pole typu boolean, które sprawdza czy ktoś ma avatar. Jeśli ma, to ładuje obrazek z folderu 'pix/avatar'. W momencie rejestracji, przed przejściem z 3 do 4 kroku obrazek (po sprawdzeniu), jest przesyłany tymczasowo do folderu 'pix/avatar/temp'. Dane pomiędzy krokami przysałam w tablicy poprzez ciasteczko (serialize, unserialize). W ciasteczku chcę jeszcze przesłać tymczasową nazwę avatara, jego roszerzenie i to czy został zauploadowany (do bazy danych). Dam tutaj kawałek kodu:

Kod
$types_z = array("image/png", "image/jpeg", "image/gif");
                        $types_na = array(".png", ".jpg", ".gif");
                        $type = str_replace($types_z, $types_na, $avatar['type']);
                        $random = rand(1, 99999);
                        $dane['avatar_nazwa'] = $random.$avatar['type'];
                        $prznenies_avatar = move_uploaded_file($avatar['tmp_name'], 'pix/avatar/temp/'.$random.$avatar['type']);
                        $dane['avatar_nazwa'] = $random.$avatar['type'];
                        $dane['avatar_type'] = $avatar['type'];
                        $dane['avatar'] = true;


To było z kroku 3, teraz 4.
Kod
elseif($_GET['krok'] == 4)
    {
        $dane = unserialize($_COOKIE['dane']);
        if(isset($_POST['rejestruj']))
        {
            $rejestruj = mysql_query('INSERT INTO users VALUES (false, "'.$dane['nick'].'","'.md5($dane['haslo']).'","'.$dane['email'].'","'.$dane['gg'].'","'.$dane['tekst_profil'].'","'.$dane['zainteresowania'].'","'.$dane['skad'].'","'.$dane['staz_www'].'","'.$dane['staz_gry'].'","'.$dane['strona_www'].'","'.$dane['avatar'].'","'.$dane['podpis'].'")') or die(mysql_error());
$pobierz = mysql_query('SELECT id_user FROM users WHERE nick_user LIKE "'.$dane['nick'].'"') or die(mysql_error());
             $id = mysql_fetch_array($pobierz);
             echo($id[0]);
             echo($dane['avatar_nazwa']);
             $avatar_gotowy = copy('pix/avatar/temp/'.$dane['avatar_nazwa'], 'pix/avatar/avatar_'.$id[0].$dane['avatar_type']);
             unlink('/pix/avatar/temp'.$dane['avatar_nazwa']);
             echo($dane['avatar']);
            //Pobierz id dla avatarka
            if($rejestruj)
            {
                setcookie('dane', 'null', time() - 3600);
                setcookie('ukonczone', md5('tak'));
                unset($dane);
                header('location: index.php?rejestracja&krok=done');
            }
            else
            {
                echo('Napotkano błąd w trakcie przetwarzania zapytania SQL');    
            }
        }
    }


Jeśli chcecie zobaczyć tą wersje, wejdźcie na http://misiur.cal.pl i spróbujcie sięzarejestrować uploadując avatar o wielkości mniejszej niż 100x100 i 100kB. Od razu są błędy że nie może pobraż $dane['avatar_nazwa'], i $dane['avatar']. Najgorsze jest to że nie mogę wstawić do BD czy ktoś zauploadował avatar czy nie i mi zwraca coś o integerze, czy jakoś tak. Jeśli ktoś ma chęć się tym zająć udostępnie wszystkie pliki .php. Pozdr
memory
a czy dane o tym obrazku (tymczasowym) widnieja w bazie danych/
Misiur66
Nie, są one przekazywane w ciasteczku (ale coś jak sprawdzam to coraz więcej błędów znajduje) Chyba będę musiał napisać od nowa sprawdzanie obrazka, bo mam np.: zamiast is_array($co); issrray($co), zamiast is_uploaded_file($_FILE['jaki']), is_file_uploaded($_FILE['jaki']); Pewnie to się roi od błędów... No cóż, jeszcze sobie poszukam.

Edit:

Ten fragment daje błędy, a dokładniej żaden element się nie wykonuje:

Kod
elseif($_GET['krok'] == 3)
    {
        $dane = unserialize($_COOKIE['dane']);
        if(isset($_POST['dalej_krok_3']))
        {
            $blad = 0;
            $bledy = array();
            if(is_uploaded_file($_FILES['avatar']['tmp_name']))
            {
                $avatar = $_FILES['avatar'];
                //Bezpieczeństwo skryptu uploadu avatarów i ograniczenia rozmiarów
                if($avatar['type'] == 'image/png' || $avatar['type'] == 'image/jpg' || $avatar['type'] == 'image/gif')
                {
                    //Dobra, to na pewno jpg, lub gif - a teraz trzeba się zabezpieczyć przed 'niby' gifami i jpg i png, ale też ograniczyć do 100x100
                    $tab = getimagesize($avatar['tmp_name']);
                    list($szerokosc, $wysokosc, $format, $znacznik_html, $kanaly) = $tab;
                    $bledy_a = array();
                    if(!is_array($tab) || $szerokosc < 2 || $wysokosc < 2)
                    {
                        echo('Masz za mały obrazek');
                        $bledy_a++;
                        $blad++;
                        $bledy[] = 'Twój obrazek jest spreparowany, lub zbyt mały';
                    }
                    if($szerokosc > 100 || $wysokosc > 100)
                    {
                        echo('Masz za duży obrazek');
                        $bledy_a++;
                        $blad++;
                        $bledy[] = 'Twój obrazek jest zbyt duży';
                    }
                    if($bledy_a == 0)
                    {
                        $types_z = array("image/png", "image/jpeg", "image/gif");
                        $types_na = array(".png", ".jpg", ".gif");
                        $type = str_replace($types_z, $types_na, $avatar['type']);
                        $random = rand(1, 99999);
                        $dane['avatar_nazwa'] = $random.$avatar['type'];
                        $prznenies_avatar = move_uploaded_file($avatar['tmp_name'], 'pix/avatar/temp/'.$random.$avatar['type']);
                        $dane['avatar_nazwa'] = $random.$avatar['type'];
                        $dane['avatar_type'] = $avatar['type'];
                        $dane['avatar'] = true;
                        $blad++;
                        $bledy[] = 'I powinno ustawić zmienne';
                    }
                }
            }
            else
            {
                $dane['avatar'] = false;
                $blad++;
                $bledy[] = 'pomija? 0o';
            }
            if($_POST['podpis'] != null)
            {
                $dane['podpis'] = mysql_escape_string($_POST['podpis']);
            }
            else
            {
                $dane['podpis'] = null;
            }
            if($blad == 0)
            {
                setcookie('dane', serialize($dane));
                header('location: index.php?strona=rejestracja&krok=4');
            }
            else
            {
                echo('<div id="output_bledy">');
                echo('<h4>Formularz zawiera błędy: <br/></h4>');    
                for ($i = 0; $i < count($bledy); $i++)
                  {
                  echo $bledy[$i].'<br />';
                 }
                echo('</div>');
            }
        }
    }
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.