Jump to content
BulForum.com

PHP перипети със скрипт


jorkata

Recommended Posts

значи имам скрипт който ъплоадва картинки и добява детайли за тях в база данни.базата данни се състои от няколоко полета допълнителна информация,разни текстове,детайли за отделна снимка и името на файла на самата снимка.

и всички тези данни (целият ред от таблицата) се изкарва като отделен "проект".текстове разни,въпросните снимки и описание към всяка снимка.

но проблема идва от това,че аз съм сложил примерно 5 снимки лимит за всеки проект (тоест толкова колони в базата данни),и когато се изкарват на старницата със самия "проект" си има място за снимка 1,снимка 2 и т.н. и когато са 5 снимки (колкото е лимита) висчко е 6,но проблема е че не всеки проект ще има 5 снимки (примерно).

ето част от кода,който изкарва снимките (да кажем че всяка снимка и описание са в отделна таблица) :

 

<?
mysql_connect("host","user","pass"); 
mysql_select_db("dbase"); 
$sql    = "SELECT * FROM table WHERE id=".$_GET["id"];
$result = mysql_query($sql); 
while($r=mysql_fetch_array($result))
{	
  $id = $r['id'];
  $title = $r['title'];
  $type = $r['type'];
  $content = $r['content'];
  $picture1 = $r['picture1'];
  $picture2 = $r['picture2'];
  $picture3 = $r['picture3'];
  $picture4 = $r['picture4'];
  $picture5 = $r['picture5'];
  $pic1desc = $r['pic1desc'];
  $pic2desc = $r['pic2desc'];
  $pic3desc = $r['pic3desc'];
  $pic4desc = $r['pic4desc'];
  $pic5desc = $r['pic5desc'];
  
  echo "
<table width="100%"  border="0" cellspacing="0" cellpadding="0">
 <tr>
   <td>$picture1</td>
 </tr>
 <tr>
   <td>$pic1desc</td>
 </tr>
</table>

<table width="100%"  border="0" cellspacing="0" cellpadding="0">
 <tr>
   <td>$picture2</td>
 </tr>
 <tr>
   <td>$pic2desc</td>
 </tr>
</table>

/** и така нататък ... **/

";
}
?>

 

аз си мислех да се направи нещо от сорта на

 

<? if (полето $picture1 е празно)
             echo "никакво html,празно поле"
          else (изкарва html-то на таблицата с картинката и описанието ..) ?>

и така на свяка снимка да е със if-else и ако полето където трябва да пише името на файла няма нещо (празно) тогава нищо не вади,а ако е попълнено - си вади там html-то.

опитах се да го направя,но не успях.не твърдя и че това е най-разубния начин или че въобще това е някакъв начин ..

който има идея какво мога да направя,ще съм благодарен да ме просветли :)

Link to comment
Share on other sites

Не разбрах какъв е точно проблемът, но мисля, че по-елегантно може да се реши като още в SQL заявката ограничиш върнатия резултат да включва само непразните полета за снимки, което пък предполага да отделиш в отделна таблица инфото за снимките за проектите, като по този начин се постига и по-добро разпределение на данните, също така лимитът за брой снимки за проект се премахва.

Link to comment
Share on other sites

Направи си цикъл да ти брои редовете/колоните/ в mysql...

Незадавай конкретно имената на картинките... ("picture4") ами по скоро нещо такова ("picture".$i) където $i идва от някакво предварително преброяване...

И съответно после таблиците които правиш в HTML, може да станат с пак с цикъл, според броя картинки да създаде нужния брой редове...

 

echo "<table width=100% border=0 cellspacing=0 cellpadding=0>";

for ($i=0; $i<$result_count_pic; $i++){

echo "

<tr>

<td>picture".$i."</td>

</tr>

<tr>

<td>pic".$i."desc</td>

</tr>";

}

echo "</table>";

 

нещо такова...

 

ще е по-полезно да започваш да броиш от 0 вместо от 1...

 

И аз не разбрах какъв е точния проблем...

