Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Problem ze skryptem uploadu
Forum PHP.pl > Forum > Przedszkole
mihipoznan
Mam prosty skrypt uploadu zdjęć.. jednak gdy wgrywam pliki, które mają nazwę np. ze spację to już nie działa..(tworzenie linków)..co jest źle ? co byście dodali do tego formualarza ?
Kod
<form method="post" action="upload.php" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="100000">

Wybierz plik który chcesz dodać do oferty : <br>

<input type="file" name="obrazki" size="40"><br>
<input type="submit" value="Wgraj plik">

  1. <?
  2. move_uploaded_file($_FILES['obrazki']['tmp_name'],"obrazki/".$_FILES['obrazki']['name']);
  3.  
  4. $_SESSION['name'] = 'obrazki/'.$_FILES['obrazki']['name'];
  5. echo "<center><img height= '81 ' width= '92 ' src='".$_SESSION['name']."'><br><br>
  6. <a href= \"javascript:opener.location.reload();window.close() \"><button>dodaj zdjęcie</button></a>
  7. ";
  8. ?>
  9. </script>
  10. </head>
KCG
Twórz nazwę z md5(), np. md5($_FILES['obrazki']['name']; Choć jeśli ktoś doda o takiej samej nazwie to zostaną zastąpione, więc trochę lipa. Ja najczęściej dodaję do bazy i wtedy w nazwie mam też id, dlatego nic mi się nie pokrywa winksmiley.jpg
mihipoznan
Ooo..dobry pomysł z tym md5 smile.gif Z pokrywaniem nazw to nie ma problemu bo do każdej oferty mam id wiec każde zdjęcie ma swoją ofertę więc też id smile.gif A jak ustalić żeby mogły być uploadowane tylko pliki .jpg .gif i .png ? Hmm.. i gdzie dokładnie wpisać to md5 ?

  1. <?
  2. move_uploaded_file($_FILES['obrazki']['tmp_name'],"obrazki/"md5(.$_FILES['obrazki']['name']);
  3.  
  4. $_SESSION['name'] = 'obrazki/'.$_FILES['obrazki']['name'];
  5. echo "<center><img height= '81 ' width= '92 ' src='".$_SESSION['name']."'><br><br>
  6. <a href= \"javascript:opener.location.reload();window.close() \"><button>dodaj zdjęcie</button></a>
  7. ";
  8. ?>
  9. </script>
  10. </head>


tak ?
KCG
Ale jeśli ktoś wgra taką samą nazwę? Bo z tego, co widzę wszystko idzie do jednego folderu. A md5() dla jasności dla danego słowa, np. 'coś', zawsze zwróci to samo (32-znakowy ciąg).
Może wcześniej zrób zmienną z nazwą:
  1. <?php
  2. $image = 'obrazki/'.md5($_FILES['obrazki']['name']);
  3. move_uploaded_file($_FILES['obrazki']['tmp_name'],$image);
  4.  
  5. $_SESSION['name'] = $image; // btw. po co to?
  6. echo '<center><img height= "81" width= "92" src="'.$_SESSION['name'].'" /><br /><br />
  7. <a href= "javascript:opener.location.reload();window.close();"><button>dodaj zdjęcie</button></a>';
  8. ?>

I jeśli nie musisz nie używaj ", tylko ', bynajmniej mnie tak uczyli biggrin.gif winksmiley.jpg

A co do rozpoznawania typu to getimagesize(); i manual zaprasza smile.gif
Wieviór
Raczej nie md5(), bo co tu chcesz szyfrować? Jeśli dodajesz do bazy to zrób sobie coś takiego, że w pole obrazek i w nazwie pliku dawaj:

  1. <?php
  2. $kod = str_shuffle("qwertyuiopasdfghjklzxcvbnm1234567890");
  3. ?>


Opcji jest 36!, przy czy 11! to już więcej niż jest polaków (m.w.) ;]

Możesz powiedzmy zrobić cyferki i z 5 literek, to będzie 13! możliwości (wystarczająco dużo, żeby cały świat miał po jednym obrazku ;]), ew. jak się boisz, że się coś powtórzy to zrób if'a, który sprawdzi czy nie ma przypadkiem już takiego kod w bazie i wygeneruje nowy.
KCG
Ale masz stały ciąg do bazy na przykład i ładne pole char(32) tongue.gif
A poważnie to masz jakieś przeciwwskazania do md5() w tym przypadku? Pytam, bo używam, a może lepiej nie:)
Wieviór
Cytat(KCG @ 26.03.2008, 21:43:00 ) *
Ale masz stały ciąg do bazy na przykład i ładne pole char(32) tongue.gif


Tu masz stały ciąg do bazy i ładne pole char(36) lub char(11) ;]

