Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PROBLEM - skrypt ladowania obrazka na serwer przez input file
Forum PHP.pl > Forum > PHP
Ardo
Witam mam taki maly problem i nie moge dosc dlaczego nie dziala, mi sie wydaje ze wszystko jest OK ale jednak cos jest nie tak, moze ktos zerknie i da znac wczym jest problem. Oglnie zachowanie tego skryptu jest takie, laduje jakis plik na serwer w bazie on jest zapisany ale do okreslonego katalgu np reklama nie zostaje zapisany, moze ktos widzi powod dlaczego nie chce sie zapisac na serwer.

ponizej kod

<?php
if(isset($edycja) && $co == "2"){
$url = strip_tags($_POST['url']);
$q = mysql_fetch_array(mysql_query('SELECT * FROM reklama ORDER BY id DESC LIMIT 0,1'));
$i = $q['id'];
$i++;
$path = pathinfo($_FILES['baner']['name']);
$roz = $path['extension'];
$plik = '/reklama/' . $i . '.' . $roz;
$uploaddir = '/katalogA' . $plik;
$link ='http://jakis adres/katalogA/reklama/' . $i . '.' . $roz;
if(is_uploaded_file($_FILES['baner']['tmp_name'])) {
move_uploaded_file($_FILES['baner']['tmp_name'], $uploaddir);
//

echo $uploaddir . '<br />';

//
}
else{
echo 'error';
exit();
}

mysql_connect("localhost","webnet_moto","vaiper");
mysql_select_db("webnet_moto");
$zapyt = 'INSERT INTO reklama VALUES(\'\', \'' .$baner. '\', \'' .$url. '\')';
$query = mysql_query($zapyt);
if($query){
echo '<br />dodano do bazy <br/>';
}

}


?>

zgory dzieki za wszelkie rady czy pomysly.
pyro
Jak dodasz BBCode to może ktoś będzie chciał sprawdzić, a mi się rzuciło w oczy:


  1. <?php
  2. $url = strip_tags($_POST['url']);
  3.  
  4. $zapyt = 'INSERT INTO reklama VALUES('', '' .$baner. '', '' .$url. '')';
  5. ?>


strip_tags nie wycina apostrofów/cudzysłowów smile.gif, podatność na SQL Injection.
Ardo
dziekuje za pomoc ale nie calkiem oto chodzi. tak jak pisalem do bazy wczytuja sie dane ale plik nie jest przeslany na serwer i tu jest problem, co nie dziala ? ze nie chce przenis pliku na serwer do konretnego katalogu.
sowiq
Cytat
<form enctype="multipart/form-data" ... >
ustawione?
Ardo
form enctype="multipart/form-data" ... >

tak ustawione dalej nie dziala i nie mam pojecia co podsylam raz jezcze pelniejszy kod:

<form enctype="multipart/form-data" action="?id=baner" method="post">
<table align=center WIDTH="500" class="tab1"> <tr><td colspan=2>
<input type=hidden name=id value=baner>
<input type=hidden name=co value=1>
<input type=hidden name=edycja value=true></td></tr>

<tr><td>Dodaj button (w:145):</td><td align=left> <input name="button" type="file" /></td></tr>
<tr><td>Link buttonu: </td><td align=left><input type="text" name="url" /></td></tr>
<tr><td colspan=2 align=center><input type=submit name=dodaj value=" DODAJ " class=btn></form></td></tr>
</table>
<?php
if(isset($edycja) && $co =="1"){
$url = strip_tags($_POST['url']);
$q = mysql_fetch_array(mysql_query('SELECT * FROM button ORDER BY id DESC LIMIT 0,1'));
$i = $q['id'];
$i++;
$path = pathinfo($_FILES['button']['name']);
$roz = $path['extension'];
$plik = '/button/' . $i . '.' . $roz;
$uploaddir = 'http://www.webnet.webr.pl/automoto' . $plik;
$link = 'http://www.webnet.webr.pl/automoto/button/' . $i . '.' . $roz;
if(is_uploaded_file($_FILES['button']['tmp_name'])) {
move_uploaded_file($_FILES['button']['tmp_name'], $uploaddir);
//
echo $uploaddir . '<br />';


//
}
else{
echo 'error';
exit();
}
if($roz == "swf"){
$baner = '<object type="application/x-shockwave-flash" data="' .$link. '" width="145"><param name="movie" value="' .$link. '" /></object>';
}
else{
$baner = '<img src="' .$link. '" style="border:0px;" width="145" alt="automoto" border="0" />';
}

mysql_connect("localhost","xxx","yyy");
mysql_select_db("xxxx");
$zapyt = 'INSERT INTO button VALUES(\'\', \'' .$baner. '\', \'' .$url. '\')';
$query = mysql_query($zapyt);
if($query){
echo '<br />dodano do bazy<br />';
}
}
?>

