Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Upload do katalogu zależny od nazwy użytkownika
Forum PHP.pl > Forum > Przedszkole
zoorg
Witam,

mam sprawnie skonstruowany formularz do przesyłania wielu plikow, dostępny po zalogowaniu.

Działa dla katalogu zdefiniowanego bezpośrednio:

  1. $uploadDir = "katalog1/";


Zatrzymała mnie kwestia przesyłania plików do nazwy katalogu zdefiniowanego w tabeli users

zawartość zmiennej trzymającej wartość wyświetla się prawidłowo
  1. $user = user::getData('', '');
  2. echo '<h3>Prześlij pliki do katalogu: </h3> <h2>'.$user['userdir'].'</h2>';


jednak nie mogę jej skleić w taki sposób

  1. $uploadDir =$user['userdir'].'/';





próbowałem bezpośrednio dokleić ."/' , .'/' ..ale tez nie łapie tego.
dodanie do pola userdir w bazie np "katalog1/", tez nie działa


jeśli znajdzie ktoś chwilę, będę wdzięczny za pomoc jak poprawnie "skladać" takie łańcuchy.
fate
Dobrze kombinujesz i tak powinno działać. Coś innego wg mnie nie trybi, sciezka pełna?

A te katalogi są już utworzone?
Jeżeli nie to sprawdzasz:
is_dir
i tworzysz:
mkdir

i wtedy upload
zoorg
1. ustawiona ścieżka jest względna eg: "katalog1/" w folderze localhost/nazwawww.com (w tym przypadku pliki przesyłają się prawidłowo) //katalogi istnieją, zaznaczalem katalog, kopiuj nazwe do notatnika, z tamtąd wrzutka w pole do db
2. wpisalem do pola folder w bazie ąźćł, i wyświetla to poprawnie


nagl w kodzie includowanej strony header.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

wywołanie w index.php
require 'header.php';


deklaracja strony kodowej w bazie danych utf8_bin,


..no i nie bangla ;]


#update
3. niedo końca w pierwszej chwili odgadnąłem Twój zamysł, - spróbuję przeczesać to sprawdzajac czy jest folder i utworzyć go z poziomu php

# UPDATE 2,

boolean true potwierdza ze katalog istnieje,
porównanie pola z bazy z katalogiem utworzonym na dysku przez porównanie "==" twierdzi ze ok, dla "===" - nazwy nie są zgodne (czy jeśil pole w db ma wiecej znaków niz zajmuje wartość to przy === porównywane są również spacje?questionmark.gif)

  1.  
  2. if (!strcmp($user['userdir']) === 'katalog1') {
  3.  
  4. echo 'nazwa katalogu w bazie jest zgodna z katalogiem na serwerze';
  5. }
  6. else
  7. echo 'nazwa z bazy nie zgadza sie z lokalną';




Mimo to nadal nie wgrywa pliku w opraciu o zmienną zbazy danych
Turson
Być może skrypt nie ma uprawnień do wgrania pliku do tego folderu. Sprawdź CHMOD
zoorg
uprawnienia 0755, lokalne dostęp do katalogu wszyscy, wszytskie uprawnienia.


w przypadku wpisania nazwy katalogu $uploadDir = "katalog1/"; - jest ok - pliki spadają do katalogu, , popodstawieniu $uploadDir =$user['userdir'].'/'; - echo wyswietla "katalog1/" (wiec jakby prawidłowo..)

wrzucam cały kod obsługujący przyslanie plików i obsługę komunikatów


//$filename = basename($filepath);

echo "Liczba przesłanych plików : ".count($_FILES['infile']['name'])."<br>";


$user = user::getData('', '');
echo '<h3>Prześlij pliki na konto: </h3> <h2>'.$user['userdir'].'</h2>'; // wyswietla poprawnie wartość z bazy danych "katalog1"

var_dump(is_dir('katalog1'));

echo 'sprawdzam czy na serwerze jest katalog katalog1'; //boolean true

if (!strcmp($user['userdir']) == 'katalog1') {

echo 'nazwa katalogu w bazie jest zgodna z katalogiem na serwerze'; // ta opcja wyswietla się w komunikacie po porównaniu
}
else
echo 'nazwa z bazy nie zgadza sie z lokalną';

