Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MySQL] Upload bannerów z wpisem do bazy
wyrdhamster
post
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 1.12.2009

Ostrzeżenie: (0%)
-----


Mam zlepiony i ogarnięty skrypt w PHP do uploadu plików:

*Formularz:
  1. <form enctype="multipart/form-data" action="bannersadd.php" method="POST">
  2. <input type="hidden" name="MAX_FILE_SIZE" value="500000000000" /> <input
  3. name="plik" type="file" /> <input type="submit" value="Wyślij plik" />
  4. </form>


*Skrypt:
  1. <?php
  2. // podłączamy plik connection.php
  3. require "connection.php";
  4. // wywołujemy funkcję connection()
  5. connection();
  6.  
  7. $path = $_SERVER['DOCUMENT_ROOT'];
  8. $sciezka = 'psw'; // można wywalić później
  9. $katalog = $path.'/'.$sciezka.'/banners';
  10. $plik_tmp = $_FILES['plik']['tmp_name'];
  11. $plik_nazwa = $_FILES['plik']['name'];
  12. $plik_rozmiar = $_FILES['plik']['size'];
  13.  
  14.  
  15. if(is_uploaded_file($plik_tmp)) {
  16. move_uploaded_file($plik_tmp, $katalog);
  17. echo "Plik: <strong>$plik_nazwa</strong> o rozmiarze
  18. <strong>$plik_rozmiar bajtów</strong> został przesłany na serwer!";
  19. }
  20.  
  21. if(isset($_POST['submit'])) {
  22. $zapytanie = "INSERT INTO banners ( filename ) VALUES ('$plik_nazwa')";
  23. mysql_query($zapytanie) or die(mysql_error());
  24. print("<h1>Dane zostały dodane<br />");
  25. }
  26. ?>


Od dwóch dni się z nim gryze i nie mam pojęcia co jest nie tak. sciana.gif

Formularz działa, pobiera plik, ale skrypt wrzucający na serwer już nie, i wywala takie o to komunikaty:

Warning: move_uploaded_file(/home/klient.dhosting.pl/adkl/psw/banners) [function.move-uploaded-file]: failed to open stream: Is a directory in /home/klient.dhosting.pl/adkl/psw/bannersadd.php on line 21

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/home/klient.dhosting.pl/adkl/.tmp/phpNSNMEH' to '/home/klient.dhosting.pl/adkl/psw/banners' in /home/klient.dhosting.pl/adkl/psw/bannersadd.php on line 21

Plik: przód.jpg o rozmiarze 25726 bajtów został przesłany na serwer!


Czy ktoś może mi powiedzieć co tu może być nie tak?

Ten post edytował wyrdhamster 2.12.2009, 22:13:56
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 13)
bim2
post
Post #2





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


Cytat
failed to open stream: Is a directory in

Na 100% jest taki katalog i nadane ma chmody poprawne?


--------------------
Go to the top of the page
+Quote Post
wyrdhamster
post
Post #3





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 1.12.2009

Ostrzeżenie: (0%)
-----


Cytat
Na 100% jest taki katalog i nadane ma chmody poprawne?


Istnieje on od 36 godzin, a chmoda sprawdzałem z n razy już teraz. Ale zapytam się żeby być pewnym na 1000% - powinno być 777? Może to być wina hostingu?
Go to the top of the page
+Quote Post
ChrisB
post
Post #4





Grupa: Zarejestrowani
Postów: 73
Pomógł: 4
Dołączył: 13.01.2004
Skąd: Bielsko-Biała

Ostrzeżenie: (0%)
-----


  1. move_uploaded_file($plik_tmp, $katalog);


jako parametr przyjmuje:
1)nazwe pliku w tempie to jest ok
2)nazwe pliku gdzie ma przeniesc (teraz masz tam tylko katalog gdzie ma przeniesc i o to sie pieni)

plus pisanie że się powiodło bez sprawdzenia czy się powiodło jest lekko rzecz ujmując:D
ogolnie o to chodzi:
  1. move_uploaded_file($plik_tmp, $katalog.'jakasnazwa.xxx');


Ten post edytował ChrisB 2.12.2009, 23:10:41


--------------------
gragieldowa.pl
Go to the top of the page
+Quote Post
darko
post
Post #5





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


No tak, a dlaczego nie podajesz nazwy pliku tylko sam folder jako destination dla funkcji move_uploaded_file questionmark.gif

Linie 15-19 zamieniłbym na to:

  1. if(is_uploaded_file($plik_tmp)) {
  2. if(move_uploaded_file($plik_tmp, $katalog."/".str_replace(" ","_",$plik_nazwa))) {
  3. echo "Plik: <strong>$plik_nazwa</strong> o rozmiarze <strong>$plik_rozmiar bajtów</strong> został przesłany na serwer!";
  4. } else {
  5. echo "Błąd przesyłania pliku!";
  6. }
  7. }


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
wyrdhamster
post
Post #6





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 1.12.2009