podkreslam przesylanie do bazy dziala ale nie dziala przeslanie pliku czyli banera na serwer do katalogu.
i nie mam pojecia dlaczego sad.gif
sowiq
Zrób sobie:
1. print_r($_FILES);
2. if(is_uploaded_file($_FILES['baner']['tmp_name'])) echo $_FILES['baner']['tmp_name'];

i zobacz co się wydrukuje.
Ardo
1. print_r($_FILES);
2. if(is_uploaded_file($_FILES['baner']['tmp_name'])) echo $_FILES['baner']['tmp_name'];

to to chyba to samo co to:
$uploaddir = 'http://www.webnet.webr.pl/automoto' . $plik;
$link = 'http://www.webnet.webr.pl/automoto/button/' . $i . '.' . $roz;
if(is_uploaded_file($_FILES['button']['tmp_name'])) {
move_uploaded_file($_FILES['button']['tmp_name'], $uploaddir);
//
echo $uploaddir . '<br />';

//
}

tak czy inaczej odpowiedz mam taka z tego
http://www.webnet.webr.pl/automoto/button/25.jpg

dodano do bazy

tylko ze tego pliku nie ma na serwerze a w bazie jest





moge podeslac plik jesli wczyms by to pomoglo

wstawilem
1. print_r($_FILES);
2. if(is_uploaded_file($_FILES['baner']['tmp_name'])) echo $_FILES['baner']['tmp_name'];

i takainformacje dostalem

Array ( [button] => Array ( [name] => baner_145.jpg [type] => image/pjpeg [tmp_name] => /home/webnet/tmp/phpxPBaho [error] => 0 [size] => 17334 ) )
fedek6
Ścieżkę do tej funkcji podaje się wg. mojej wiedzy, bez wyszczególnienia protokołu smile.gif
  1. <?php
  2. $uploaddir = 'http://www.webnet.webr.pl/automoto' . $plik;
  3. ?>


zmień na:

  1. <?php
  2. $uploaddir = './automoto' . $plik;
  3. ?>


Albo coś z:
  1. <?php
  2. $uploaddir = dirname(__FILE__).'/automoto' . $plik;
  3. ?>
Ardo
zmienilem troche twoj kod na taki:
if( is_uploaded_file( $_FILES['button']['tmp_name'] ) )
{
$strUploadDir = 'http://www.webnet.webr.pl/automoto/button/' . $_FILES['button']['name'];
if( move_uploaded_file( $_FILES['button']['tmp_name'], $strUploadDir ) )
{ echo 'Plik został pomyślnie uploadowany! <br />'; }
else
{ echo 'Upload pliku nie powiódł się!'; }
echo 'Dodatkowe informacje o uploadowanym pliku: <pre>' . print_r( $_FILES, true ) . '</pre>';
}
else
{ echo 'Wystąpił błąd podczas wysyłania pliku na serwer!'; }

=====================================
odpowiedz taka dostaje:
Upload pliku nie powiódł się!Dodatkowe informacje o uploadowanym pliku: Array( [button] => Array ( [name] => AleBiba_468x62.swf [type] => application/x-shockwave-flash [tmp_name] => /home/webnet/tmp/phpMgwlCD [error] => 0 [size] => 20245 ))
dodano do bazy
==========================================
sowiq
  1. Array ( [button] => Array ( [name] => baner_145.jpg [type] => image/pjpeg [tmp_name] => /home/webnet/tmp/phpxPBaho [error] => 0 [size] => 17334 ) )

