хороший ли это скрипт даунлоада

fedotxxl

Новичок
Помогите новичку паписать хороший скрипт даунлоада

Добрый день. Решил сделать сайт типа софтодром.ру, нужно написать двиг. Я в php не мастер, но что-то знаю. В этой теме я бы попросил разьяснять вопросы, которые у меня возникнут... Прошу тему не закрывать
Скрипт решил делать с шаблонами... Больше всего меня интересует, чтобы скрипт не грузил систему, был надёжен в плане безопасности.
Хотел бы представить код, который я напрограмировал со своими знаниями. Фактически он отвечает за вывод инфы о файле.
PHP:
$output = $tample_files; //шаблон, получаемы инклудом
if ($_GET['file_id'] == intval($_GET['file_id']) and $_GET['file_id']!='')
	{   
		$sql= "SELECT file_name, file_link_autor, file_link_server, file_date_added, file_date_edited, file_category_id, file_description_long, file_autor, file_autor_mail, file_site_autor, file_version, file_os, file_size, file_rating, file_download, file_num_votert, file_today_download FROM files WHERE file_id={$_GET['file_id']}";
		$sql_result = mysql_query($sql);
		$row = mysql_fetch_row($sql_result) or die ("Запрос не выполнен");
		if ($row[3]!=0) //file_date_added
		$row[3] = date("d.m.y", $row[3]);
		else $row[3] = '';
		if ($row[4]!=0)//file_date_edited
		$row[4] = date("d.m.y", $row[4]);
		else $row[4] = '';
		if ($row[12]>1048576) //file_size больше метра
		$row[12] = 	round(($row[12]/1048576),2);
		else $row[12] = round($row[12]/1024);
		if ($row[13]!=0 and $row[15]!=0)
		$row[13]=round($row[13]/$row[15],2);
		else $row[13] = '0';
		
		$row_edited =  array('{file_name}',  '{file_link_autor}', '{file_link_server}', '{file_date_added}', '{file_date_edited}', '{file_category_id}', '{file_description_long}', '{file_autor}', '{file_autor_mail}', '{file_site_autor}', '{file_version}', '{file_os}', '{file_size}', '{file_rating}', '{file_download}', '{file_num_votert)', '{file_today_download}');
	    
	    for ($i=0;$i<=16;$i++)
	    	{
	    		if($row[$i]!='')
	    		$output = str_replace($row_edited[$i], $row[$i], $output);
	    		else $output = str_replace($row_edited[$i], "<<<!EMPTY!>>>", $output);
	    	}
	    }
   // else msgbox ("Ошибка ID файла", "Внимание, Вы ввели не верный ID файла.");
?>
Можно услышать критику?
 

Romantik