Ostrzeżenie: (0%)
-----


Cytat(darko @ 2.12.2009, 23:34:22 ) *
No tak, a dlaczego nie podajesz nazwy pliku tylko sam folder jako destination dla funkcji move_uploaded_file questionmark.gif

Bo myślałem ze wystarczy wskazać tylko katalog docelowy...

Dziękuję, zaraz wypróbuje poprawki... smile.gif

I działa. smile.gif Przesyła pliki jak trzeba. Jeszcze raz dzięki darko. guitar.gif

Ale pojawił się inny problem - nie robi wpisu do bazy powiązanego z uploaddem. Struktura tabeli banners:

  1. CREATE TABLE IF NOT EXISTS `banners` (
  2. `id_banner` int(5) NOT NULL AUTO_INCREMENT,
  3. `filename` varchar(30) collate utf8_bin NOT NULL,
  4. PRIMARY KEY (`id_banner`)
  5. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ;


Ten post edytował wyrdhamster 3.12.2009, 13:09:51
Go to the top of the page
+Quote Post
darko
post
Post #7





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


  1. $wpis_do_bazy = $katalog."/".str_replace(" ","_",$plik_nazwa);
  2. if(is_uploaded_file($plik_tmp)) {
  3. if(move_uploaded_file($plik_tmp, $wpis_do_bazy)) {
  4. echo "Plik: <strong>$plik_nazwa</strong> o rozmiarze <strong>$plik_rozmiar bajtów</strong> został przesłany na serwer!";
  5. } else {
  6. echo "Błąd przesyłania pliku!";
  7. }
  8. }

i dalej...
  1. $zapytanie = "INSERT INTO banners VALUES (null, '$wpis_do_bazy')";


Ten post edytował darko 3.12.2009, 14:23:29


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
wyrdhamster
post
Post #8





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 1.12.2009

Ostrzeżenie: (0%)
-----


Dziwne, ciągle nie robi nowego wpisu do bazy, choć linki przesyłają się aż miło... blinksmiley.gif Ponieważ są jakieś porblemy także ze sciagniem newsów do wyświetlenia, może problemem jest źle napisania konfiguracja połączenia? Oto skrypt connection.php:

  1. <?php
  2. /******************************************************
  3. * connection.php
  4. * konfiguracja połączenia z bazą danych
  5. ******************************************************/
  6.  
  7. function connection() {
  8. // serwer
  9. $mysql_server = "***";
  10. // admin
  11. $mysql_admin = "***";
  12. // hasło
  13. $mysql_pass = "***";
  14. // nazwa baza
  15. $mysql_db = "***";
  16. // nawiązujemy połączenie z serwerem MySQL
  17. @mysql_connect($mysql_server, $mysql_admin, $mysql_pass)
  18. or die('Brak połączenia z serwerem MySQL.');
  19. // łączymy się z bazą danych
  20. @mysql_select_db($mysql_db)
  21. or die('Błąd wyboru bazy danych.');
  22. }
  23.  
  24. ?>


Oczywisćie *** to dane prywatne, których nie ujawnię na forum. dry.gif
Go to the top of the page
+Quote Post
wyrdhamster
post
Post #9





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 1.12.2009

Ostrzeżenie: (0%)
-----


Ten skrypt, wyświetlający newsy z bazy...
  1. <?php
  2. include "connection.php";
  3. connection();
  4. $sqlcount = "SELECT COUNT(id_news) ile FROM news";
  5. $resultcount = mysql_query ($sqlcount,$conn) or die(mysql_error());
  6. $rowcount = mysql_fetch_array($resultcount);
  7. $count = $rowcount["ile"];
  8. $l2 = 10;
  9. if (isset($_GET["l1"])){
  10. $l1 = $_GET["l1"];
  11. }
  12. else {
  13. $l1 = 0;
  14. }
  15. $sql = "SELECT news_name, user_name, date, n.info info
  16. FROM news n JOIN users u ON n.user_id = u.id_user
  17. ORDER BY date DESC
  18. LIMIT ".$l1.", ".$l2;
  19. $result = mysql_query ($sql,$conn) or die(mysql_error());
  20. $cont = "";
  21. while ($row = mysql_fetch_array($result)) {
  22. $cont .= "<div class='news'><h3>";
  23. $cont .= $row["news_name"];
  24. $cont .= "</h3><div><span class='user'>";
  25. $cont .= $row["user_name"];
  26. $cont .= "</span><span class='date'>";
  27. $cont .= $row["date"];
  28. $cont .= "</span></div><div class='info'>";
  29. $cont .= $row["info"];
  30. $cont .= "</div></div>";
  31. }
  32. echo $cont;
  33. if (($l1+10) < $count){
  34. echo "<a href='news.php?l1=".($l1+10)."'>zobacz wcześniejsze... </a>";
  35. }
  36. if ($l1 > $count){
  37. echo "<a href='news.php?l1=".($l1-10)."'>zobacz późniejsze... </a>";
  38. }
  39.  
  40. ?>


Generuje tylko takie ostrzeżenie:

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /home/klient.dhosting.pl/adkl/psw/news.php on line 5

Może rzeczywiście coś jest nie tak z połączeniem z bazą, z connection.php?

Cytat
  1. <?php
  2. function lacz_bd() {
  3. $wynik = new mysqli('localhost', 'root', '' , 'test2');
  4. if (!$wynik) {
  5. throw new Exception('Połączenie z serwerem bazy danych nie powiodło się');
  6. } else {
  7. return $wynik;
  8. }
  9. }
  10.  
  11. ?>


Zakładając że miało być w kodzie mysqli('<serwer>', '<user>', '<hasło>' , '<baza>'), to nadal nie chodzi to połaczenia. Teraz dowala jeszcze taki błąd:

Warning: mysqli::mysqli() [mysqli.mysqli]: (HY000/2003): Can't connect to MySQL server on 'air.dhosting.pl' (111) in /home/klient.dhosting.pl/adkl/psw/connection.php on line 26

(Taki duzy numer linii, bo wcześniejszą funkcje za komentowałem, i wkleiłem twoją, onkel. )
Go to the top of the page
+Quote Post
bim2
post
Post #10





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


Czytaj błędy jakie ci wyskakują, a jak ich nie rozumiesz to naucz się angielskiego.

Can't connect to MySQL server on 'air.dhosting.pl' -> Nie można się połączyć z serwerem MySQL 'air.dhosting.pl'

Rozumiesz w czym tkwi problem już?


--------------------
Go to the top of the page
+Quote Post
wyrdhamster
post
Post #11





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 1.12.2009

Ostrzeżenie: (0%)
-----


Problem był w tym że nie łaczyłem się z baza SQl tylko FTPem. wstydnis.gif

Kumpel jednak zapropował inny skrypt łączenia się z bazą.
  1. <?php
  2. $conn = mysql_connect("<serwer_sql>", "<user>", "<hasło>")
  3. OR die(mysql_error());
  4. $db = mysql_select_db("<baza>")
  5. OR die(mysql_error());
  6. mysql_query("SET NAMES 'latin2'");
  7. ?>

Go to the top of the page
+Quote Post
darko
post
Post #12





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Lepiej mysql_query("SET NAMES 'utf8'"); jak już.

Daj jeszcze print_r(mysql_connect($mysql_server, $mysql_admin, $mysql_pass)); powinno być resource id# jak nie ma, to nie jesteś w ogóle połączony

Ten post edytował darko 5.12.2009, 17:22:22


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
wyrdhamster
post
Post #13





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 1.12.2009

Ostrzeżenie: (0%)
-----


Okej, wprowadziłem poprawke odnośnie UTFa.

Mam teraz skrypt, niby nie bezpośrednio powiązny z tematem, ale jego uzupełninie - chodzi o skrypt wyświetlający obrazki z pomocą bazy danych i pozwalający dany z nich wywalić, zarówno z serwera jak i bazy. Tutaj jest kod:
  1. <?php
  2. require "conn.inc.php";
  3. $path = str_replace('/dashboard/banners_delete.php','',$_SERVER['PHP_SELF']);
  4. $sciezka = 'psw'; // można wywalić później
  5. $katalog = "$path/banners";
  6.  
  7. $banners = mysql_query('SELECT * FROM banners', $conn) or die("Nie udało się pobrać danych z bazy") ;
  8.  
  9. while($row = mysql_fetch_assoc($banners)){
  10. foreach($row as $key => $value) {
  11. $$key = $value;
  12. }
  13. $link="$katalog/$filename";
  14. echo "<div class='banner'><img src='$link' alt='$filename' ></br>";
  15. echo '<form name="usun" id="usun" method="post" action="banners_delete.php"/>';
  16. echo '<input type=hidden name=id value="$id" />';
  17. echo '<input type=submit value="Usuń" onclick="return usun();"/>';
  18. echo '</form></div>';
  19. }
  20.  
  21. function usun()
  22. {
  23. $numer=$id;
  24. unlink("$katalog/$filename");
  25. $sql = "DELETE FROM `banners` WHERE `id_banner`='$numer'";
  26. return mysql_query($sql, $conn) or die("Nie udało się usunąć danych z bazy") ;
  27. }
  28. ?>


Obrazki się wyświetlają, natomiast przycisk nie usuwa wpisu - wiem ze coś z nimi nie tak, ale nie jestem pewien co. Pewnie przesyłanie tego id do funkcji usun().
Go to the top of the page
+Quote Post
darko
post
Post #14





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Prawdopodobnie funkcja usun nie widzi zmiennych:

$numer, $id, $katalog oraz $filename

Nie wiem dokładnie gdzie definiujesz te zmienne w każdym razie powinieneś albo przekazać je do funkcji usuń albo uczynić globalnymi wewnątrz funkcji:

global $numer, $id, $katalog, $filename;


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 12:10