но проблема е че не всеки проект ще има 5 снимки

taze:

ако обясниш по-прецизно проблема и наблегнеш на момента:

"желан резултат"---->"получен резултат"

предполагам, че повече хора ще се опитат да ти покажат вярната посока.

Link to comment
Share on other sites

извинявайте че не ме разбрахте,аз и аз сам се угелпих като го четох това мое обяснение :woot

ами проблема е че не всеки проект ще има 5 снимки,а html кода е направен за 5 снимки,и искам да направя така че да вади html код само за броя снимки,които са в определния проект.

разбрахте ли ме сега или пак да се пробвам да обясня :)

Link to comment
Share on other sites

Аз те разбрах още първия път и моето мнение си остава същото. Отделяш инфото за снимките в отделна таблица и в SQL завката ще е по-лесно още в нея да филтрираш върнатите редове, и съответно с цикъл ще echo-неш таблицата, а не така както си го направил за всяка снимка отделно да пишеш хтмл.

Казано по друг начин - отделяйки инфото в отделни таблици със съответните връзки между тях постигаш това, което се нарича 2-ра и 3-та нормална форма на базата данни. 3-та норм. форма е най-ефективна по отношение на гъвкавост, понеже няма никакво повторение на данни, но понякога за големи бази данни е по-подходящо данните да са във 2-ра нормална форма. В твоя случай обаче е почти задължително да нормализираш в 3-та форма :rolleyes: (отделяне на данните в отделна таблица, от което следват нещата от предишния ми пост).

Link to comment
Share on other sites

хм,срещнах проблем докато се опитвах да приложа решението на теди - значи предишния скрипт когато се ъплоадваха картиникте автоматично се преименуваха .. във формат $title 01.jpg,02.jpg и т.н..

но сега незнам как да направя във формата за ъплоад да се преименуват по този начин,май става по-сложно .. :(

Link to comment
Share on other sites

май успях да го направя,но сега има малко проблемче.искам имената на файловете които ъплоадвам да се качват на сървъра с име "$title xxx" където xxx е комбинация от произволни символи и цифри .. така няма да има нужда от номериране .. ето частта от скрипта за ъплоад на картинките където е въведена директорията за ъплоад и името на файла:

$uppic_file = '/path/to/upload/'.$title.' 01.'.jpg;

та въпроса ми е как да направя вместо номерация да е произволна комбинация от букви/цифри .. ? :blink:

Link to comment
Share on other sites

Можеш да използваш например функцията rand() / mt_rand() и с един прост цикъл да генерираш уникални идентификатори за имена на файлове, но по-удачно ще стане ако генерираш псевдо-случайна стойност на базата на текущото време по UNIX стандарт (microtime()) и някаква измислена от теб проста формула.

 

Има една функция uniqid(), но тя едва ли ще ти свърши работа, предвид за какво ти трябва.

Link to comment
Share on other sites

и това с произволните символи го направих .. брей почвам да се изненадвам от себе си :woot за сега всичко изглежда ок,но може и да има още въпроси .. ако имам проблеми пак ще питам тук :woot

теди мерси много за помоща :)

 

ЕДИТ:използвах rand функцията:

$random1 = rand(1, 9999);

Link to comment
Share on other sites

и това с произволните символи го направих .. брей почвам да се изненадвам от себе си  :woot  за сега всичко изглежда ок,но може и да има още въпроси .. ако имам проблеми пак ще питам тук  :woot

теди мерси много за помоща  :)

 

.... използвах rand функцията ....

Хубаво си я използвал, но имай предвид, че тя може да генерира числа, които да се повторят с вече генерирани преди това и съответно да 'съчиниш' име на файл, който вече съществува. Затова на твое място бих използвал или проверка за съществуващ такъв файл преди преименуването (което става с цикъл до получаването на уникална стойност), или просто бих използвал втория начин с използването на текущото време и формула ;)

Ако има нещо друго неясно, питай, все някой ще ти отговори, ако не аз, друг. B)