Cytat(KCG @ 26.03.2008, 21:43:00 ) *
A poważnie to masz jakieś przeciwwskazania do md5() w tym przypadku? Pytam, bo używam, a może lepiej nie:)


Przeciwwskazań raczej nie mam, tyle tylko, że jak ktoś wgra z tą samą nazwą (a przecież może się zdarzyć), to zastąpi plik, a w bazie będą dwa takie same kody. Natomiast przy str_shuffle jest to praktycznie nie możliwe ;]
KCG
No to prawda, ale zaznaczyłem to smile.gif
Ja robię w ten sposób, że do nazwy dodaję id czyli md5('nazwa'.$id), przy czym $id zawiera PRIMARY KEY z bazy, więc jest niepowtarzalne winksmiley.jpg
mihipoznan
KCG - po to że na innej stonie odczytuję tą sesję i dodaję do konkretnego wiersza w tabeli smile.gif

Wieviór, tylko że ja dodaję do bazy na innej stronie i link przenoszę w sesji biggrin.gif.. więc

  1. <?
  2. move_uploaded_file($_FILES['obrazki']['tmp_name'],"obrazki/".$_FILES['obrazki']['name']);
  3.  
  4. $_SESSION['name'] = 'obrazki/'.$_FILES['obrazki']['name'];
  5. echo "<center><img height= '81 ' width= '92 ' src='".$_SESSION['name']."'><br><br>
  6. <a href= \"javascript:opener.location.reload();window.close() \"><button>dodaj zdjęcie</button></a>
  7. ";
  8. ?>


i jak to
  1. <?php
  2. $kod = str_shuffle("qwertyuiopasdfghjklzxcvbnm1234567890");
  3. ?>
wstawić żeby przenieść to gdzie indziej za pomocą sesji ?
  1. <?php
  2. $_SESSION['kod'] = str_shuffle("qwertyuiopasdfghjklzxcvbnm1234567890");
  3. ?>

tak ? zamiast tego ['obrazki'] ?
Wieviór
Stwórz tą zmienną kod już na tej drugiej stronie i:

  1. <?php
  2.  
  3. $kod = str_shuffle("abcde1234567890");
  4.  
  5. move_uploaded_file($_FILES['obrazki']['tmp_name'],"obrazki/".$kod);
  6.  
  7. $_SESSION['name'] = 'obrazki/'.$kod;
  8.  
  9. echo '<center><img height="81" width="92" src="'.$_SESSION['name'].'"><br><br>
  10. <a href="javascript:opener.location.reload();window.close()"><button>dodaj zdjęcie</button></a>';
  11. ?>
mihipoznan
Ahaaa ! biggrin.gif Wielkie dzięki smile.gif
nospor
Ja tylko w kwestii uswiadomienia kolegi KCG:
Cytat
Ja robię w ten sposób, że do nazwy dodaję id czyli md5('nazwa'.$id), przy czym $id zawiera PRIMARY KEY z bazy, więc jest niepowtarzalne

Jakbys zrobil tak:'nazwa'.$id to bys mial niepowarzalne.
Robiac z tego jeszcze md5 niestety nie masz juz niepowtarzalnego. Polecam lekture md5 winksmiley.jpg
KCG
Wieviór zdaje się, że jeszcze rozszerzenia nie dodał smile.gif
nospor, tzn. że jest możliwość takiego samego hashu dla różnych ciągów znaku? (chyba lekko w temacie to jest;p)
nospor
Cytat
nospor, tzn. że jest możliwość takiego samego hashu dla różnych ciągów znaku
oczywiscie. Im wiecej bedziesz mial danych tym wieksze bedzie tego prawdopodobienstwo.
KCG
Dzięki:)
mihipoznan
Hmm.. a jak dodać to rozszerzenie ? Tak żeby obsługiwało gif i jpg..

coś w tym stylu ?
  1. <?php
  2.  
  3.  $kod = str_shuffle("abcde1234567890");
  4.  $rozszerzenie = (".jpg");
  5.  
  6.  move_uploaded_file($_FILES['obrazki']['tmp_name'],"obrazki/".$kod.$rozszerzenie);
  7.  
  8.  $_SESSION['name'] = 'obrazki/'.$kod.$rozszerzenie;
  9.  
  10.  echo '<center><img height="81" width="92" src="'.$_SESSION['name'].'"><br><br>
  11.  <a href="javascript:opener.location.reload();window.close()"><button>dodaj zdjęcie</button></a>';
  12.  ?>


tylko że nie działa..
KCG
Ale czemu w nawiasie to .jpg? Daj $rozszerzenie = '.jpg';
A jeśli chcesz więcej typów obsłużyć to poczytaj o getimagesize(), jak wspomniałem wcześniej smile.gif
mihipoznan
ok dzięki biggrin.gif
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.