Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][HTML][PHP]Formularz + upload zdjęć
Forum PHP.pl > Forum > Przedszkole
daniel55
Witam wszystkich.

Planuję zrobić prostą stronę - informacja o imprezie.
Na stronie chciałbym umieścić formularz z możliwością rejestracji (kilka danych :Imię , nazwisko, nick, email, tel).
Dodatkowo chcę aby była możliwość przesłania zdjęcia - Avatar uczestnika.
Kod testuję lokalnie na xampp serwer Apache.
Na stronce wpisuję dane ,otwiera się okno uploadu, wybieram plik i klikam wyślij.
Wpisane do formularza dane tekstowe Imię i nazwisko ... wyświetlają się na stronie, natomiast mam problem z lokalizacją i zapisem zdjęcia na serwerze.
Kod php którego używam :

wysyłanie pliku :
<form enctype="multipart/form-data" action="plik.php"
method="post" >
<input type="hidden" name="MAX_FILE_SIZE" value="512000" />
<input type="file" name="obrazek" />
<input type="submit" value="wyślij" />
</form>

zapis na serwerze odebranego plku:
<?php

function zapisz_plik()
{
$lokalizacja = './temp/plik_obrazkowy.jpg';

if(is_uploaded_file($_FILES['obrazek']['tmp_name']))
{
if(!move_uploaded_file($_FILES['obrazek']['tmp_name'], $lokalizacja))
{
echo 'problem: Nie udało się skopiować pliku do katalogu.';
return false;
}
}
else
{
echo 'problem: Możliwy atak podczas przesyłania pliku.';
echo 'Plik nie został zapisany.';
return false;
}
return true;
}

?>

Plik nie zapisuje się nigdzie, nie jestem pewien czy dobrze podaję ścieżkę zapisu i drugi parametr['tmp_name'].
Kolejna kwestia, to zapis tych danych w bazie danych na serwerze i ich wyświetlenie w formie listy uczestników(Imię, nazwisko, nick) z avatarem.
Dodatkowo podczas rejestracji można by dodać pole wyboru darmowego gadżetu z pośród kilku dostępnych w formie pola wyboru "radio", info dostępne tylko dla organizatora.
Jak najprościej zrealizować taką funkcję na stronie?
Będzie to mała impreza max kilkadziesiąt osób.
Z góry dzięki .
Pozdrawiam.
dublinka
  1. $target_path = $target_path . "/" . basename( $_FILES['uploadedfile']['name']);
  2.  
  3. if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
  4. echo "ok";
  5. } else{
  6. echo "error";
  7. }


Lokalizacja to chyba wiesz co oznacza.


  1. if(isset($_FILES["uploadedfile"]["type"]) && ($_FILES["uploadedfile"]["size"] < 5000000)){
  2. $sourcePath = $_FILES['uploadedfile']['tmp_name'];
  3. $file = $_FILES['uploadedfile']['name'];
  4. $targetPath = "/uploads/".$file;
  5. if(move_uploaded_file($sourcePath,$targetPath)){
  6. echo "plik: ".$_FILES['uploadedfile']['name']." został przeslany";
  7. }else{
  8. echo "error.";
  9. }
  10. }else{
  11. echo "Nie dodales pliku lub jest za duzy max 5mb.";
  12. }
daniel55
Ok.
Ogarnąłem funkcję uploadu, okazało się, że deklarowałem funkcję, natomiast już jej nie wywoływałem w kodzie.
Traktowałem deklarację jako wywołanie funkcji.
Jednak o ile podczas testów na lokalnym serwerze Apache wszystko działa Ok, to już po przeniesieniu strony na serwer .prv.pl i zmianie ścieżki zapisu pliku dostaję komunikat:
problem: Nie udało się skopiować pliku do katalogu.
Nie wiem czy to wina kodu, czy może serwer nie obsługuje funkcji PHP lub złą wersja?
Pozdrawiam.
nospor
Cytat
Nie wiem czy to wina kodu, czy może serwer nie obsługuje funkcji PHP lub złą wersja?

A moze poprostu zle nadane prawa zapisu do katalogu ./temp ?
daniel55
tylko, że nie widzę na serwerze takiego katalogu
nospor
to tym bardziej jak php ma tam cokolwiek wrzucic skoro go nie ma?

ps: ja mowie o tym
$lokalizacja = './temp/plik_obrazkowy.jpg';

