Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP]Prosty upload plików i ich wyświetlanie
Forum PHP.pl > Forum > Przedszkole
deadmen4
Witam,

Cała koncepcja wygląda następująco:

- 1 strona - Prosty upload pliku (formularzem) (do katalogu update): |-----------------------| |/Wybierz Plik\| |-----WPROWADŹ OPIS-----| |/Wyślij\|

- 2 strona - Również prosta, lista plików znajdujących się w katalogu update: 1. |-----OPIS-----| |Nazwa pliku która jest jednocześnie linkiem do pobrania tego pliku|


Przepraszam z takie ordynarne rysunki (szkice), ale chodzi tylko o to jak to ma mniej więcej wyglądać czarodziej.gif


No dobra, pozornie proste....... a jednak nie.

Mam jak narazie skrypt uploadu:

  1.  
  2. <?php
  3.  
  4.  
  5.  
  6.  
  7. if (isset($_FILES['Plik']))
  8. {
  9. if (move_uploaded_file($_FILES['Plik']['tmp_name'],'./mapki/'.$_FILES['Plik']['name']))
  10. {
  11. echo('Mapka została wysłana ');
  12. }
  13. else
  14. {
  15. switch($_FILES['Plik']['error'])
  16. {
  17. case 1: echo('Przesyłany plik jest większy niż zezwala konfiguracja serwera.');break;
  18. case 2: echo('Przesyłany plik jest większy niż zezwala formularz.');break;
  19. case 3: echo('Przesłano tylko część pliku.');break;
  20. case 4: echo('Plik nie został przesłany');break;
  21. }
  22. }
  23. }
  24. ?>
  25.  
  26. <form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post" enctype="multipart/form-data">
  27. <input type="hidden" name="MAX_FILE_SIZE" value="1000000000" />
  28. Wskaż mapke do wysłania: <input type="file" name="Plik" /
  29. <input type="submit" value="Wyslij plik" />
  30. </form>
  31.  


Przede wszystkim trzeba dołożyć pole do wprowadzania opisu. (więc chyba również kolejną zmienną)

Kolejny problem to OPIS i NAZWA pliku muszą być chyba gdzieś przechowywane, albo jakoś dodawane (żeby na drugiej stronie były na liście)

Nie wiem jak to rozwiązać.
Na drugiej stronie musi być również jakiś skrypt który po uploadzie doda kolejną pozycje na liście, oraz z nazwy zrobi link.



Wiem, że trochę nie wyraźnie to wytłumaczyłem, ale mam nadzieje, że ktoś zrozumie o co mi chodzi.

Jeszcze jedno: Nie wiem czy dobrze, ale myśle, że nazwa i opis muszą być dodawane do zmiennych w czasie uploadu, a gdy już zostaną dodane na liste, te zmienne powinny być "wyczyszczone"... oraz chyba ta druga strona musi być (po przejściu na nią) includowana, żeby zmienne się zachowały..... a zresztą nie wiem.... pewnie głupoty pisze withstupidsmiley.gif

Z góry dzięki za pomoc,

pozdr.

thek
Wykonanie zależy od tego, czy chcesz oprzeć to o bazę danych czy nie. Jeśli o bazę to dane typu opis, nazwa i inne tekstowe są w niej zapisywane, wraz z nazwą/lokalizacją pliku. Tym zajmie się skrypt strona1, która jest zwykłym formularzem z jednym polem typu file i ilomaś text lub textarea. W skrypt strona2 jedynie odczytasz z bazy te dane i wyświetlisz.

Jeśli nie masz bazy danych to sam ją musisz stworzyć czy też zasymulować, choćby plikami tekstowymi(choćby XML), bo to najprostsze i najwygodniejsze rozwiązanie.
deadmen4
OK. Piszę sobie taki skrypt tylko nie wiem jakiego roz. użyć:

1. w pliku sql.php który includuje robie:
  1. mysql_connect('mysql3.yoyo.pl', 'db1000009', 'pass');
  2. mysql_select_db('1000009');


A na stronie robiłem:

mysql_query( );
mysql_close;

2. sql.php :

  1. $baza
  2. $user
  3. $pass
  4. itd. (czyli w zmiennych)


A na stronie:

