Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #31 (permalink)  
Старый 15.02.2018, 12:51
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от kupidon
Может и можно
Не можно, а нужно, особенно если добавление для нового товара.
Ответить с цитированием
  #32 (permalink)  
Старый 15.02.2018, 18:24
Аватар для kupidon
Аспирант
Отправить личное сообщение для kupidon Посмотреть профиль Найти все сообщения от kupidon
 
Регистрация: 18.03.2016
Сообщений: 69

Вот мои две формы. Первая не рабочая, вторая рабочая.
<form id="load_pic">
<input value="" title="Вставьте сюда прямую ссылку на фотографию товара с сайта поставщика" maxlength="300" id="sp_load_photo"  placeholder="Доступные форматы: gif, jpg, png, bmp" type="text">
<input value="Закачать" onclick="" type="button">
</form>

<form name="upload_form">
<div id="imageloadbutton">
<input id="photoimg" name="photos[]" multiple="true" type="file">
</div>
<div id="imageloadstatus" style="display:none">
<img src="include/upload_photo/loader.gif" alt="Загрузка ...">
<span>Идет загрузка...</span>
</div>
</form>


// функция ajax загрузки фото 
	 $('#photoimg').change(function() { 
	    var myfiles = $('#photoimg').prop('files');
	    for(var i = 0; i < count(file_data); i++){
	    	var form_data = new FormData(); 
		var file_dat000 = myfiles[i];
	    form_data.append('file', file_dat000);
	    $.ajax({
	                url: 'include/upload_photo/ajax_upload.php',
	                dataType: 'text',
	                cache: false,
	                contentType: false,
	                processData: false,
	                data: form_data,
	                type: 'post',
	                success: function(response){
		                $("#imageloadstatus").hide();
				$("#imageloadbutton").show();
	 			show_picture(response);
	                },
	                error: function(){
		 		$("#imageloadstatus").hide();
				$("#imageloadbutton").show();               	
	                },
	                complete: function(){
		 		$('#photoimg').val('');
	                },
	     });
		}
	});


