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. (IMG:style_emoticons/default/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
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 (IMG:style_emoticons/default/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. }
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 (IMG:style_emoticons/default/questionmark.gif)

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

Dziękuję, zaraz wypróbuje poprawki... (IMG:style_emoticons/default/smile.gif)

I działa. (IMG:style_emoticons/default/smile.gif) Przesyła pliki jak trzeba. Jeszcze raz dzięki darko. (IMG:style_emoticons/default/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
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... (IMG:style_emoticons/default/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. (IMG:style_emoticons/default/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. (IMG:style_emoticons/default/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
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;
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 24.12.2025 - 16:32