mysql_connect(...zmienne...);
mysql_select_db(...zmienne...);
mysql_query( );
mysql_close;

Co lepiej?

Myśle, że lepszy jest 2. bo nie będzie chyba tak zamulał i się połączenia nie nałożą.

Dodam, że to jest pierwszy skrypt mysql któr samodzielnie tworze.... więc się uczę na błędach smile.gif


=============================================================


A więc wytworzyłem to w miare tak jak by chciał. Z bazą się łączy, ale nie dodaje rekordu.

1. strona uploadu:

  1. <?php
  2.  
  3. include ('sql.php');
  4.  
  5. $nazwa=$_FILES['Plik']['name'];
  6. $nick=$_POST['nick'];
  7.  
  8.  
  9.  
  10.  
  11. if (isset($_FILES['Plik']))
  12. {
  13. if (move_uploaded_file($_FILES['Plik']['tmp_name'],'./mapki/'.$_FILES['Plik']['name']))
  14. {
  15. echo("Mapka <strong>$nazwa</strong> $nick została wysłana!");
  16. }
  17. else
  18. {
  19. switch($_FILES['Plik']['error'])
  20. {
  21. case 1: echo('Przesyłany plik jest większy niż zezwala konfiguracja serwera.');break;
  22. case 2: echo('Przesyłany plik jest większy niż zezwala formularz.');break;
  23. case 3: echo('Przesłano tylko część pliku.');break;
  24. case 4: echo('Plik nie został przesłany');break;
  25. }
  26. }
  27.  
  28. mysql_connect("$sql_host", "$sql_user", "$sql_pass");
  29. mysql_select_db("$sql_db");
  30. mysql_query('INSERT INTO `maps` (`name`, `user`) VALUES ("$nazwa", "$nick")');
  31.  
  32.  
  33.  
  34. }
  35. ?>
  36.  
  37.  
  38. <form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post" enctype="multipart/form-data">
  39. <input type="hidden" name="MAX_FILE_SIZE" value="1000000000" /><br />
  40. Wskaż mapke do wysłania: <input type="file" name="Plik" /><br />
  41. Twoj nick: <input type="text" name="nick" />
  42. <input type="submit" value="Wyslij plik" />
  43. </form>
  44.  
  45.  
  46.  
  47.  



2. strona wyświetlania danych: (narazie taka mi wystarczy byle by pokazywała)



  1.  
  2. <?php
  3.  
  4. include ("sql.php");
  5.  
  6.  
  7. mysql_connect("$sql_host", "$sql_user", "$sql_pass");
  8. mysql_select_db("$sql_db");
  9.  
  10. mysql_query('SELECT `name`, `user` FROM `maps`');
  11.  
  12.  
  13. ?>
  14.  


Dodam, że baza, tabela i pola istnieją.

3. SQL.php:
  1.  
  2. <?php
  3.  
  4. $sql_host = "mysql3.yoyo.pl";
  5. $sql_user= "db1000009";
  6. $sql_pass= "pass";
  7. $sql_db= "1000009";
  8.  
  9.  
  10.  
  11. ?>
  12.  


Nie wiem czemu nie dodaje.... ale dodałem do tabeli testowe dane... i nawet ich nie wyświetla. (a się łączy)

Proszę o pomoc co jest nie tak... sad.gif
_olo_1984
co do wyświetlania danych:
  1. <?php
  2. include ("sql.php");
  3. mysql_connect("$sql_host", "$sql_user", "$sql_pass") or die();
  4. mysql_select_db("$sql_db") or die();
  5.  
  6. $res = mysql_query('SELECT `name`, `user` FROM `maps`') or die(mysql_error());
  7. while($row=mysql_fetch_array($res))
  8. {
  9. echo 'Imię: '.$row['name'].' | nazwa: '.$row['user'].'<br/>';
  10. }
  11.  
  12. ?>

ale to podstawy podstaw. Co do dodawania plików, to najpierw sprawdź, czy on poprawnie zapisał się tam gdzie chcesz, dopiero dodawaj do bazy rekord z danymi. Pomijam już fakt, że całkowicie niezabezpieczone to jest. No ale jak to ma tylko działać to ok
deadmen4
Ale, wciąż nie wysyła ani nie wyświetla. Tylko nie rozumiem CZEMU?!

