Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Upload większej ilości plików, Więcej niż jedna fotka
Barcelona
post 21.07.2010, 00:23:50
Post #1





Grupa: Zarejestrowani
Postów: 322
Pomógł: 15
Dołączył: 29.01.2010

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


Witam, niedawno rozwiązałem jeden problem i od razu natknąłem się na kolejny.
Z tego co mi wiadomo serwer na wykonanie jednego skryptu ma 30 sekund i dlatego stwarza to pewne problemy.
Planuje do mojego formularza dodać możliwość uploadu zdjęć w ilości większej niż 1.
Zatem jeżeli dam możliwość uploadu max 5 zdjęć i jeżeli user będzie wgrywał jednocześnie 5 zdjęć to wtedy serwer nie wyrobi się w czasie (wszystko zależy od łącza oczywiście, ale zakładam czarny scenariusz).
A zatem moje pytanko brzmi jak ten problem rozwiązać ?

Oto kod formularza:

  1. <?
  2.  
  3.  
  4. function f_rand($ile) {
  5. for ($i=1; $i<=$ile; $i++)
  6. {$l_rand .= dechex(mt_rand());}
  7. return $l_rand;
  8. }
  9.  
  10.  
  11. function resize($foto, $szerokosc, $folder, $napis) {
  12.  
  13. $fotos = "./tmp/".$foto;
  14. $mini = $folder."/".$foto;
  15. if (!file_exists($mini)) {
  16. $img = imagecreatefromjpeg($fotos);
  17. $width = imagesx($img); // szerokosc jpga
  18. $height = imagesy($img); // wysokosc jpga
  19.  
  20. if ($width > $szerokosc || $height > $szerokosc){
  21. //poziomy / szerokosc
  22. if ($width>=$height) {$width_mini = $szerokosc;
  23. $x = $width/$width_mini;
  24. $height_mini = $height/$x;
  25. $litery_wielkosc = $width/60;}
  26.  
  27. //pionowy / wysokosc
  28. if ($width<$height) {$height_mini = $szerokosc;
  29. $x = $height/$height_mini;
  30. $width_mini = $width/$x;
  31. $litery_wielkosc = $height/60;}
  32.  
  33. $img_mini = imagecreatetruecolor($width_mini, $height_mini);
  34. }
  35. else
  36. {
  37. $img_mini = $img;
  38. }
  39. $txt = $napis;
  40. $fontpath = realpath('.');
  41. $kolor_tla = imagecolorallocate ( $img, 255, 255, 255 );
  42.  
  43. imagecopyresampled($img_mini, $img, 0, 0, 0, 0, $width_mini , $height_mini, $width, $height);
  44. imagejpeg($img_mini, $mini, 100);
  45. @imagedestroy($img);
  46. @imagedestroy($img_mini);
  47. }
  48. }
  49.  
  50.  
  51.  
  52. if ($_SESSION["zalogowany"]=="tak") {
  53. include('menu.php');
  54.  
  55. $tytul = mysql_real_escape_string (trim($_POST['tytul']));
  56. $data = mysql_real_escape_string (trim($_POST['data']));
  57. $tresc = $_POST['tresc'];
  58. $stan = mysql_real_escape_string (trim($_POST['stan']));
  59. $rodzaj = mysql_real_escape_string (trim($_POST['rodzaj']));
  60. $marka = mysql_real_escape_string (trim($_POST['marka']));
  61. $model = mysql_real_escape_string (trim($_POST['model']));
  62. $rocznik = mysql_real_escape_string (trim($_POST['rocznik']));
  63. $miejsca = mysql_real_escape_string (trim($_POST['miejsca']));
  64. $klimatyzacja = mysql_real_escape_string (trim($_POST['klimatyzacja']));
  65. $rejestracja = mysql_real_escape_string (trim($_POST['rejestracja']));
  66. $cena = mysql_real_escape_string (trim($_POST['cena']));
  67. $ul_plik = mysql_real_escape_string (trim($_POST['foto']));
  68.  
  69.  
  70. if (strlen($tytul)>2) {
  71.  
  72. ////////////////////////////////////////
  73.  
  74. //ustawienie wielkosci zmniejszanych obrazow
  75. $w_1 = 175;
  76. $w_2 = 400;
  77.  
  78. if ($_FILES){
  79. foreach( $_FILES as $ul_plik )
  80. {
  81. if( is_uploaded_file( $ul_plik['tmp_name'] ) )
  82. {
  83. $rand = f_rand(3);
  84.  
  85. $new_name = $rand.".jpg";
  86. $tmp_name = $ul_plik['tmp_name'];
  87. $name = $ul_plik['name'];
  88.  
  89. copy($tmp_name, './tmp/'.$new_name);
  90.  
  91.  
  92. resize($new_name,$w_1,"./img/mini/", "");
  93. resize($new_name,$w_2,"./img/", "");
  94.  
  95.  
  96. unlink('./tmp/'.$new_name);
  97.  
  98. INSERT INTO ogloszenia (tytul, data, tresc, stan, rodzaj, marka, model, rocznik, miejsca, klimatyzacja, rejestracja,obrazek,cena)
  99. VALUES ('$tytul','$data','$tresc','$stan','$rodzaj','$marka','$model','$rocznik','$miejsca','$klimatyzacja','$rejestracja','$rand','$cena')
  100. ");
  101.  
  102.  
  103. }
  104. else {
  105. INSERT INTO ogloszenia (tytul, data, tresc, stan, rodzaj, marka, model, rocznik, miejsca, klimatyzacja, rejestracja,obrazek,cena)
  106. VALUES ('$tytul','$data','$tresc','$stan','$rodzaj','$marka','$model','$rocznik','$miejsca','$klimatyzacja','$rejestracja','nazwa','$cena')
  107. ");
  108. }
  109. }
  110.  
  111. }
  112.  
  113.  
  114. echo "
  115. <br><div class=\"potwierdzenie\"><center>Ogłoszenie zostało dodane</center>
  116. </div>";
  117.  
  118.  
  119. }
  120. $data = date("Y-m-d H:i:s");
  121. echo <<<KONIEC
  122. <br>
  123. <form action="" method="post" enctype="multipart/form-data" class="uniForm">
  124.  
  125. <fieldset><legend>Dane Samochodu</legend>
  126. <div class="ctrlHolder">
  127.   <label for="foto">Dodaj zdjęcie do ogłoszenia:</label><br>
  128.   <input type="file" name="foto"><br>
  129.   <label for="marka">Podaj marke samochodu:</label>
  130.   <input type="text" name="marka" style="width:100%;" class="textInput small" />
  131.   <label for="model">Podaj model samochodu:</label>
  132.   <input type="text" name="model" style="width:100%;" class="textInput small" />
  133.   <label for="rocznik">Podaj rocznik samochodu:</label>
  134.   <input type="text" name="rocznik" style="width:100%;" class="textInput small" />
  135.   <label for="miejsca">Podaj ilość miejsc siedzących:</label>
  136.   <input type="text" name="miejsca" style="width:100%;" class="textInput small" />
  137.   <label for="klimatyzacja">Klimatyzacja:</label><br>
  138.   <select id="" name="klimatyzacja"><optgroup label='Wybierz jedną opcję'><option value='TAK'>TAK</option><option value='NIE'>NIE</option></optgroup></select><br>
  139.   <label for="rejestracja">Podaj rejestracje samochodu*:</label>
  140.   <input type="text" name="rejestracja" style="width:100%;" class="textInput small" />
  141.   </div></fieldset>
  142.   <fieldset><legend>Ogłoszenie</legend>
  143. <div class="ctrlHolder">
  144.   <label for="tytul">Podaj tytuł ogłoszenia:</label>
  145.   <input type="text" name="tytul" style="width:100%;" class="textInput small" />
  146.   <label for="model">Podaj date ogłoszenia:</label>
  147.   <input type="text" name="data" style="width:100%;" class="textInput small" value="$data" />
  148.   <label for="rocznik">Napisz treść ogłoszenia:</label><br>
  149.   <textarea name="tresc" id="editor"></textarea><br>
  150. KONIEC;
  151. ?>
  152. <script type="text/javascript">
  153. //<![CDATA[
  154.  
  155. CKEDITOR.replace( 'editor',
  156. {
  157. fullPage : true
  158. });
  159.  
  160. //]]>
  161. </script>
  162. <?
  163. echo <<<KONIEC
  164. <label for="cena">Podaj cene (zł):</label>
  165.   <input type="text" name="cena" style="width:100%;" class="textInput small" />
  166. </div></fieldset>
  167. <fieldset><legend>Informacje dodatkowe</legend>
  168. <div class="ctrlHolder">
  169. <p class="label">
  170.   Wybierz rodzaj ogłoszenia, oraz czy ma on zostać wyświetlony na stronie
  171.   </p><table width="100%">
  172.  
  173.  
  174. <tr><td align="middle"><ul class="alternate">
  175.   <li><label for="rodzaj" align="top">Rodzaj <select id="" name="rodzaj"><optgroup label='Wybierz jedną opcję'><option value='wynajem_autobusow'>Wynajem autobusów</option><option value='wynajem_busow'>Wynajem busów</option><option value='sprzedaz_busow'>Sprzedaż busów</option><option value='transport_ludzi'>Transport ludzi</option></optgroup></select></label></li></td><td align="middle">
  176.   <li><label for="stan" align="middle">Stan <select id="" name="stan"><optgroup label='Aktualne'><option value='1'>Ogłoszenie widoczne</optgroup><optgroup label='Wybierz jedną opcję'><option value='1'>Ogłoszenie widoczne</option><option value='0'>Ogłoszenie niewidoczne</option></optgroup></select></label></li>
  177.   </ul></td></tr></table>
  178.   </div></fieldset>
  179.   <div class="buttonHolder">
  180. <input type="submit" value=" wyślij" class="primaryAction" />
  181. </div>
  182. KONIEC;
  183. }
  184. else {
  185. echo "<div class=\"potwierdzenie\"><center>Proszę się zalogować!</center>
  186. </div>";
  187.  
  188. }
  189.  
  190. ?>
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
evolucja
post 21.07.2010, 00:37:35
Post #2