//$uploadDir = "katalog1/"; //tak zdefiniowany działa

$uploadDir =$user['userdir'].'/'; //tak nie

echo "$uploadDir".' taki jest obecnie zdefiniowany katalog'; //wyswietla "katalog1/"




for ($i = 0; $i < count($_FILES['infile']['name']); $i++) {

echo "Nazwa pliku : ".$_FILES['infile']['name'][$i]."<br>";

//tak zostawiam pelna nazwe oryginalnego pliku do wrzucenia do katalogu

$fPath = $_FILES['infile']['name'][$i] . ".$ext";

echo "$fPath";

//wyciaga rozszerzenie
//$ext = substr(strrchr($_FILES['infile']['name'][$i], "."), 1);

// tak mozna składać nazwy, na randomie, albo ze slownika bazy danych
//$fPath = md5(rand() * time()); //+ . ".$ext"; //dla obcietej nazwy



echo "scieżka TEMP : ".$_FILES['infile']['tmp_name'][$i]."<br>"; //mozna wywalić

$result = move_uploaded_file($_FILES['infile']['tmp_name'][$i], $uploadDir . $fPath);



if (strlen($ext) > 0){
echo "Plik: ". $fPath ." przesłano pomyślnie. <br /><br />";
}
}


echo "<br /><br />Zakończono transfer.<br /><br />";
Echo "<a href=http://localhost/wwwxwww.com/>Powrót</a>"
?>




w przypadku gdy katalog jest zdefiniowany "na stałe" skrypt ten wyświetla poprawnie listę przekopiowanych plików,

w wypadku definicji katalogu dla z pola z bazy, wyświetla tylko podsumowanie ile plików zostało skopiowanych

..żeby było ciekawiej,

na podstawie pola z bazy danych - nie ma żadnego problemu żeby mkdir-em utwożyć katalog (jesli nie istnieje) i nadać mu prawa (np 0755) , tylko nie chce bydle tego samego pola użyć ( z doklejonym .'/' ) jako ścieżki do przegrania pliku, ani w wersji absolutnej, ani relatywnej...


Piwo dla bohatera który rozwiąże tę zagadkę.

Wyślę!
lobopol
Co wyświetla:
  1. var_dump($user['userdir']);
  2. var_dump(is_dir($user['userdir']));
  3. var_dump($user['userdir'] === 'katalog1');


Ps.
  1. if (!strcmp($user['userdir']) == 'katalog1') {

nie ma prawa dobrze działać strcmp działa inaczej (choćby to, że przyjmuje 2 parametry, porównaj sobie $user['userdir'] === 'katalog1'
zoorg
do === doszedłem dwa dni temu, wyświetla jakąś niezgodność

sprawa jest niby prosta,
wartość z pola bazy danych - bez problemu tworzy katalog, bez problemu nadaję temu katalogowi prawa, potwierdzam ze ten folder istnieje

ale używajac tego pola, nie mogę po dodaniu '/' nic do tego folderu zapisać

- moze jakieś konwersje, formatowanie do lewej, zamiana na hexy?? obcinanie spacji

o co kurde caman
lobopol
to co to zwraca co podałem dokładną zwrotkę podaj i popraw tego strcmp
zoorg
Rozpykałem



problemem był zakres (zasięg) zadeklarowanych zmiennych używanych w konstrukcji formularza, wobec zmiennych służących do logowania i pozniej przetwarzania plików. Pomieszałem. Probowalem użyć zmiennej zadeklarowanej w funkcji (zasięg lokalny) zamiast pobrać wartości zmiennych ponownie z bazy w miejscu w ktorym je po prostu potrzebuję i tam dodać konkatenacje zeby utwożyć ścieżki.

Reasumując - bardzo pouczająca lekcja

1. logowanie
2. odczyt wartości z bazy i przekazanie zmiennych
3. dostęp do funkcji podstrony dla odpowiedniego poziomu uprawnień,

4. użycie funkcji strony
5. zapis do bazy
6. prezentacja danych
7. przetwarzanie danych

Fajnie aż miło (:

Dziękuję wszystkim, którzy poświęcili swój czas zaglądając w ten temat


Można zamykać!
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.