Ma ktoś może jeszcze jakiś pomysł?
_olo_1984
sprawdź czy łączy się z bazą, potestuj, włącz wyświetlanie błędów
  1. error_reporting( E_ALL ^ E_NOTICE | E_STRICT );
  2. ini_set( 'display_errors', 1 );
  3.  
  4. $con = mysql_connect('mysql3.yoyo.pl', 'nazwa_uzytkownika', 'haslo'); // wpisz ręcznie
  5. if($con)
  6. {
  7. $db = mysql_select_db('nazwa_bazy_danych');
  8. // analogicznie ... if()
  9. }
  10. else
  11. {
  12. echo 'Brak połączenia';
  13. }

jak jesteś pewien, że masz połączenie to weź się za wyświetlanie wprowadzonych danych testowych, pprzykład który podałem generalnie musi działać, jeżeli dane sa prawidłowe. Jak już będziesz miał wyświetlanie i połączenie z bazą poprawne to weź się za upload. Co do uploadu to weź sobie przeanalizuj jakiś przykład z kursu/ksiazki, zobacz co to jest funkcja is_uploaded_file, sprawdź prawa dostępu do katalogów, zobacz co przesyłasz w zmiennej $_FILES, $_POST ...
deadmen4
OMG! Zmarnowałem nie potrzebnie 3 godziny szukając przyczyny, mogłem odrazu zajrzeć tam, gdzie nigdy bym nie szukał błędu! Przez uruchowienie wyrzutu wszystkich możliwych errorów znalazłem błąd:
Szukałe oczywiście wszędzie, tylko nie w pliku sql.php a brakowało tam literki w nazwie bazy sciana.gif sciana.gif sciana.gif sciana.gif

Ale dziękuje za odpowiedzi bo wiem nowe rzeczy, a jak już pisałem uczę się na błędach.

Dobra wszystko i baza działa.
Ale chciałem, aby na liście plików nazwa pliku była linkiem do jego ściągnięcia.

  1.  
  2. <?php
  3. include ("sql.php");
  4. mysql_connect("$sql_host", "$sql_user", "$sql_pass") or die();
  5. mysql_select_db("$sql_db") or die();
  6.  
  7. $dane = mysql_query('SELECT `name`, `user` FROM `maps`') or die(mysql_error());
  8.  
  9. while ($wiersz = mysql_fetch_row($dane))
  10. {
  11. echo " |<tr><td>| $wiersz[0] |</td><td>| $wiersz[1] |</td><tr>| <br/> " ;
  12. }
  13.  
  14.  
  15.  
  16. ?>
  17.  
  18.  


$wiersz[0] to nazwa. Jak ją przerobić na link w takiej postaci: ./mapki/nazwa_tego_pliku

w nazwie jest rozszerzenie więc z tym nie ma problemu.
_olo_1984
jeżeli ścieżka jest poprawna, oraz masz prawa do odczytu z tego katalogu to:
  1. while ($wiersz = mysql_fetch_row($dane))
  2. {
  3. echo ' |<tr><td>| <a href="/mapki/'.$wiersz[0].'">'.$wiersz[0].'</a> |</td><td>| '.$wiersz[1].' |</td></tr>| <br/> ' ;
  4. // jeżeli mapki jest w głównym katalogu, jeżeli nie, lepiej jest podawać pełną ścieżkę do plików
  5. }

pozdr
deadmen4
@up dzięki wielkie

Są dwa problemy:

1. Linki są, ale po kliknięciu w nie pokazuje:

Kod
Błąd 403

Nie masz uprawnień do przeglądania zawartości tego katalogu.

Prawdopodobnie nie umieszczono w nim poprawnego pliku startowego (index.htm, index.html, index.php, index.php5).

Powrót


Poprostu nie chce ściągać pliku. To nie wina linków! Nawet jak ręcznie wklepie adres... xxx.xxx.pl/mapki/xxxxx.xxx to i tak wyskakuje ten błąd.
Hosting mam yoyo jakby co.
Folder ma CHMOD 777.

Nie jest to też wina plików, bo z innej strony normalnie ściąga..

Czemu tak się dzieje i co z tym zrobićquestionmark.gifquestionmark.gif