wiec sam tworzysz lokalizacje a nie stworzyles katalogow odpowiednich? W ogole rozumiesz kod, ktory piszesz?
daniel55
Utworzyłem odpowiednie katalogi , do których odnosiła się lokalizacja i do których powinien się zapisać plik . U mnie było to $lokalizacja = './testy/grafika/obrazek.jpg.';
Nadałem prawa do zapisu i nadal występuje problem podczas próby zapisu.

Wkleiłem też do php kod:
<?php

// wyświetlanie typu pliku
echo $_FILES['obrazek']['type'];

// wyświetlanie rozmiaru
echo $_FILES['obrazek']['size'];

// wyświetlanie nazwy pliku
echo $_FILES['obrazek']['name'];

// wyświetlanie nazwy tymczasowej
echo $_FILES['obrazek']['tmp_name'];

// wyświetlanie ewentualnych błędów
echo $_FILES['obrazek']['error'];

?>

W odpowiedzi pokazuje : image/jpeg19612zdj.jpg/tmp/phpoyDuP10

Czyli z tego z rozumiem plik jest w katalogu tymczasowym na serwerze ale nie może zostać zapisany do katalogu docelowego

OK.
Już działa.
Problem polegał na tym, że do testów utworzyłem na serwerze katalog testy i tam kopiowałem pliki upload.html i upload.php.
Po wklepaniu strony xxx.prv.pl/testy/upload.html stronka uploadu się otwierała natomiast podczas zapisu pliku pomimo właściwej ścieżki dostępu i uprawnień zapisu, operacja kończyła się błędem.
Po umieszczeniu plików upload.html i upload.php do katalogu głównego i wklepaniu adresu xxx.prv.pl/upload.html, wszystko zadziałało jak należy. Można zapisywać pliki do dowolnego katalogu na serwerze, po wpisaniu odpowiedniej ścieżki w pliku upload.php.
Czy istnieje sposób aby testy robić w osobnym katalogu na serwerze? czy zawsze trzeba umieszczać pliki w katalogu głównym?
Dzięki za pomoc.
Pozdrawiam.
dublinka
Mozesz gdzie chcesz

Cytat(daniel55 @ 20.11.2019, 12:34:16 ) *
Witam wszystkich.

Planuję zrobić prostą stronę - informacja o imprezie.
Na stronie chciałbym umieścić formularz z możliwością rejestracji (kilka danych :Imię , nazwisko, nick, email, tel).
Dodatkowo chcę aby była możliwość przesłania zdjęcia - Avatar uczestnika.

[........]

Dodatkowo podczas rejestracji można by dodać pole wyboru darmowego gadżetu z pośród kilku dostępnych w formie pola wyboru "radio", info dostępne tylko dla organizatora.
Jak najprościej zrealizować taką funkcję na stronie?
Będzie to mała impreza max kilkadziesiąt osób.
Z góry dzięki .
Pozdrawiam.



Rejestracja czy po prostu dopisywanie do bazy jak leci bo rejestracja to juz i logowanie a dopisanie tylko to wprowadzenie danych i poslanie na serwer.

1. Formularz
2. Zeby nie bylo powielan nickow i emaila zabezpiecz to sprawdzajac czy juz nie istnieja.Chociaz sprawdzaj nick zeby nie wprowadzono 2 takich samych.
3. Przed zapisem do bazy filtruj dane (prevent SQL). Obraz filtruj pod względem: rozmiarów, rozszerzenia, wysokosci i szerokosci.
4. Obraz przesylaj na serwer do danego katalogu a w bazie zapisuj samą nazwe. Zbezpiecz sie przed dodaniem takiej samej nazwy. Wiec albo sprawdzaj czy taki sam plik istnieje juz na serwerze lub od razu doklej jakis losowy string do nazwy badz od razu zmien nazwe z oryginału na jakis hasz typu" erfdstt3wrerw43trgdt45td4t.jpg i te nazwe zapisz do bazy.
5. Po dodaniu przekierowac na dana strone lub wyswietl informacje z podziekowaniem + link do strony gdzie wyswietla sie dane.
6. Zrob wyswietlenie z bazy. Sam obraz wyswietl podając tag <img a jako nazwe pobierz daną z tabesli sql.
daniel55
Panowie formularz już mam i zapisane dane w bazie danych.
Teraz potrzeba napisać funkcję, która po kliknięciu przycisku np. odczyt, będzie pobierała dane z bazy np. do tablicy, Imię, Nazwisko i informację o lokalizacji pliku *.jpg (Avatar).
Następnie trzeba te informacje wyświetlić na stronie np. w nowym oknie.
Jakich funkcji najlepiej użyć?
Pozdrawiam.
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-2024 Invision Power Services, Inc.