Grupa: Zarejestrowani
Postów: 362
Pomógł: 27
Dołączył: 14.09.2009

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


Przepraszam bardzo, ale co ma czas wgrywania plików do czasu wykonywania skryptu? No, chyba, że masz na myśli problem w którym serwer dostanie 20 zdjęć i ich obróbka zajmie mu dłużej niż 30 sekund.

Skrypt zostaje uruchomiony dopiero wtedy, jak całość 'od użytkownika' zostanie wysłana. W twoim mniemaniu skrypt zaczyna działać(przerabiać zdjęcia) jeszcze zanim całkowicie je odebrał winksmiley.jpg Inaczej nie potrafię tego wytłumaczyc.

Ten post edytował evolucja 21.07.2010, 00:45:37


--------------------
zmoderowano - waga i rozmiar
Go to the top of the page
+Quote Post
Barcelona
post 21.07.2010, 00:54:51
Post #3





Grupa: Zarejestrowani
Postów: 322
Pomógł: 15
Dołączył: 29.01.2010

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


Jak w formularzu wskaże lokalizacje do 5 fotek i wcisnę przycisk wyślij to wtedy zaczyna wykonywanie skryptu? @evolucja mówisz że nie bedzie problemu czasowego ?
Go to the top of the page
+Quote Post
tehaha
post 21.07.2010, 07:47:56
Post #4





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


