PHP и с чем его едят....

[fly]

Sweet orange
Подскажите как правильно обработать несколько file input'ов? А то, тот скрипт что я написал, при кол-ве file input 5 штук, и загрузке 3-х файлов, все равно делает 5 записей в базу. Три с именами+типами файлов и две просто с именами. Как мне обработать поля, чтобы писать в базу столько строк, сколько я загрузил файлов?
 

[fly]

Sweet orange
Для тех, у кого возможно возникнет подобный вопрос:
PHP:
$dir_name="files/PGallery/";
$good_name = array_filter($_FILES['file_name']['name']); // отфильтровываем пустые file_name
	if (sizeof($good_name)!=0)	{ // и если массив не пустой, то:
		foreach ($good_name as $key => $name)	{
			$file_name=$QWN_Code.$_FILES['file_name']['name'][$key];
			move_uploaded_file($_FILES['file_name']['tmp_name'][$key], $dir_name.$file_name);
			mysql_query("INSERT INTO `photos` VALUES(0, '$idAlbom', '$file_name', '$time', '$date')");
		}
	} else;
 

[fly]

Sweet orange
Есть вопрос. Сразу скажу, текста много, но хочу более подробно описать суть проблемы.
Подскажите, возможно кто-то сталкивался с подобным.
Есть интернет-магазин (на платном хостинге), в нем добавляем товар и прикрепляем инструкцию в формате .pdf с именем на русском языке. Данные товара заносятся в базу, а инструкция попадает в папку instructions/$idProduct/$fileInstruction. Далее, заходим на страницу с описанием этого товара и тут самое интересное.
В файле, product_card.php, есть код, который делает следующее:
открывает папку instruction/$idProduct/, находит файл инструкции, берет имя этого файла и выводит ссылку на скачивание/просмотр файла. Ссылка прямая на файл, типа - . Но когда я нажимаю на ссылку, то выводится страница NOT FOUND. Я зашел на хостинг, нашел эту папку с файлом инструкции и оказывается имя ее уже какие-то иероглифы!
You must be registered for see images


А в некоторых случаях Total CMD даже тип файла определить не может!
You must be registered for see images


Но при этом в статусной строке браузера, в ссылке, имя выводится правильное и на русском языке!!!
You must be registered for see images

И нельзя этот файл ни скачать, ни переименовать даже через Total CMD! Заходил уже и через DirectAdmin хостинга, та же беда, только удалить можно! Но на локальном хосте все работает, даже если загружаю файлы с русским именем, а вот в инете на хосте такая беда.

P.S. файлы с именем на английском языке грузятся нормально и без проблем, проблема только с русским названием.
 

Вкладення

Dre.hz

Active Member
fly сказав(ла):
Dre.hz, а как правильно делать запрос?
В двух словах — фильтруйте данные, которые получаете от пользователя, перед тем, как вставить их в SQL-запрос. Конкретный механизм — на ваше усмотрение, можете использовать функции php, можете какую-либо обертку для БД, можете ORM.

По поводу проблемы с кодировкой — она говорит сама за себя. Разберитесь с кодировками на всех этапах, и будет все ок.

По поводу аплоада нескольких файлов — авторитетный .

Собственно, хотелось бы вам порекомендовать отлаживать программу методично. У вас проблема и что-то не работает? Исключайте лишнее. Уберите яваскрипты, оставьте примитивную HTML-форму. Если она работает, то проблема в яваскриптах, ковыряйте их. Если и примитивная форма не работает, отлаживайте серверную часть. Как отлаживать серверную часть или яваскрипты? Да точно также, убирайте все лишнее, и смотрите, как ведут себя оставшиеся «примитивы». Как только проблема найдена и решена, понемногу возвращайте то, что отключили или убрали, и на каждом шаге проверяйте снова.

Для вашего случая, когда не используются высокоуровневые фреймворки, нет желания (возможности, бюджета, опыта — нужное подчеркнуть) проводить проектирование и писать юнит-тесты, это оптимальный вариант.
 

[fly]

Sweet orange
Dre.hz, довольно развернутый ответ. Спасибо. А вот по поводу своего последнего вопроса, хотелось бы более детально. Дело в том, что скрипт, который выводит ссылку на файл, он то сканируя папку с инструкцией откуда-то берет правильное имя файла и делает правильную ссылку! И на русском языке! Но если смотреть через файловый менеджер, то название файла, вроде как на корейском... или китайском... Как это получается? И как получается, что я не могу с ним никаких операций проводить кроме удаления!?
 

PainKiller

Пастафарианец
Команда форуму
Супер Модератор
Вообще хорошей практикой работы с SQL базами данных являются плейсхолдеры(placeholder).
 

Dre.hz

Active Member
Вообще хорошей практикой работы с SQL базами данных являются плейсхолдеры(placeholder).
Выбор решения всегда зависит от задачи. Для самого простого случая иногда достаточно intval() сделать и подставить. Можно использовать обертку для SQL-запроса типа DBSimple с ее подстановками и макроподстановками. Можно отвязаться от типа БД использовать ADOdb. Можно вообще отвязаться от БД и использовать ORM, например ту же Doctrine. Так что лучшую практику придется выбирать уже по месту.

Единственное, что можно сказать однозначно — этот вопрос нельзя игнорировать.

fly, решите вашу проблему тем же методом. Упростите ее до примитива, отладьте его, а потом возвращайте навороты. Я бы проделал то же самое, чтобы дать ответ на ваш вопрос.

От себя замечу, что веселее развлечений с кодировками есть только развлечение с временными зонами. Если только все с самого начала не было сделано правильно.
 
Останнє редагування:

PainKiller

Пастафарианец
Команда форуму
Супер Модератор
Ну да, тут такое было с Украинским временем :D Сначала сделали как в России, а потом пришлось переделывать тучу софта. Этот переход был веселым :D
 

Тагрим

Поняшка
От себя замечу, что веселее развлечений с кодировками есть только развлечение с временными зонами. Если только все с самого начала не было сделано правильно.
как в тему )) у меня на доставшемся по наследству серве кроме местами веселого кода, до сих пор ловлю местами расхождение на 2 часа)) видимо живет он кое-где нап GMT 0
 
Зверху