Strona 1 z 1

[php/mysql] upload

: pn mar 21, 2005 1:54 pm
autor: majcok
Witam. Mam problem z uploadem pliku, tzn. nie pokazuje zadnego komunikatu, a w bazie w odpowiednim katalogu nie ma nic nowego. Ponizej kod:

Kod: Zaznacz cały

<?
function add_image()
{
    if(isset($_GET["id_cat"]))
    {
        $temat = "Przesylanie Plikow";
        html_header($temat, 800);

        ?>
        <form method="post" action="<?php echo $PHP_SELF ?>" enctype="multipart/form-data">
        Sciezka:<input type="file" name="userfile" size="20" maxlength="40">
        Nick:
        <input type="text" name="nick" size="20" maxlength="20">
        Opis:<textarea rows="5" cols="40" name="description"></textarea>
        <input type="submit" value="Dodaj">
        </form>
        <?
        html_footer();


        if(isset($_POST["userfile"]) && isset($_POST["nick"]) && isset($_POST["description"])) 
        {            
            global $userfile, $nick, $description;
            $dir = "/galeria";
            

            if(empty($nick)) 
            {
                error_message("Musisz podac nick!");
                exit;
            }
            if(empty($description)) 
            {
                error_message("Musisz podac opis!");
                exit;
            }
            if($userfile_size <= 0)
            {
                error_message("Musisz podac sciezke do obrazka!");
                exit;
            }
            if($userfile_size > 2000000)
            {
                error_message("Plik jest za duzy. Maksymalna wielkosc to 2 Mb!");
                exit;
            }

            $filename=basename($userfile_name);
            if(!@copy($userfile, "$dir/$filename"))
                echo("Blad nie mozna skopiowac $filename.");
            else echo "Udane przysylanie pliku $filename";
            header("Location: index.php");

            $img_path = "$dir/$filename";

            $query = "INSERT INTO gal_images VALUES(NULL, '$img_path', 'W', '$nick', '$_GET[id_cat]', '$description')";
            $wynik = mysql_query($query);
            if(!$wynik) error_message(sql_error());
            
            
        }

    }
}
?>
Nie wiem co jest nie tak, moze cos w php.ini albo z chmodem, ale na tym sie nie znam
Thx

Pzdr

Re: [php/mysql] upload

: pn mar 21, 2005 3:06 pm
autor: _ash_
Po pierwsze usun @ sprzed copy(), to sie dowiesz jaki blad ;)
Po drugie sprobuj uzyc move_uploaded_file() zamiast copy().
Po trzecie czy serwer ma safemode on, bo jesli tak, to trzeba bardzo uwazac na to dokad co sie chce kopiowac.

Re: [php/mysql] upload

: pn mar 21, 2005 6:27 pm
autor: majcok
To chyba narazie mi sie nie przyda, bo pod formularzem, mam warunek:

[php]<?php
if(isset($_POST["userfile"]) && isset($_POST["nick"]) && isset($_POST["description"]))
?>[/php]

i skrypt dzialal tak jakby w ogole warunek nie nie byl spelniony, tzn. po wyslalniu formularza, albo ponownie sie pojawial albo wyswietlal sie blad o braku sciezki. Gdy usunalem z warunku 'isset($_POST["userfile"])' skrypt, dzialal w pewnym stopniu (tzn. nie zapisywal obrazka, bo nie mial teoretycznie co) ale zapis do bazy byl.
Zmienielm na tak:
[php]<?php
if(isset($_FILES["userfile"]) && isset($_POST["nick"]) && isset($_POST["description"]))
?>[/php]
i niestety to samo :(
Btw. nie wiem czy mam ustawione safemode, mam zainstalowanego krasnala z domyslymi opcjami.

PZdr

Re: [php/mysql] upload

: wt mar 22, 2005 7:27 am
autor: _ash_
majcok pisze:Btw. nie wiem czy mam ustawione safemode, mam zainstalowanego krasnala z domyslymi opcjami.
Użyj phpinfo(); [ http://de.php.net/manual/en/function.phpinfo.php ]

Re: [php/mysql] upload

: wt mar 22, 2005 9:24 am
autor: majcok
safe_mode jest na off.
[php]<?php
if(isset($_FILES["userfile"]) && isset($_POST["nick"]) && isset($_POST["description"]))
{
global $userfile_name, $userfile_size;
$dir = "/galeria";

if(empty($_POST["nick"]))
{
error_message("Musisz podac nick!");
exit;
}
if(empty($_POST["description"]))
{
error_message("Musisz podac opis!");
exit;
}
if($userfile_size <= 0)
{
error_message("Musisz podac sciezke do obrazka!");
exit;
}
if($userfile_size > 2000000)
{
error_message("Plik jest za duzy. Maksymalna wielkosc to 2 Mb!");
exit;
}

$filename=basename($userfile_name);
if(!copy($_FILES["userfile"], "$dir/$filename"))
echo("Blad nie mozna skopiowac $filename.");
else echo "Udane przysylanie pliku $filename";


$img_path = "$dir/$filename";

$query = "INSERT INTO gal_images VALUES(NULL, '$img_path', 'W', '$_POST[nick]', '$_GET[id_cat]', '$_POST[description]')";
$wynik = mysql_query($query);
if(!$wynik) error_message(sql_error());
header("Location: index.php");

}


?>[/php]
Jednak cos jest jeszcze nie tak, bo nie kopiuje pliku.

PZdr

Re: [php/mysql] upload

: śr mar 23, 2005 12:54 pm
autor: paszczak
hmm.... a troche z innej strony

czy masz ustawiony "upload_tmp_dir" i czy napewno masz taki katalog?

Re: [php/mysql] upload

: śr mar 23, 2005 1:48 pm
autor: FanFataL
if(!copy($_FILES["userfile"], "$dir/$filename"))
Zastanawia mnie jak plik może mieć nazwę w postaci tablicy, hmmm :?

zrób [php]<?php
echo '<pre>';
print_r($_FILES['userfile']); // <-- To jest tablica [Array]
?>[/php]
W manualu [manual]copy[/manual]
bool copy ( string źródło, string przeznaczenie)
także dlatego nie kopiuje

Proponuje zrobić tak:[php]<?php
if(!copy($_FILES['userfile']['tmp_name'], "$dir/$filename"))
echo("Blad nie mozna skopiowac $filename.");
else echo "Udane przysylanie pliku $filename";
?>[/php]
Generalnie to ja zamiast [manual]copy[/manual] używam [manual]move_uploaded_file[/manual] i wtedy to by wyglądało tak ...[php]<?php
$file_tmp=$_FILES['userfile'];
$tmp=$file_tmp['tmp_name'];
if(!move_uploaded_file($tmp,$dir.'/'.$filename)) {
return getUploadError($file_tmp['error']);
}
return true;

// Dodatkowo masz funkcje do obsługi błędów podczas uploadu
function getUploadError($error_id=UPLOAD_ERR_OK) {
switch($error_id) {
default:
return true;
break;
case UPLOAD_ERR_INI_SIZE:
case UPLOAD_ERR_FORM_SIZE:
return 'Plik jest za duży ...';
break;
case UPLOAD_ERR_PARTIAL:
return 'Nastąpił błąd podczas transmisji danych ... spróbuj jeszcze raz';
break;
case UPLOAD_ERR_NO_FILE:
return 'Musisz wybrać plik';
break;
}
}
?>[/php]

Pozdrawiam :wink:
...