jeżeli obawiasz, że obróbka zdjęć może potrwać za długo i skrypt przestanie działać, to ustaw na samym początku:
  1. ini_set('max_execution_time', 300);
Go to the top of the page
+Quote Post
evolucja
post 21.07.2010, 10:19:02
Post #5





Grupa: Zarejestrowani
Postów: 362
Pomógł: 27
Dołączył: 14.09.2009

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


Cytat(Barcelona @ 21.07.2010, 01:54:51 ) *
Jak w formularzu wskaże lokalizacje do 5 fotek i wcisnę przycisk wyślij to wtedy zaczyna wykonywanie skryptu? @evolucja mówisz że nie bedzie problemu czasowego ?


Nie. Przecież napisałem wyraźnie. Podałem nawet rozwinięcie twojego myślenia i sam nie wyłapałeś błędu?
Skrypt po stronie serwera może zostać uruchomiony dopiero wtedy, jak całość danych zostanie przesłana. Bo niby w jaki inny sposób miały by działać hostingi plików? winksmiley.jpg

Cytat(tehaha @ 21.07.2010, 08:47:56 ) *
jeżeli obawiasz, że obróbka zdjęć może potrwać za długo i skrypt przestanie działać, to ustaw na samym początku:
  1. ini_set('max_execution_time', 300);

Na localu może sobie ustawiać... Nie znam jeszcze shared hostingu który by miał możliwość zmiany smile.gif


--------------------
zmoderowano - waga i rozmiar
Go to the top of the page
+Quote Post
Barcelona
post 22.07.2010, 11:21:57
Post #6





Grupa: Zarejestrowani
Postów: 322
Pomógł: 15
Dołączył: 29.01.2010

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


@evolucja rozumiem o co chodzi.
A możecie mi wskazać jak zrobić żeby skrypt robił miniaturki kolejnych zdjęć. Bo teraz mam tylko jednego inputa z type=file.

----------------------------------------------

Witam, sorki że nadpisuje ale nie mogę sobie poradzić z tym problemem.
Zrobiłem kolejnego inputa na wrzucanie pliku.
$ul_plik --> odnosi się do pierwszego inputa
$foto_dwa --> to drugi input.

Zmierzam do tego żeby zrobić upload większej ilości uploadu plików graficznych i tak żeby skalowało mi te pliki do miniatury. Wszystko działa, ale tworzy mi podwójną ilość miniatur oraz dodaje do bazy podwójna ilość ogłoszeń.
Dodaje ogłoszenie i daje 2 fotki. Na ftp tworzy się 8 plików: 4 miniatury i 4 oryginalne. Do bazy dodają się 2 ogłoszenia.
Nie wiem co jest nie tak.
Jak był pojedynczy upload to wszystko działało dobrze.
Proszę o pomoc.

  1. if ($_FILES){
  2. foreach( $_FILES as $foto_dwa )
  3. {
  4. if( is_uploaded_file( $foto_dwa['tmp_name'] ) )
  5. {
  6. $rand = f_rand(3);
  7.  
  8. $new_name = $rand.".jpg";
  9. $tmp_name = $foto_dwa['tmp_name'];
  10. $name = $foto_dwa['name'];
  11.  
  12. copy($tmp_name, './tmp/'.$new_name);
  13.  
  14. resize($new_name,$w_1,"./img/mini/", "");
  15. resize($new_name,$w_2,"./img/", "");
  16.  
  17.  
  18. unlink('./tmp/'.$new_name);
  19.  
  20. }
  21. }
  22.  
  23. }
  24.  
  25.  
  26. if ($_FILES){
  27. foreach( $_FILES as $ul_plik )
  28. {
  29. if( is_uploaded_file( $ul_plik['tmp_name'] ) )
  30. {
  31. $rand = f_rand(3);
  32.  
  33.  
  34. $new_name = $rand.".jpg";
  35. $tmp_name = $ul_plik['tmp_name'];
  36. $name = $ul_plik['name'];
  37.  
  38. copy($tmp_name, './tmp/'.$new_name);
  39.  
  40.  
  41. resize($new_name,$w_1,"./img/mini/", "");
  42. resize($new_name,$w_2,"./img/", "");
  43.  
  44.  
  45. unlink('./tmp/'.$new_name);
  46.  
  47.  
  48. INSERT INTO ogloszenia (tytul, data, tresc, stan, rodzaj, marka, model, rocznik, miejsca, klimatyzacja, rejestracja,obrazek,cena)
  49. VALUES ('$tytul','$data','$tresc','$stan','$rodzaj','$marka','$model','$rocznik','$miejsca','$klimatyzacja','$rejestracja','$rand','$cena')
  50. ");
  51.  
  52.  
  53. }
  54. else {
  55. INSERT INTO ogloszenia (tytul, data, tresc, stan, rodzaj, marka, model, rocznik, miejsca, klimatyzacja, rejestracja,obrazek,cena)
  56. VALUES ('$tytul','$data','$tresc','$stan','$rodzaj','$marka','$model','$rocznik','$miejsca','$klimatyzacja','$rejestracja','nazwa','$cena')
  57. ");
  58. }
  59. }
  60.  
  61. }