TeaM PHPClub
if ($_GET['file_id'] == intval($_GET['file_id']) and $_GET['file_id']!='')
Зачем так?
$id= intval($_GET['id']);
if($id>0){.....
тогда и в запросе цельночисленный ИД будет
$sql= "SELECT * FROM files WHERE file_id=".$id;
далее
$row[3] ИМХО лучше $row['file_link_server'] юзать- добавил поле в базу или в запрос не нужно переделывать скрипт
и тогда вместо mysql_fetch_row использовать [m]mysql_fetch_assoc[/m]
$row_edited = array('{file_name}', '{file_link_autor}', '{file_link_server}', '{file_date_added}', '{file_date_edited}', '{file_category_id}', '{file_description_long}', '{file_autor}', '{file_autor_mail}', '{file_site_autor}', '{file_version}', '{file_os}', '{file_size}', '{file_rating}', '{file_download}', '{file_num_votert)', '{file_today_download}');

for ($i=0;$i<=16;$i++)
{
if($row[$i]!='')
$output = str_replace($row_edited[$i], $row[$i], $output);
else $output = str_replace($row_edited[$i], "<<<!EMPTY!>>>", $output);
}
}
у тебя же есть уже массив. [m]foreach[/m] или в том же
while($row= mysql_fetch_assoc($res)){....
 

fedotxxl

Новичок
почему mysql_fetch_assoc, а не mysql_fetch_array
while($row= mysql_fetch_assoc($res)){.... - это же бред. Мне возврощается одна строчка.... зачем вайл?
foreach не юзал. Ща попробую разобраться

-~{}~ 22.07.05 13:23:

Твоя версия кода:
PHP:
		if ($_GET['file_id'] == intval($_GET['file_id']) and $_GET['file_id']!='')
	{   
		$sql= "SELECT file_name, file_link_autor, file_link_server, file_date_added, file_date_edited, file_category_id, file_description_long, file_autor, file_autor_mail, file_site_autor, file_version, file_os, file_size, file_rating, file_download, file_num_votert, 'file_today_download' FROM files WHERE file_id={$_GET['file_id']}";
		$sql_result = mysql_query($sql);
		$row = mysql_fetch_assoc($sql_result) or die ("Запрос не выполнен");
		if ($row['file_date_added']!=0) //file_date_added
		$row['file_date_added'] = date("d.m.y", $row['file_date_added']);
		else $row['file_date_added'] = '';
		if ($row['file_date_edited']!=0)//file_date_edited
		$row['file_date_edited'] = date("d.m.y", $row['file_date_edited']);
		else $row['file_date_edited'] = '';
		if ($row['file_size']>1048576) //file_size больше метра
		$row['file_size'] = 	round(($row['file_size']/1048576),2);
		else $row['file_size'] = round($row['file_size']/1024);
		if ($row['file_rating']!=0 and $row['file_num_votert']!=0)
		$row['file_rating']=round(($row['file_rating']/$row['file_num_votert']),2);

	//	$row_edited =  array('{file_name}',  '{file_link_autor}', '{file_link_server}', '{file_date_added}', '{file_date_edited}', '{file_category_id}', '{file_description_long}', '{file_autor}', '{file_autor_mail}', '{file_site_autor}', '{file_version}', '{file_os}', '{file_size}', '{file_rating}', '{file_download}', '{file_num_votert)', '{file_today_download}');
	      foreach($row as $index => $val)
 			  {
          	if($val!='')
	    		$output = str_replace('{'.$index.'}', $val, $output);
	    	else $output = str_replace('{'.$index.'}', "{!!EMPTY!!}", $output);
	    
		      }

/*    for ($i=0;$i<=16;$i++)
	    	{
	    	
	    	} */
	    }
Так. Она даже дольше моей грузится.
>> добавил поле в базу или в запрос не нужно переделывать скрипт
Его и так вроде не надо будет. Я же вывожу не *, а только что нада
 

SiMM

Новичок
> почему mysql_fetch_assoc, а не mysql_fetch_array
Потому что функция mysql_fetch_array, в принципе, абсолютно бесполезна.
 

moxnatiy

Новичок
SiMM
Почему бесполезна?
а если два одинаковых ключа в хеше?
мало-ли как бывает
 

fedotxxl

Новичок
Вобщем почему mysql_fetch_array плохая я так и не понял...
Новая большая проблема возникла. Как реализовать "скачено сегодня", "вчера", "позавчера", "в месяц"... Честно сказать, как правильно это сделать я не знаю... хелп плс
 

SiMM

Новичок
> Почему бесполезна?
Потому что привязываться к индексу ключа - плохой тон.

> а если два одинаковых ключа в хеше?
Значит значение по этим ключам одинаково.

> мало-ли как бывает
Как? Приведите хотя бы один пример, где нужно получать значения из БД не по имени поля.

> Новая большая проблема возникла. Как реализовать "скачено сегодня", "вчера", "позавчера", "в месяц"...
Вести логи.
 

DiTHER

bang bang
>> Почему бесполезна?
> Потому что привязываться к индексу ключа - плохой тон.

fetch_array(MYSQL_ASSOC); =)

> мало-ли как бывает
всегда когда так бывает можно (и нужно) подставить AS в запрос
 
Сверху