download.bg
 Вход Списание  Новини  Програми  Статии  Форум  Чат   Абонамент  Топ95   Архив 

[спешно]PHP гурута - помощ

<1 2 >

Автор
Съобщение
phrozencrew
Сря, 27.02.13, 20:40

RE: [спешно]PHP гурута - помощ

” Не, как да съхраня пътищата в таблицата. В отделни колонки или има някакъв друг начин?
Мога в една и съща колонка да запиша всички пътища, разделени със специален знак и после да накарам php да ми explode.
Обаче не знам как ще е с перформънса. „
Няма нужда да запазваш пътищата в таблица. Това ще те ограничи доста, ако решиш да сменяш дизайн и структурата на сайта. Не е и необходимо. Записвай си в таблиците само името на картинките, а самия път можеш да го дефинираш като php константа:
define("PICT_PATH", "images/big/");
define("PICT_PATH_THUMB", "images/thumbs/");
и после в src:
src="<?php echo PICT_PATH."/".imeto_na_kartinkata.jpg ?>"

Добре би било да използваш и абсолютен път с http://ime-na-site/images/big/ . Така ще можеш да правиш различни тимплейти бързо.
Можеш да използваш и md5() при генериране на уникално име за всяка картинка, която ъплоудваш. Примерно по времето:
function id(){$ID=md5(rand() * time()); return $ID;}

dreamskill
Сря, 27.02.13, 20:45
Еми с пътя имах предвит това. Благодаря ви. Това с md5 е хитро. А въпроса ми беше как да запазя имената на файловете в таблицата, за да ги свържа с продукта.
dreamskill
Сря, 27.02.13, 20:55
Явно трудно се изразявам.
Как са запазени снимките в обявите в cars.bg, например? И как се връзват с обявата. Това ми е въпроса.
phrozencrew
Сря, 27.02.13, 21:09
Когато се ъплоадва картинка, се в базата данни се добавя и поле с id на обявата. Така се знае всяка картинка с коя обява е свързана. После когато извличаш снимките от конкретната обява в селекта включвач и where id-obiava="34" примерно.
dreamskill
Сря, 27.02.13, 21:15
Значи за снимките създавам нова таблица, който има само 2 колони, нали?
phrozencrew
Сря, 27.02.13, 21:35
Мисля, че трябва да са поне 3:
idpict - ид на картинката
idg - ид на галерията или новината или обявата...
pict_name - име на картинката

Можеш да използваш същото име на картинката и за thumbs, ще си спестиш работа. ID на картинката е добре да има, ако искаш да могат картинките лесно да се трият, местят и т.н.

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

редактиран от phrozencrew на 27.02.13 21:36
dreamskill
Сря, 27.02.13, 21:42
Благодаря за ясните отговори и съжалявам за невежеството си.
anonymous
Чет, 28.02.13, 12:34
Още един поглед много набързо и накратко :)
<?php
if (isset($_POST['send']) && $_POST['send']) {
	$snimki = sizeof($_FILES['photo']['name']);
	
	if ($snimki)
		for ($i = 0; $i < $snimki; $i++) {
			$ext = strtolower(strstr($_FILES['photo']['name'][$i], '.'));
			
			if ($ext == '.jpg' || $ext == '.jpeg' || $ext == '.gif' || $ext == '.png' || $ext == '.bmp') {
				$photo = md5(rand() * time()) . $ext;
				
				$path = 'files/product/photo/' . $photo;
				
				if (move_uploaded_file($_FILES['photo']['tmp_name'][$i], $path))
					$namePhoto[] = $photo;
				else
					$err .= 'Грешка при обработка на снимка ' . $i + 1 . '<br />';
			} else
				echo 'Непозволен формат за снимка ' . $i + 1 . '<br />';
		}
	else
		echo 'Не е избрана нито една снимка за качване!';
		
	if ($err)
		echo $err;
		
	$this_photos = implode("|", $namePhoto);
	
	if (!mysql_query("INSERT INTO your_DB (kolona_snimki) VALUE ('$this_photos')")) {
		echo 'Възникна грешка при опит да се добавят данните!'; 
		foreach ($namePhoto as $v)
			@unlink("files/product/photo/$v");
	}
}
 
$row = mysql_fetch_array(mysql_query("SELECT * FROM your_DB WHERE id='$id'"));
$see_photo = explode("|", $row['kolana_snimki']);
foreach ($see_photo as $show_pic)
	echo '<img src="files/product/photo/' . $show_pic . '" border="0" /><br /><br />';
 