Ten post edytował Barcelona 22.07.2010, 11:22:34
Go to the top of the page
+Quote Post
Wilu88
post 22.07.2010, 11:37:25
Post #7





Grupa: Zarejestrowani
Postów: 158
Pomógł: 6
Dołączył: 7.03.2010

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


  1. else {
  2.  
  3.  
  4. INSERT INTO ogloszenia (tytul, data, tresc, stan, rodzaj, marka, model, rocznik, miejsca, klimatyzacja, rejestracja,obrazek,cena)
  5.  
  6. VALUES ('$tytul','$data','$tresc','$stan','$rodzaj','$marka','$model','$rocznik','$miejsca','$klimatyzacja','$rejestracja','nazwa','$cena')
  7.  
  8. ");
  9.  
  10. }
  11.  
  12. }

Na pewno w tym kodzie masz błąd w treści wysyłanej do kolumny obrazek, we wcześniejszym zapytaniu wrzucam tam $rand a w drugim jakaś nazwa

Ten post edytował Wilu88 22.07.2010, 11:50:48
Go to the top of the page
+Quote Post
evolucja
post 22.07.2010, 11:39:23
Post #8





Grupa: Zarejestrowani
Postów: 362
Pomógł: 27
Dołączył: 14.09.2009

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


A po co ci dwa foreachy działające dokładnie tak samo? A, nie dokładnie. Ten pierwszy nie wysyła zapytania smile.gif Po prostu usuń pierwszą część a zostaw tylko:
  1. if ($_FILES){
  2. foreach( $_FILES as $ul_plik )
  3. {
  4. if( is_uploaded_file( $ul_plik['tmp_name'] ) )
  5. {
  6. $rand = f_rand(3);
  7.  
  8.  
  9. $new_name = $rand.".jpg";
  10. $tmp_name = $ul_plik['tmp_name'];
  11. $name = $ul_plik['name'];
  12.  
  13. copy($tmp_name, './tmp/'.$new_name);
  14.  
  15.  
  16. resize($new_name,$w_1,"./img/mini/", "");
  17. resize($new_name,$w_2,"./img/", "");
  18.  
  19.  
  20. unlink('./tmp/'.$new_name);
  21.  
  22.  
  23. INSERT INTO ogloszenia (tytul, data, tresc, stan, rodzaj, marka, model, rocznik, miejsca, klimatyzacja, rejestracja,obrazek,cena)
  24. VALUES ('$tytul','$data','$tresc','$stan','$rodzaj','$marka','$model','$rocznik','$miejsca','$klimatyzacja','$rejestracja','$rand','$cena')
  25. ");
  26.  
  27.  
  28. }
  29. else {
  30. INSERT INTO ogloszenia (tytul, data, tresc, stan, rodzaj, marka, model, rocznik, miejsca, klimatyzacja, rejestracja,obrazek,cena)
  31. VALUES ('$tytul','$data','$tresc','$stan','$rodzaj','$marka','$model','$rocznik','$miejsca','$klimatyzacja','$rejestracja','nazwa','$cena')
  32. ");
  33. }
  34. }
  35.  
  36. }

Dodawanie kolejnych zdjęć to już tylko stworzenie odpowiednich inputów i ich nazwanie - bez zmian w kodzie.


--------------------
zmoderowano - waga i rozmiar
Go to the top of the page
+Quote Post
Wilu88
post 22.07.2010, 11:54:18
Post #9





Grupa: Zarejestrowani
Postów: 158
Pomógł: 6
Dołączył: 7.03.2010

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


A nie prościej zrobić tak:

Ujednolicić nazwy inputów z plikami np: $ul_plik1, $ul_plik2 itd. I jeśli z góry zakładasz zż będzie np 5 plików zrobić pętle z 5 przebiegami i za każdym przebiegiem robić INSERTA?

Ten post edytował Wilu88 22.07.2010, 12:02:06
Go to the top of the page
+Quote Post
Barcelona
post 22.07.2010, 12:07:35
Post #10





Grupa: Zarejestrowani
Postów: 322
Pomógł: 15
Dołączył: 29.01.2010

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


@evolucja, ale czy jak usunę pierwszą część to czy będą się tworzyły miniaturki do kolejnych wgrywanych zdjęć. Zależy mi jeszcze żeby nazwy tych plików dodawać do bazy mysql.

Cytat
Na pewno w tym kodzie masz błąd w treści wysyłanej do kolumny obrazek, we wcześniejszym zapytaniu wrzucam tam $rand a w drugim jakaś nazwa


zapytanie jest dobre. Ta 'nazwa' w zapytaniu jest nazwą pliku. Działa to tak --> jak nie zostanie dodane zdjęcie to wtedy w polu obrazek zostaje dodany domyslny obrazek o nazwie "nazwa" a jak obrazek zostaje dodany to wtedy leci rand z nazwa pliku.

@Wilu88 mógłbyś napisać jak to zrobić w pętli bo właśnie rozważam również takie rozwiązanie ale nie wiem jak się za nie zabrać.
Go to the top of the page
+Quote Post
evolucja
post 22.07.2010, 12:12:55
Post #11





Grupa: Zarejestrowani
Postów: 362
Pomógł: 27
Dołączył: 14.09.2009

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


Cytat(Wilu88 @ 22.07.2010, 12:54:18 ) *
A nie prościej zrobić tak:

Ujednolicić nazwy inputów z plikami np: $ul_plik1, $ul_plik2 itd. I jeśli z góry zakładasz zż będzie np 5 plików zrobić pętle z 5 przebiegami i za każdym przebiegiem robić INSERTA?