2.

  1.  
  2.  
  3. <tr>
  4. <td><a href='/new/mapki/$wiersz[0]'>$wiersz[0]</a></td> <td>$wiersz[1]</td>
  5. </tr>
  6.  
  7. </table>
  8.  


Mam taką tabele.

A oto CSS do niej:

  1.  
  2. table {
  3.  
  4. table-layout: auto;
  5. font: Arial Black ;
  6. font-size: large;
  7. font-weight: bold;
  8.  
  9. border-collapse: separate; // to właśnie nie działa
  10. border: green 1mm solid;
  11. border-spacing: 4.5mm;
  12.  
  13. }
  14.  


Chcę, aby tabela miała rozdzielone komórki, dlatego użyłem border-collapse: separate;, ale nie działa. Jak wsadziłem to w td to też nie działa...
Z powyższymi ustawieniami są tylko ramki naokoło, a ja chce oddzielone wszystko ACHA, i co zrobić żeby się nie dublowały w kolejnych wierszach poziome rozdzielenia?


_olo_1984
może jakeś ograniczenia/blokady w htaccess, jaki chmod dla plików, 0644 ? Plik o takeij nazwie na pewno jest w tym miejscu ?
deadmen4
OK WIEM! Jak ustawiłem dla pliku chmod 777 do się da pobrać. Ale problem jest: jak przychodzi nowy plik ma chmod 600. Trzeba coś zrobić żeby po dodaniu dostawał odpowiedni chmod, tylko jak?questionmark.gif
_olo_1984
chmod - po prawidłowym uploadzie na serwer
  1. chmod( '/mapki/nazwa_pliku', 0644 );
deadmen4
OK dzięki Ci stokrotne. Wszystko działa. Ale pozostaje jeszcze kwestia tabelki o której pisałem 2 posty up... co z tym zrobić?

Prosiłbym o pomoc z tą tabelką... wub.gif

.
thek
Co do wyglądu tabeli to używaj czegoś innego przy border niż milimetry, bo możesz nie widzieć różnicy potem. Zastosuj zwyczajnie piksele. To samo z border-spacing. I obie mają tyczyć table a nie td a powinno pójść.
deadmen4
Wciąż nie chce dzielić.
Wrzuce jeszcze raz CSS:

  1. table {
  2.  
  3. table-layout: auto;
  4. font: Arial Black ;
  5. font-size: large;
  6. font-weight: bold;
  7.  
  8. border-collapse: separate;
  9. border: green 2px solid;
  10. border-spacing: 5px;
  11.  
  12. }


Jakby co, to testowo mam tą tabele tutaj: http://www.csmap.yoyo.pl/new/mapy.php

Nie rozdziela komórek.

Kombinowałem długo ale nie wiem co jest....
thek
A Ty chociaż widzisz coś Ty za burdel zrobił? Jak ma Ci rozdzielić komórki, skoro Ty nie masz komórek, ale wszystko rozwalasz na osobne tabele! To jest Twój kod:
  1.  
  2. <tr>
  3.  
  4. <td><a href='./mapki/Zdjecie'>Zdjecie</a></td> <td>123</td>
  5. </tr>
  6.  
  7. </table> <table>
  8.  
  9. <tr>
  10. <td><a href='./mapki/Dok1'>Dok1</a></td> <td>B4</td>
  11. </tr>
  12.  
  13. </table> <table>
  14.  
  15.  
  16. <tr>
  17. <td><a href='./mapki/Siedziba.wem'>Siedziba.wem</a></td> <td>Maro</td>
  18. </tr>
  19.  
  20. </table>
A to mój
  1. <tr>
  2. <td><a href='./mapki/Zdjecie'>Zdjecie</a></td> <td>123</td>
  3. </tr>
  4. <tr>
  5. <td><a href='./mapki/Dok1'>Dok1</a></td> <td>B4</td>
  6. </tr>
  7. <tr>
  8. <td><a href='./mapki/Siedziba.wem'>Siedziba.wem</a></td> <td>Maro</td>
  9. </tr>
I dodaj do testów jeszcze w pliku CSS
  1. td {border:1px solid blue;}
A zobaczysz czemu waliłeś głupoty i nie chciało Ci działać.
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.