for ($i = 0; $i < 10; $i++)
	$upload_files .= 'Качи снимка ' . $i + 1 . ':   <input type="file" name="photo[]" /><br />';
?>
 
<FORM method="post" action="" enctype="multipart/form-data">
	<?php echo $upload_files; ?>
    <input type="submit" name="send" value="Качи" />
</FORM>

И така предлагаме да се качат 10 снимки едновременно:
for ($i = 0; $i < 10; $i++)
	$upload_files .= 'Качи снимка ' . $i + 1 . ':   <input type="file" name="photo[]" /><br />';
?>
 
<FORM method="post" action="" enctype="multipart/form-data">
	<?php echo $upload_files; ?>
    <input type="submit" name="send" value="Качи" />
</FORM>

В случая няма значение дали ще качи една, нито една, няколко или всичките 10. След като е изпратил формата проверяваме дали има поне една качена снимка, ако няма му казваме, че не е качил. Но ако е качил вземаме броя на снимките (организирали сме ги в масив
<input type="file" name="photo[]" />

с име photo.
Ако има качени снимки
$snimki = sizeof($_FILES['photo']['name']);
	
	if ($snimki)

организираме един цикъл за да хванем броя на качените снимки
for ($i = 0; $i < $snimki; $i++) {

и в него проверяваме дали това, което е качено е графичен формат
$ext = strtolower(strstr($_FILES['photo']['name'][$i], '.'));
			
			if ($ext == '.jpg' || $ext == '.jpeg' || $ext == '.gif' || $ext == '.png' || $ext == '.bmp') {

. Ако не е казваме на потребителя, че снимка ели коя си няма да стане
} else
				echo 'Непозволен формат за снимка ' . $i + 1 . '<br />';

Но, ако е, даваме име на конкретната снимка, както и записваме в променлива пълния път и снимката където искаш да се запише
$photo = md5(rand() * time()) . $ext;
				$path = 'files/product/photo/' . $photo;

След което записваме снимката там, където искаш и и слагаме името и в масив
if (move_uploaded_file($_FILES['photo']['tmp_name'][$i], $path))
					$namePhoto[] = $photo;

Ако име някаква грешка, записваме в променлива, в коя точно подред снимка е проблема и си продължаваме цикъла. След като свърши цикъла, ако е имало грешка в записа на някоя снимка показваме на потребителя
if ($err)
		echo $err;

и записваме една променлива, която ще е във вид име на снимка|име на снимка
$this_photos = implode("|", $namePhoto);

Тази променлива ще запишем и в таблицата от базата данни. Таблицата съм я кръстил your_DB, а колоната за снимки в нея
kolona_snimki

. Промени си ги според твоите, както и пътя за записване на файлове в горните и някои от долните пътища :)
Записваме
if (!mysql_query("INSERT INTO your_DB (kolona_snimki) VALUE ('$this_photos')")) {

като и едновременно проверяваме дали записа е ОК. Това записване си го организарай както искаш, в колкото колони искаш. И разбира се може да не е INSERT, a UPDATE. Просто направи си заявката към базата според нуждите. тука това е само за пример. Ако е записано всичко по учебник е добре, но ако има проблем казваме на потребителя и изтриваме всички снимки от последно изпратената форма с цел да не трупаме излишни файлове.
Как показваме снимките. Правим си заявка (тука я правя по някакво ID от базата) Нагоди си я според твоите нужди
$row = mysql_fetch_array(mysql_query("SELECT * FROM your_DB WHERE id='$id'"));

След което за всеки елемент извеждаме снимката
$see_photo = explode("|", $row['kolana_snimki']); foreach ($see_photo as $show_pic)
	echo '<img src="files/product/photo/' . $show_pic . '" border="0" /><br /><br />';

Тоест в базата записваме само имената на снимката. Ако са повече имената на снимките разделени с някакъв символ, в случая с пипет| Ако ще за повече от 5 снимки е добре полето в базата да ти е text, иначе може да е varchar. Ти ще си определиш. А в source на програмата задаваме твърд път къде ще са снимките.

редактиран от anonymous на 28.02.13 12:42
dreamskill
Пон, 04.03.13, 16:55
Много ти благодаря, lotsofsex, след малко ще го бутна в кода.
programings
Пон, 04.03.13, 19:34
Извинявам се за пълният оффтопик, но бих искал да помоля lotsofsex да си види емайла с който му е регистриран тук профила, писал съм му нещо.
редактиран от programings на 04.03.13 19:34

<1 2 >

Коментар

за нас | за разработчици | за реклама | станете автори | in english  © 1998-2024   Experta Ltd.