Link to comment
Share on other sites

да,звам че може да се получи файл с едно и също име,но мисля че вероятноста е наистина малка.даже ще увелича броя на числата с няколко цифри .. така ще се намали вероятността ...

една малка пречка ми изкочи току що,проблема е следния:значи във формата с която ъплоадвам файла и въвеждам информация в базата данни имам следният ред който въвежда въпросната ивформация в MySQL базата данни:

$result=MYSQL_QUERY("INSERT INTO photos (pic_id,project_id,pic_file,pic_desc)".
     "VALUES ('NULL', '$project_id', '$title _ $random1.jpg', '$pic_desc')");

значи искам $pic_file да се въвежда във формата "$title_$random1.jpg" демек както ъплоадвам файла,но не мога да разбера какви знаци да сложа около "_" за да излиза слято .. както е в момента излиза "$title _ $random1.jpg" (с разстояния около _).дайте идея плз :woot

Link to comment
Share on other sites

да,звам че може да се получи файл с едно и също име,но мисля че вероятноста е наистина малка.даже ще увелича броя на числата с няколко цифри .. така ще се намали вероятността ...

една малка пречка ми изкочи току що,проблема е следния:значи във формата с която ъплоадвам файла и въвеждам информация в базата данни имам следният ред който въвежда въпросната ивформация в MySQL базата данни:

$result=MYSQL_QUERY("INSERT INTO photos (pic_id,project_id,pic_file,pic_desc)".
     "VALUES ('NULL', '$project_id', '$title _ $random1.jpg', '$pic_desc')");

значи искам $pic_file да се въвежда във формата "$title_$random1.jpg" демек както ъплоадвам файла,но не мога да разбера какви знаци да сложа около "_" за да излиза слято .. както е в момента излиза "$title _ $random1.jpg" (с разстояния около _).дайте идея плз  :woot

kak taka izlizat razstoqniq ?Napisal si '$title _ $random1.jpg', to si ima razstoqniq vytre . Da ne iskash da kajesh $title.'_'.$random.'.jpg'?

Inache az prilagam i edin drug metod - zapisvane na kartinkite v BLOB v BD ama se servira po-bavno.

Link to comment
Share on other sites

именно че излизат разстояния,аз искам да е слято .. да няма разстояния около "_"

какви знаци трябва да сложа около "_" за да стане както искам?

Link to comment
Share on other sites

Разбрах те. Ако махнеш разстоянията PHP няма да разбере че имаш предвид променливата $title, т.е. добре си се сетил за тази особеност ;)

Ще го направиш така:

 

$result=MYSQL_QUERY("INSERT INTO photos (pic_id,project_id,pic_file,pic_desc)".
    "VALUES ('NULL', '$project_id', '".$title."_".$random1.".jpg', '$pic_desc')");

 

...

Inache az prilagam i edin drug metod - zapisvane na kartinkite v BLOB v BD ama se servira po-bavno.

Вкарването на картинки в BLOB наистина е доста неефективно и почти никъде не съм срещал някой да го прави така.

Link to comment
Share on other sites

стана :woot не съм се и съмнявал даже че няма да стане,мерси много теди .. !

аз викам стига за тази вечер,утре пак ще ви занимавам с моите приключения из PHP :woot

Link to comment
Share on other sites

сега се сетих .. значи опитвах се да интегрирам във формата за ъплоад на снимката функция която да resize-ва самата картинка .. в нета има сумати туториали където се рисайзва вече ъществуваща картинка на сървъра,но не можах да нтегрирам нито едно от тях .. някаква помощ от някой .. ? ако трябва да ви покажа скрипта за да видите как да го интегрирате .. моля ви това вече е наистина важно :woot

Link to comment
Share on other sites

Твоята функция се казва:

imagecopyresampled() B)

Разбира се трябва на сървъра да е инсталирана GD library-то, повечето сървъри я имат инсталирана, също така последните версии PHP идват стандартно с нея.

Успех!

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...