Wnisek z tego jest bardzo prosty. Nie istnieje coś takiego jak $_FILES['baner']['tmp_name'], tylko $_FILES['baner']['button']['tmp_name'] itp.
Zapewne w formularzu masz:
  1. <input type="file" name="baner[buton]">
?
Ardo
NIESTETY TO TEZ NIE POMOGLO
1
2
3
4

<?php
$uploaddir = dirname(__FILE__).'/automoto' . $plik;
?>
sad.gif DALEJ NIE LADUJE NA SERWER PLIKU
sowiq
Pokaż kod HTML formularza.
Ardo
W FORMULARZU MAM

<input name="button" type="file" />


<form enctype="multipart/form-data" action="?id=reklama" method="post">

<input type=hidden name=id value=reklama>
<input type=hidden name=co value=1>
<input type=hidden name=edycja value=true>

<input name="button" type="file" />
<input type="text" name="url" />
<input type=submit name=dodaj value=" DODAJ " class=btn>
</form>
sowiq
Nie:
$path = pathinfo($_FILES['baner']['name']);

Tylko:
$path = pathinfo($_FILES['button']['name']);

I tak samo wszędzie. W HTML masz name="button", to czemu w PHP używasz $_FILES['baner'] ?
Ardo
hmm tylko ja w kodzie nie mam
$path = pathinfo($_FILES['baner']['name']);


albo ja tego nie widze
ja mam :
$path = pathinfo($_FILES['button']['name']);
fedek6
A próbowałeś z pełną ścieżką przez $_SERVER['DOCUMENT_ROOT'] oczywiście rozbudowując ją o Twój folder z obrazkami?

Ewentualnie uprawnienia do folderu z obrazkami.
sowiq
Ok, po kolei:

1. isset($edycja) => isset($_POST['edycja'])
2. $uploaddir = 'http://www.webnet.webr.pl/automoto' . $plik; => $uploaddir = '/automoto' . $plik;
3. echo $uploaddir . '<br />'; => echo $link . '<br />';

Zrób te 3 zmiany, ustaw na początku pliku error_reporting(E_ALL) i napisz co się dzieje.
Ardo
chyba masz racje w dobrym kierunku naprowadiziles ale mam taki problem teraz

dostaje informacje ze:
Plik został pomyœlnie uploadowany!
Dodatkowe informacje o uploadowanym pliku: ......

tylko ze teraz szukam na serwerze czy naprawde plik zostal preniesiony i nic nie ma go
napsialem taki kod:
===============
$i = $q['id'];
$i++;
$path = pathinfo($_FILES['button']['name']);
$roz = $path['extension'];
$plik = '/button/' . $i . '.' . $roz;
$r = $_SERVER['DOCUMENT_ROOT'];
$uploaddir = $r.'/automoto' . $plik;

============
fedek6
Sprawdź jeszcze czy ścieżka uzyskana w ten sposób na pewno jest poprawna. Podaj:
  1. <?php
  2. echo $_SERVER['DOCUMENT_ROOT'].'/automoto';
  3. ?>
sowiq
  1. <?php
  2.  
  3. $dir = $_SERVER['DOCUMENT_ROOT'] . '/automoto/button/';
  4.  
  5. $path = pathinfo($_FILES['button']['name']);
  6. $id = '1'; // id pobrane z bazy
  7. $plik = $id . '.' . $path['extension'];
  8.  
  9. if(move_uploaded_file( $_FILES['button']['tmp_name'], $path . $plik )){
  10.    echo 'ok';
  11. }
  12. ?>
Ardo
dziekuje wszystim udalo sie zastosowalem to:

===============
$i = $q['id'];
$i++;
$path = pathinfo($_FILES['button']['name']);
$roz = $path['extension'];
$plik = '/button/' . $i . '.' . $roz;
$r = $_SERVER['DOCUMENT_ROOT'];
$uploaddir = $r.'/automoto' . $plik;

============
brakowalo mi jeszcze tego :
$link = './automoto/button/' . $i . '.' . $roz;

==========

zapomanilem ze mam jeszcze w kodzie to:
$baner = '<img src="' .$link. '" style="border:0px;" width="145" alt="automoto" border="0" />';

i brakowalo zmiennej $link
==========

DZIEKUJE ZA POMOC smile.gif dziala
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.