To rozwiązanie jest po prostu głupie. Po co ma przerabiać to na statyczne skoro już ma teraz zrobione dynamicznie?


Cytat(Barcelona @ 22.07.2010, 13:07:35 ) *
@evolucja, ale czy jak usunę pierwszą część to czy będą się tworzyły miniaturki do kolejnych wgrywanych zdjęć. Zależy mi jeszcze żeby nazwy tych plików dodawać do bazy mysql.

A sprawdziłeś to w ogóle czy tylko tak gadasz?


--------------------
zmoderowano - waga i rozmiar
Go to the top of the page
+Quote Post
Wilu88
post 22.07.2010, 12:16:24
Post #12





Grupa: Zarejestrowani
Postów: 158
Pomógł: 6
Dołączył: 7.03.2010

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


  1. <?
  2. for( $a=1 ; $a<=5 ; $a++) {
  3.  
  4.  
  5. if( is_uploaded_file($ul_plik'.$a.'['tmp_name'] ) )
  6.  
  7. {
  8.  
  9. $rand = f_rand(3);
  10.  
  11.  
  12. $new_name = $rand.".jpg";
  13.  
  14. $tmp_name = $ul_plik'.$a.'['tmp_name'];
  15.  
  16. $name = $ul_plik'.$a.'['name'];
  17.  
  18.  
  19.  
  20. copy($tmp_name, './tmp/'.$new_name);
  21.  
  22.  
  23.  
  24. resize($new_name,$w_1,"./img/mini/", "");
  25.  
  26. resize($new_name,$w_2,"./img/", "");
  27.  
  28. unlink('./tmp/'.$new_name);
  29.  
  30.  
  31.  
  32. INSERT INTO ogloszenia (tytul, data, tresc, stan, rodzaj, marka, model, rocznik, miejsca, klimatyzacja, rejestracja,obrazek,cena)
  33.  
  34. VALUES ('$tytul','$data','$tresc','$stan','$rodzaj','$marka','$model','$rocznik','$miejsca','$klimatyzacja','$rejestracja','$rand','$cena')
  35.  
  36. ");
  37.  
  38. }
  39. ?>


tyle że nie jestem pewien tej linijki
Kod
if( is_uploaded_file($ul_plik'.$a.'['tmp_name'] ) )
i łączenia dwóch zmiennych pokombinujesz i powinno być ok biggrin.gif

Ten post edytował Wilu88 22.07.2010, 12:36:26
Go to the top of the page
+Quote Post
evolucja
post 22.07.2010, 12:20:29
Post #13





Grupa: Zarejestrowani
Postów: 362
Pomógł: 27
Dołączył: 14.09.2009

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


#Wilu88
No i po co to? Jaki jest sens przerabiania czegoś co działa i jest dynamiczne, na coś takiego?


--------------------
zmoderowano - waga i rozmiar
Go to the top of the page
+Quote Post
Wilu88
post 22.07.2010, 12:22:42
Post #14





Grupa: Zarejestrowani
Postów: 158
Pomógł: 6
Dołączył: 7.03.2010

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


Kolega poprosił o kod to przedstawiłem, a czy jest sens to niech on zdecyduje.
Go to the top of the page
+Quote Post
Barcelona
post 22.07.2010, 14:02:27
Post #15





Grupa: Zarejestrowani
Postów: 322
Pomógł: 15
Dołączył: 29.01.2010

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


@evolucja własnie sprawdziałem to co napisałeś, czyli usunąłem tą pierwszą część kodu. I teraz na ftp zostaje wgrana prawidłowa ilość plików, jak wrzucam jeden to wrzuca się jedno a jak dwa to wrzucają się dwa. Tylko problem jest taki że tworzą się podwójne ogłoszenia. Napisze inaczej:
Do formularza dodaje dwa pliki i jak dodam to wszystko do bazy to tworzą się dwa ogłoszenia. Pierwsze z tym zdjęciem pierwszym oraz drugie ogłoszenie z tym zdjęciem drugim. Tak jakby pętla wykonywała zapytanie do bazy dla każdego obrazka z osobna.

@Wilu88 jednak pozostane przy tym co teraz jestem bo nie ma sensu przerabiać coś co już działa, ale ma małe niedociągnięcia.

Wkleje cały kod dla pewności

  1. <?
  2.  
  3.  
  4. function f_rand($ile) {
  5. for ($i=1; $i<=$ile; $i++)
  6. {$l_rand .= dechex(mt_rand());}
  7. return $l_rand;
  8. }
  9.  
  10.  
  11. function resize($foto, $szerokosc, $folder, $napis) {
  12.  
  13. $fotos = "./tmp/".$foto;
  14. $mini = $folder."/".$foto;
  15. if (!file_exists($mini)) {
  16. $img = imagecreatefromjpeg($fotos);
  17. $width = imagesx($img); // szerokosc jpga
  18. $height = imagesy($img); // wysokosc jpga
  19.  
  20. if ($width > $szerokosc || $height > $szerokosc){
  21. //poziomy / szerokosc
  22. if ($width>=$height) {$width_mini = $szerokosc;
  23. $x = $width/$width_mini;
  24. $height_mini = $height/$x;
  25. $litery_wielkosc = $width/60;}
  26.  
  27. //pionowy / wysokosc
  28. if ($width<$height) {$height_mini = $szerokosc;
  29. $x = $height/$height_mini;
  30. $width_mini = $width/$x;
  31. $litery_wielkosc = $height/60;}
  32.  
  33. $img_mini = imagecreatetruecolor($width_mini, $height_mini);
  34. }
  35. else
  36. {
  37. $img_mini = $img;
  38. }
  39. $txt = $napis;
  40. $fontpath = realpath('.');
  41. $kolor_tla = imagecolorallocate ( $img, 255, 255, 255 );
  42.  
  43. imagecopyresampled($img_mini, $img, 0, 0, 0, 0, $width_mini , $height_mini, $width, $height);
  44. imagejpeg($img_mini, $mini, 100);
  45. @imagedestroy($img);
  46. @imagedestroy($img_mini);
  47. }
  48. }
  49.  
  50.  
  51.  
  52. if ($_SESSION["zalogowany"]=="tak") {
  53. include('menu.php');
  54. echo "Ogłoszenia s? najważniejsz? funkcj? tego serwisu. Masz tutaj możliwo?ć dodawania ogłoszeń do bazy danych.<br> Podczas pisania ogłoszenia należy wypełnić wszystkie pola!<br><br>
  55. <h2>UWAGA!! Jeżeli zdjęcie nie zostanie wybrane wtedy ogłoszenie zostanie dodane ze standardowym zdjęciem.</h2>";
  56. $tytul = mysql_real_escape_string (trim($_POST['tytul']));
  57. $data = mysql_real_escape_string (trim($_POST['data']));
  58. $tresc = $_POST['tresc'];
  59. $stan = mysql_real_escape_string (trim($_POST['stan']));
  60. $rodzaj = mysql_real_escape_string (trim($_POST['rodzaj']));
  61. $marka = mysql_real_escape_string (trim($_POST['marka']));
  62. $model = mysql_real_escape_string (trim($_POST['model']));
  63. $rocznik = mysql_real_escape_string (trim($_POST['rocznik']));
  64. $miejsca = mysql_real_escape_string (trim($_POST['miejsca']));
  65. $klimatyzacja = mysql_real_escape_string (trim($_POST['klimatyzacja']));
  66. $rejestracja = mysql_real_escape_string (trim($_POST['rejestracja']));
  67. $cena = mysql_real_escape_string (trim($_POST['cena']));
  68. $ul_plik = mysql_real_escape_string (trim($_POST['foto']));
  69.  
  70.  
  71. if (strlen($tytul)>2) {
  72.  
  73. ////////////////////////////////////////
  74.  
  75. //ustawienie wielkosci zmniejszanych obrazow
  76. $w_1 = 175;
  77. $w_2 = 400;
  78.  
  79.  
  80. if ($_FILES){
  81. foreach( $_FILES as $ul_plik )
  82. {
  83. if( is_uploaded_file( $ul_plik['tmp_name'] ) )
  84. {
  85.  
  86. $rand = f_rand(3);
  87.  
  88. $new_name = $rand.".jpg";
  89. $tmp_name = $ul_plik['tmp_name'];
  90. $name = $ul_plik['name'];
  91.  
  92. copy($tmp_name, './tmp/'.$new_name);
  93.  
  94.  
  95.  
  96. resize($new_name,$w_1,"./img/mini/", "");
  97. resize($new_name,$w_2,"./img/", "");
  98.  
  99.  
  100. unlink('./tmp/'.$new_name);
  101.  
  102.  
  103.  
  104. INSERT INTO ogloszenia (tytul, data, tresc, stan, rodzaj, marka, model, rocznik, miejsca, klimatyzacja, rejestracja,obrazek,cena)
  105. VALUES ('$tytul','$data','$tresc','$stan','$rodzaj','$marka','$model','$rocznik','$miejsca','$klimatyzacja','$rejestracja','$rand','$cena')
  106. ");
  107.  
  108.  
  109. }
  110. else {
  111. INSERT INTO ogloszenia (tytul, data, tresc, stan, rodzaj, marka, model, rocznik, miejsca, klimatyzacja, rejestracja,obrazek,cena)
  112. VALUES ('$tytul','$data','$tresc','$stan','$rodzaj','$marka','$model','$rocznik','$miejsca','$klimatyzacja','$rejestracja','nazwa','$cena')
  113. ");
  114. }
  115. }
  116.  
  117. }
  118.  
  119. echo "
  120. <br><div class=\"potwierdzenie\"><center>Ogłoszenie zostało dodane</center>
  121. </div>";
  122.  
  123.  
  124. }
  125. $data = date("Y-m-d H:i:s");
  126. echo <<<KONIEC
  127. <br>
  128. <form action="" method="post" enctype="multipart/form-data" class="uniForm">
  129.  
  130. <fieldset><legend>Dane Samochodu</legend>
  131. <div class="ctrlHolder">
  132.   <label for="foto">Dodaj zdjęcie do ogłoszenia:</label><br>
  133.   <input type="file" name="foto"> <font size="1" color="red">*To zdjęcie będzie zdjęciem głównym, kolejne nie musz? być dodane</font><br>
  134.   <input type="file" name="foto_dwa"><br>
  135.   <label for="marka">Podaj marke samochodu:</label>
  136.   <input type="text" name="marka" style="width:100%;" class="textInput small" />
  137.   <label for="model">Podaj model samochodu:</label>
  138.   <input type="text" name="model" style="width:100%;" class="textInput small" />
  139.   <label for="rocznik">Podaj rocznik samochodu:</label>
  140.   <input type="text" name="rocznik" style="width:100%;" class="textInput small" />
  141.   <label for="miejsca">Podaj ilo?ć miejsc siedz?cych:</label>
  142.   <input type="text" name="miejsca" style="width:100%;" class="textInput small" />
  143.   <label for="klimatyzacja">Klimatyzacja:</label><br>
  144.   <select id="" name="klimatyzacja"><optgroup label='Wybierz jedn? opcję'><option value='TAK'>TAK</option><option value='NIE'>NIE</option></optgroup></select><br>
  145.   <label for="rejestracja">Podaj rejestracje samochodu*:</label>
  146.   <input type="text" name="rejestracja" style="width:100%;" class="textInput small" />
  147.   </div></fieldset>
  148.   <fieldset><legend>Ogłoszenie</legend>
  149. <div class="ctrlHolder">
  150.   <label for="tytul">Podaj tytuł ogłoszenia:</label>
  151.   <input type="text" name="tytul" style="width:100%;" class="textInput small" />
  152.   <label for="model">Podaj date ogłoszenia:</label>
  153.   <input type="text" name="data" style="width:100%;" class="textInput small" value="$data" />
  154.   <label for="rocznik">Napisz tre?ć ogłoszenia:</label><br>
  155.   <textarea name="tresc" id="editor"></textarea><br>
  156. KONIEC;
  157. ?>
  158. <script type="text/javascript">
  159. //<![CDATA[
  160.  
  161. CKEDITOR.replace( 'editor',
  162. {
  163. fullPage : true
  164. });
  165.  
  166. //]]>
  167. </script>
  168. <?
  169. echo <<<KONIEC
  170. <label for="cena">Podaj cene (zł):</label>
  171.   <input type="text" name="cena" style="width:100%;" class="textInput small" />
  172. </div></fieldset>
  173. <fieldset><legend>Informacje dodatkowe</legend>
  174. <div class="ctrlHolder">
  175. <p class="label">
  176.   Wybierz rodzaj ogłoszenia, oraz czy ma on zostać wy?wietlony na stronie
  177.   </p><table width="100%">
  178.  
  179.  
  180. <tr><td align="middle"><ul class="alternate">
  181.   <li><label for="rodzaj" align="top">Rodzaj <select id="" name="rodzaj"><optgroup label='Wybierz jedn? opcję'><option value='wynajem_autobusow'>Wynajem autobusów</option><option value='wynajem_busow'>Wynajem busów</option><option value='sprzedaz_busow'>Sprzedaż busów</option><option value='transport_ludzi'>Transport ludzi</option></optgroup></select></label></li></td><td align="middle">
  182.   <li><label for="stan" align="middle">Stan <select id="" name="stan"><optgroup label='Aktualne'><option value='1'>Ogłoszenie widoczne</optgroup><optgroup label='Wybierz jedn? opcję'><option value='1'>Ogłoszenie widoczne</option><option value='0'>Ogłoszenie niewidoczne</option></optgroup></select></label></li>
  183.   </ul></td></tr></table>
  184.   </div></fieldset>
  185.   <div class="buttonHolder">
  186. <input type="submit" value=" wy?lij" class="primaryAction" />
  187. </div>
  188. KONIEC;
  189. }
  190. else {
  191. echo "<div class=\"potwierdzenie\"><center>Proszę się zalogować!</center>
  192. </div>";
  193.  
  194. }
  195.  
  196. ?>


Ten post edytował Barcelona 22.07.2010, 14:04:00
Go to the top of the page
+Quote Post
evolucja
post 22.07.2010, 15:04:02
Post #16





Grupa: Zarejestrowani
Postów: 362
Pomógł: 27
Dołączył: 14.09.2009

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


Nie chce mi się czytać całego kodu, wybacz. Cały problem w tym, że my tak naprawdę nie wiemy do czego to służy i jak ma działać smile.gif A ty gdybyś popatrzył na klamry w programie który je podświetla(np. notepad++) zauważył byś że zapytania wykonują się w pętli foreach.

  1. if ($_FILES) {
  2. foreach( $_FILES as $ul_plik )
  3. {
  4. if( is_uploaded_file( $ul_plik['tmp_name'] ) )
  5. {
  6.  
  7. $rand = f_rand(3);
  8.  
  9. $new_name = $rand.".jpg";
  10. $tmp_name = $ul_plik['tmp_name'];
  11. $name = $ul_plik['name'];
  12.  
  13. copy($tmp_name, './tmp/'.$new_name);
  14.  
  15.  
  16.  
  17. resize($new_name,$w_1,"./img/mini/", "");
  18. resize($new_name,$w_2,"./img/", "");
  19.  
  20.  
  21. unlink('./tmp/'.$new_name);
  22.  
  23.  
  24.  
  25. }
  26. }
  27. INSERT INTO ogloszenia (tytul, data, tresc, stan, rodzaj, marka, model, rocznik, miejsca, klimatyzacja, rejestracja,obrazek,cena)
  28. VALUES ('$tytul','$data','$tresc','$stan','$rodzaj','$marka','$model','$rocznik','$miejsca','$klimatyzacja','$rejestracja','$rand','$cena')
  29. ");
  30.  
  31. } else {
  32. INSERT INTO ogloszenia (tytul, data, tresc, stan, rodzaj, marka, model, rocznik, miejsca, klimatyzacja, rejestracja,obrazek,cena)
  33. VALUES ('$tytul','$data','$tresc','$stan','$rodzaj','$marka','$model','$rocznik','$miejsca','$klimatyzacja','$rejestracja','nazwa','$cena')
  34. "); }


--------------------
zmoderowano - waga i rozmiar
Go to the top of the page
+Quote Post
Barcelona
post 22.07.2010, 15:27:45
Post #17





Grupa: Zarejestrowani
Postów: 322
Pomógł: 15
Dołączył: 29.01.2010

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


Tak jak napisałeś w moim notepad++ z którego korzystam mam podświetlone klamry smile.gif

A więc przeniosłem zapytanie po za pętle foreach i teraz dodaje tylko jedno ogłoszenie do bazy danych smile.gif

Ale jednak teraz mam problem z opcją gdy zdjęcie nie jest dodane w formularzu.
Zasada działania jest taka, jak nie jest zadna fotka wybrana wtedy do bazy zostaje dodane ogłoszenie z nazwą domyślnej fotki która jest juz na ftp. I teraz jak nie wybiore zadnej fotki to tworzą się dwa ogłoszenia z ta domyślną (to chyba jest zależne od ilości inputów w formularzu). Tak, wiem identyczna sprawa jak w przypadku wyżej, zapytanie znajduje się w pętli, ale jednak jak to zrobić po za pętlą żeby skrypt wiedział że nie została wybrana żadna fotka i dodał jedno ogłoszenie z domyślną nazwą.
Mam tam warunek if( is_uploaded_file( $ul_plik['tmp_name'] ) ) i jak jest spełniony wtedy dodaje się ogloszenie z fotą a jak nie to z domyślną nazwą tylko to wszystko znajduje się w foreach.
Aktualnie ta część kodu wygląda tak (przeniosłem zapytanie po za foreach)

  1. if ($_FILES){
  2. foreach( $_FILES as $ul_plik )
  3. {
  4. if( is_uploaded_file( $ul_plik['tmp_name'] ) )
  5. {
  6.  
  7. $rand = f_rand(3);
  8.  
  9. $new_name = $rand.".jpg";
  10. $tmp_name = $ul_plik['tmp_name'];
  11. $name = $ul_plik['name'];
  12.  
  13. copy($tmp_name, './tmp/'.$new_name);
  14.  
  15.  
  16.  
  17. resize($new_name,$w_1,"./img/mini/", "");
  18. resize($new_name,$w_2,"./img/", "");
  19.  
  20.  
  21. unlink('./tmp/'.$new_name);
  22.  
  23.  
  24. }
  25. else {
  26. INSERT INTO ogloszenia (tytul, data, tresc, stan, rodzaj, marka, model, rocznik, miejsca, klimatyzacja, rejestracja,obrazek,cena)
  27. VALUES ('$tytul','$data','$tresc','$stan','$rodzaj','$marka','$model','$rocznik','$miejsca','$klimatyzacja','$rejestracja','nazwa','$cena')
  28. ");
  29. }
  30. }
  31.  
  32. }
  33. INSERT INTO ogloszenia (tytul, data, tresc, stan, rodzaj, marka, model, rocznik, miejsca, klimatyzacja, rejestracja,obrazek,cena)
  34. VALUES ('$tytul','$data','$tresc','$stan','$rodzaj','$marka','$model','$rocznik','$miejsca','$klimatyzacja','$rejestracja','$rand','$cena')
  35. ");
Go to the top of the page
+Quote Post
evolucja
post 22.07.2010, 16:10:00
Post #18





Grupa: Zarejestrowani
Postów: 362
Pomógł: 27
Dołączył: 14.09.2009

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


Przecież dałem ci już poprawioną i działającą funkcję w poprzednim moim poście, to ty dalej kombinujesz.

Ten post edytował evolucja 22.07.2010, 16:10:49


--------------------
zmoderowano - waga i rozmiar
Go to the top of the page
+Quote Post
Barcelona
post 22.07.2010, 17:20:34
Post #19





Grupa: Zarejestrowani
Postów: 322
Pomógł: 15
Dołączył: 29.01.2010

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


Racja, przepraszam najmocniej smile.gif Myślałem że wskazujesz mi miejsce błędu.

Już wystawiłem podziekowanie, ale jeszcze raz wielkie dzieki bo było to bardzo ważne dla mnie.

Jeszcze mam takie małe pytanko.
Jak z tej pętli wydobyć nazwy wszystkich plików bo chce w tabeli w bazie danych zapisywać te nazwy i wyświetlać (jako obrazki) przy konkretnym ogłoszeniu.
Ten pierwszy obrazek $ul_plik jest zapisywany jako $rand w bazie danych, a nie wiem jak to zrobić z kolejnymi.

--------------
Wracam z editem:
@evolucja działa prawie dobrze. Skrypt nie wykrywa że nie został dodany obrazek i dodaje puste pole w bazie.
Funkcja rand odpowiada za tworzenie unikatowych nazw plików, i tutaj nie wykrywa że nie ma pliku i nie randuje i daje pustą wartość. Próbowałem nawet w phpmyadmin zrobić domyślną wartość dla pola "obrazek" ale i tak dodawał się pusty rekord.

Ten post edytował Barcelona 22.07.2010, 17:46:12
Go to the top of the page
+Quote Post
Wilu88
post 22.07.2010, 18:10:51
Post #20





Grupa: Zarejestrowani
Postów: 158
Pomógł: 6
Dołączył: 7.03.2010

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


No to w tym drugim zapytaniu przypisz kolumnie obrazek jakąś wartość która będzie zawsze wysyłana gdy nie będzie obrazka.


  1.  
  2. INSERT INTO ogloszenia (tytul, data, tresc, stan, rodzaj, marka, model, rocznik, miejsca, klimatyzacja, rejestracja,obrazek,cena)
  3.  
  4. VALUES ('$tytul','$data','$tresc','$stan','$rodzaj','$marka','$model','$rocznik','$miejsca','$klimatyzacja','$rejestracja','obrazek','$cena')
  5.  
  6. ");


W tym wypadku powinien przesłać wartość 'obrazek' do kolumny obrazek.
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 11:53