и обработчик ajax_upload.php:
if (isset($_POST) and $_SERVER["REQUEST_METHOD"] == "POST")
{
    if ( 0 < $_FILES['file']['error'] ) {
        echo 'Error: ' . $_FILES['file']['error'] . '<br>';
    } else {....
....
$filename = stripslashes($_FILES['file']['name']); // полный путь файла
.....


Подскажите, пожалуйста, как мне в этот обработчик отправить данные с первой формы, чтобы произошла загрузка временного файла с внешнего URL ?
Ответить с цитированием
  #33 (permalink)  
Старый 15.02.2018, 18:43
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от kupidon
и обработчик ajax_upload.php:
Первая форма ничего не закачивает, и в никаких $_FILES ловить ее данные не стоит.

Проверка if (isset($_POST) никчемная да и отношение к $_FILES не имеющая, и $_SERVER["REQUEST_METHOD"] == "POST" выбросить тоже.

Сообщение от kupidon
stripslashes($_FILES['file']['name']); // полный путь файла
Ни дай бог путь! Клиент никогда не передаст серверу локальный пусть файла, а если не имя, а путь передан, то это подстава и опасная. Поэтому обязательно basename($_FILES['file']['name']), но только зачем же товарам добавлять имена типа "Это я в Сочи", "Это у моря"?

В предыдущих темах ведь говорилось уже о добавлении товаров и изображений им. Эта форма/формы для добавления фото добавляемому товару или уже добавленному?
Ответить с цитированием
  #34 (permalink)  
Старый 15.02.2018, 19:33
Аватар для kupidon
Аспирант
Отправить личное сообщение для kupidon Посмотреть профиль Найти все сообщения от kupidon
 
Регистрация: 18.03.2016
Сообщений: 69

товар есть. Нужно загрузить фото по ссылке, обработать его( переименовать, изменить размеры), переместить и прописать в БД принадлежность к данному ид товара
Но меня интересует только то что касается ссылки. Остальное я уже сделал
Ответить с цитированием
  #35 (permalink)  
Старый 15.02.2018, 19:34
Аватар для kupidon
Аспирант
Отправить личное сообщение для kupidon Посмотреть профиль Найти все сообщения от kupidon
 
Регистрация: 18.03.2016
Сообщений: 69

Сообщение от laimas Посмотреть сообщение
Первая форма ничего не закачивает, и в никаких $_FILES ловить ее данные не стоит.
Это я знаю, потому что не знаю как сделать. Впрочем об этом и топик.
Ответить с цитированием
  #36 (permalink)  
Старый 15.02.2018, 20:20
Аватар для kupidon
Аспирант
Отправить личное сообщение для kupidon Посмотреть профиль Найти все сообщения от kupidon
 
Регистрация: 18.03.2016
Сообщений: 69

Я чувствую что я уже где то близко:
<div style="padding:2px;font-size:8pt;">Загрузить с компьютера: 
<input id="test" type="text" name="url_file" style="width:200px" value="http://">
</div>
<input value="Загрузить" type="button" style="width:100px;margin-left:136px" onclick="javascript:sss();">


function sss(){
	var res=$('#test').val();
	alert(res);
	     		$.ajax({
	    type: "POST",
	    url: "include/upload_photo/ajax_upload.php",
	    data: ("file_url="+res),
	    dataType: "html",
	    cashe: false,
	    success: function(msg){
	    	alert(msg);
	     },
	    error: (function() { 
	    	alert("Ошибка выполнения"); 
	    }),
	 	});	 
}


if (isset($_POST) and $_SERVER["REQUEST_METHOD"] == "POST")
{
$contents = file_get_contents($_POST['file_url']);
echo $contents;
}


Вот тут ошибку возвращает. Как мне правильно загрузить файл и привести его к $_FILES['file']?, чтобы продолжить в тех же функциях обработчика
Ответить с цитированием
  #37 (permalink)  
Старый 15.02.2018, 20:21
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от kupidon
Но меня интересует только то что касается ссылки. Остальное я уже сделал
Если сделано так как в коде, то это никуда не годится.

Сообщение от kupidon
товар есть. Нужно загрузить фото по ссылке, обработать его( переименовать, изменить размеры), переместить и прописать в БД принадлежность к данному ид товара
Значит редактирование/обновление товара, следовательно либо в форме есть скрытое поле со значением id товара, либо id товара, это ключ в имени полей формы.

Одной формой можно добавлять как локальные файлы, так указывать загрузку сетевых файлов.

<form>
<div id="url_file">
<input name="file[]" />
</div>
<div id="local_file">
<input type="file" name="file[]" />
</div>
<input type="hidden" name="id" value="<?=$id?>" />
</form>

Поле file[] бокса url_file можно клонировать тем самым определять для загрузки множество файлов. Поле file[] бокса local_file также может загружать множество файлов, нужно только проверять на клиенте при выборе файлов соответствие выбранного ограничениям накладываемых сервером.

На сервере если передан id товара и если это действительно товар имеющийся в базе, а не просто число, то загрузка файлов, если массив $_FILES не пуст.

Обходом в цикле загружаем файлы загруженные без ошибок - !file["error"][$i]. Если файл отвечает требованиям: тип, размер если определено, то file["tmp_name"][$i] передается в функцию на обработку: изменение размеров, обрезка, наложение логотипа и т.п. Если все Ок, эта функция генерирует имя файла, а не использует загруженное "Огурцы на грядке", даже если товар и огурец, и под этим именем сохраняет в указанном каталоге (если каталоги связаны к примеру с категориями, помимо id товара сервер должен знать и о категории). Эта же функция может обновлять и запись в базе о новом добавленном фото, либо возвращать его из функции, одновременно указывая им и удачное выполнение. Имена всех возвращенных функцией файлов одним запросом по окончании загрузки записать в базу. Если есть ошибки, то функция возвращает false.

Если массив $_POST["file"] не пуст, то в цикле загружается сетевой файл по указанному url, также проверяется на условия по типу/размеру, и отдается в функцию на обработку.

То есть, если есть загруженные $_FILES и указаны сетевые, то и те, и другие обрабатываются одной функцией. Либо одни из - локальные или сетевые. Если и то, и другое пусто - ошибка.
Ответить с цитированием
  #38 (permalink)  
Старый 15.02.2018, 20:24
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от kupidon
isset($_POST)
Это всегда вернет истину ибо $_POST суперглобальный массив и всегда в наличии.
Ответить с цитированием
  #39 (permalink)  
Старый 15.02.2018, 20:27
Аватар для kupidon
Аспирант
Отправить личное сообщение для kupidon Посмотреть профиль Найти все сообщения от kupidon
 
Регистрация: 18.03.2016
Сообщений: 69

Сообщение от laimas
Проверка if (isset($_POST) никчемная да и отношение к $_FILES не имеющая, и $_SERVER["REQUEST_METHOD"] == "POST" выбросить тоже.
Вообще проверку убрать?

Сообщение от laimas
Поэтому обязательно basename($_FILES['file']['name']
У меня переименованием файла занимается отдельная функция, это мне не надо наверное.
Ответить с цитированием
  #40 (permalink)  
Старый 15.02.2018, 20:40
Аватар для kupidon
Аспирант
Отправить личное сообщение для kupidon Посмотреть профиль Найти все сообщения от kupidon
 
Регистрация: 18.03.2016
Сообщений: 69

Сообщение от laimas
Если массив $_POST["file"] не пуст, то в цикле загружается сетевой файл по указанному url, также проверяется на условия по типу/размеру, и отдается в функцию на обработку.
как его загрузить? что то не получается у меня((
Вот нашел в инете пример:
$file = 'https://www.google.ru/images/srpr/logo11w.png';
$file_name = basename('https://www.google.ru/images/srpr/logo11w.png');
file_put_contents('my_folder'.$file_name, file_get_contents($file));

И как из этого примера потом получить ссылку на временный файл?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
jQuery для загрузки страницы в <div> Dr.Holerik jQuery 12 11.10.2016 17:36
Надо добавить кнопочку для загрузки фоток в фотогалерею shooriks Серверные языки и технологии 5 01.04.2015 16:04
не закрывается DiV после загрузки в него файла sfumato jQuery 0 02.06.2011 21:05
Форма для ввода текста с расширенными функциями 0x22b Элементы интерфейса 0 01.09.2008 10:38
Поле загрузки файла kotofeich Элементы интерфейса 3 30.07.2008 11:24