Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.03.2017, 14:31
Новичок на форуме
Отправить личное сообщение для sunat1709@mail.ru Посмотреть профиль Найти все сообщения от sunat1709@mail.ru
 
Регистрация: 04.12.2016
Сообщений: 6

помогите разобрать код!
есть скрипт загрузки изображения
при добавлении изображения в базу данных надо добавить два параметра с переменными $login $idUserAdv из файла add_adv.php
так вот ссылка на сам файл http://localhost/angren/index.php?view=add_adv
через view можно и login и idUserAdv вытащить. но вот проблема в том что есть отдельный файл upload.php и в него я никак не могу передать эти две переменные.
1 страница это наш add_adv.php для наглядного примера
<?php
if(chekUser($_SESSION["login"], $_SESSION["password"]))
{
	$getUserData = getValidRegLogin($_SESSION["login"]);
	for($i = 0; $i < count($getUserData); $i++)
	{
		$id = $getUserData[$i]["id"];
		$tel = $getUserData[$i]["tel"];
		$email = $getUserData[$i]["email"];
		$username = $getUserData[$i]["username"];
	}
	if(!empty($_POST["add_advert"]))
		{
			$date = date('YmdHis');
			$login = $_SESSION["login"];
			$title = htmlspecialchars($_POST["title"]);
			$price = htmlspecialchars($_POST["price"]);
			$description = htmlspecialchars($_POST["description"]);
			$list = htmlspecialchars($_POST["list"]);
			$sub_cat = htmlspecialchars($_POST["sub_cat"]);
			$valuta = htmlspecialchars($_POST["valuta"]);
			
			$success = addAdvert($date, $apend, $login, $title, $price, $description, $list, $sub_cat, $valuta);

						$getUserAdvert = getUserAdvert($login, $date, $price, $title);
						$idUserAdv = $getUserAdvert['id'];
					?>
					<script>
						document.location.href = 'index.php?view=advert&id=<?=$idUserAdv?>';
					</script>
		}
?>
			?>

<form type="add_adv" class="submit" enctype="multipart/form-data" action="" method="post">
<div class="add_adv ">
	<div class="p">Полное описание</div><textarea name="description" cols="40" rows="5"></textarea>	

	<div class="p">Добавить изображения</div>
	<div id="drop-files" ondragover="return false">
<p>Перетащите изображение сюда</p>макс 6 изображений<br />
		<form id="frm">
			<input type="file" id="uploadbtn" multiple />
		</form>
	</div>	
<!-- Область предпросмотра -->
<div id="uploaded-holder"> 
	<div id="dropped-files">
		<!-- Кнопки загрузить и удалить, а также количество файлов -->
		<div id="upload-button">
			<center>
				<div class="clear"></div>
				<a href="#" class="upload">Загрузить</a> -эта кнопка не нужна. нужно чтобы при отправке формы добавлялись картинки
				<a href="" class="delete">Удалить все</a>
				<span>0</span>
				<!-- Прогресс бар загрузки -->
				<div id="loading">
					<div id="loading-bar">
						<div class="loading-color"></div>
					</div>
					<div id="loading-content"></div>
				</div>
			</center>
		</div>  
	</div>
</div>
<!-- Список загруженных файлов -->
<div id="file-name-holder">
<ul id="uploaded-files">
	<h1>Загруженные файлы</h1>
</ul>
</div>
<input type="submit" name="add_advert"  class="add_button"  value="Опубликовать объявление"> вот кнопка отправки формы
</div>
</form>


вот сам js код
var $ = jQuery.noConflict();

$(document).ready(function() {
	jQuery.event.props.push('dataTransfer');
	var maxFiles = 6;
	var errMessage = 0;
	var defaultUploadBtn = $('#uploadbtn');
	var dataArray = [];
	$('#uploaded-files').hide();
	$('#drop-files').on('drop', function(e) {	
		var files = e.dataTransfer.files;
		if (files.length <= maxFiles) {
			loadInView(files);
		} else {
			alert('Вы не можете загружать больше '+maxFiles+' изображений!'); 
			files.length = 0; return;
		}
	});
	defaultUploadBtn.on('change', function() {
   		var files = $(this)[0].files;
		if (files.length <= maxFiles) {
			loadInView(files);
            $('#frm').each(function(){
	        	    this.reset();
			});
		} else {
			alert('Вы не можете загружать больше '+maxFiles+' изображений!'); 
			files.length = 0;
		}
	});
	function loadInView(files) {
		// Показываем обасть предпросмотра
		$('#uploaded-holder').show();
		
		// Для каждого файла
		$.each(files, function(index, file) {
			if (!files[index].type.match('image.*')) {		
				if(errMessage == 0) {
					$('#drop-files p').html('Эй! только изображения!');
					++errMessage
				}
				else if(errMessage == 1) {
					$('#drop-files p').html('Стоп! Загружаются только изображения!');
					++errMessage
				}
				else if(errMessage == 2) {
					$('#drop-files p').html("Не умеешь читать? Только изображения!");
					++errMessage
				}
				else if(errMessage == 3) {
					$('#drop-files p').html("Хорошо! Продолжай в том же духе");
					errMessage = 0;
				}
				return false;
			}
			if((dataArray.length+files.length) <= maxFiles) {
				$('#upload-button').css({'display' : 'block'});
			} 
			else { alert('Вы не можете загружать больше '+maxFiles+' изображений!'); return; }
			var fileReader = new FileReader();
				fileReader.onload = (function(file) {
					
					return function(e) {
						dataArray.push({name : file.name, value : this.result});
						addImage((dataArray.length-1));
					}; 
						
				})(files[index]);
			fileReader.readAsDataURL(file);
		});
		return false;
	}
	function addImage(ind) {
		if (ind < 0 ) { 
		start = 0; end = dataArray.length; 
		} else {
		start = ind; end = ind+1; } 
		if(dataArray.length == 0) {
			$('#upload-button').hide();
			$('#uploaded-holder').hide();
		} else if (dataArray.length == 1) {
			$('#upload-button span').html("Был выбран 1 файл");
		} else {
			$('#upload-button span').html(dataArray.length+" файлов были выбраны");
		}
		for (i = start; i < end; i++) {
			if($('#dropped-files > .image').length <= maxFiles) { 
				$('#dropped-files').append('<div id="img-'+i+'" class="image" style="background: url('+dataArray[i].value+'); background-size: cover;"> <a href="#" id="drop-'+i+'" class="drop-button">Удалить изображение</a></div>'); 
			}
		}
		return false;
	}
	function restartFiles() {
	
		$('#loading-bar .loading-color').css({'width' : '0%'});
		$('#loading').css({'display' : 'none'});
		$('#loading-content').html(' ');
		$('#upload-button').hide();
		$('#dropped-files > .image').remove();
		$('#uploaded-holder').hide();
		dataArray.length = 0;
		return false;
	}
	$("#dropped-files").on("click","a[id^='drop']", function() {
 		var elid = $(this).attr('id');
		var temp = new Array();
		temp = elid.split('-');
		dataArray.splice(temp[1],1);
		$('#dropped-files > .image').remove();
		addImage(-1);		
	});
	
	$('#dropped-files #upload-button .delete').click(restartFiles);
	
	// Загрузка изображений на сервер - эта функция отправляет переменные и загружает картинки. я ее не могу разобрать
	//надо чтобы из add_adv.php отправлялись еще две переменных $login $id. так вот не могу это реализовать
	$('#upload-button.upload').click(function() {
		$("#loading").show();
		var totalPercent = 100 / dataArray.length;
		var x = 0;
		
		$('#loading-content').html('Загружен '+dataArray[0].name);
		$.each(dataArray, function(index, file) {	
			// загружаем страницу и передаем значения, используя HTTP POST запрос 
			$.post('templates/default/pages/upload.php', dataArray[index], function(data) {
			
				var fileName = dataArray[index].name;
				++x;
				$('#loading-bar .loading-color').css({'width' : totalPercent*(x)+'%'});
				if(totalPercent*(x) == 100) {
					$('#loading-content').html('Загрузка завершена!');
					
					setTimeout(restartFiles, 1000);
				} else if(totalPercent*(x) < 100) {
					$('#loading-content').html('Загружается '+fileName);
				}
				var dataSplit = data.split(':');
				if(dataSplit[1] == 'загружен успешно') {

					$('#uploaded-files').append('<li><a href="images/'+dataSplit[0]+'">'+fileName+'</a> загружен успешно</li>');
								
				} else {
					$('#uploaded-files').append('<li><a href="images/'+data+'. Имя файла: '+dataArray[index].name+'</li>');
				}
				
			});
		});
		$('#uploaded-files').show();
		return false;
	});
	$('#drop-files').on('dragenter', function() {
		$(this).css({'box-shadow' : 'inset 0px 0px 20px rgba(0, 0, 0, 0.1)', 'border' : '4px dashed #bb2b2b'});
		return false;
	});
	
	$('#drop-files').on('drop', function() {
		$(this).css({'box-shadow' : 'none', 'border' : '4px dashed rgba(0,0,0,0.2)'});
		return false;
	});
});


а вот сам файл upload.php в который я не могу передать две эти переменные
<?php
	// Создаем подключение к серверу
$db = mysql_connect ("localhost","root",""); 
// Выбираем БД
mysql_select_db ("ads",$db);

// Все загруженные файлы помещаются в эту папку
$uploaddir = 'userFiles/';

// Вытаскиваем необходимые данные
// вот тут выходят два параметра. и так надо еще две переменные сюда а потом в базу данных
$file = $_POST['value'];
$name = $_POST['name'];

// Получаем расширение файла
$getMime = explode('.', $name);
$mime = end($getMime);

// Выделим данные
$data = explode(',', $file);

// Декодируем данные, закодированные алгоритмом MIME base64
$encodedData = str_replace(' ','+',$data[1]);
$decodedData = base64_decode($encodedData);

// Вы можете использовать данное имя файла, или создать произвольное имя.
// Мы будем создавать произвольное имя!
$randomName = substr_replace(sha1(microtime(true)), '', 12).'.'.$mime;

	// Создаем изображение на сервере
	if(file_put_contents($uploaddir.$randomName, $decodedData)) {
		// Записываем данные изображения в БД
		mysql_query ("INSERT INTO images (date,catalog,filename) VALUES (NOW(),'$uploaddir','$randomName')");
		echo $randomName.":загружен успешно";
	}
	else {
		// Показать сообщение об ошибке, если что-то пойдет не так.
		echo "Что-то пошло не так. Убедитесь, что файл не поврежден!";
	}
?>

конечно замудрил я не много. но постарался подробно объяснить всю суть вопроса! второй день уже мучаюсь помогите! пробовал много разных способов, и везде свои проблемы тоже не смог решить.

Последний раз редактировалось sunat1709@mail.ru, 11.03.2017 в 14:39.
Ответить с цитированием
  #2 (permalink)  
Старый 11.03.2017, 14:55
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Грузить изображения на сервер как base64, это круто, только зачем?
Проверять тип файла, а тем более изображения, да еще когда он уже как строка имеется, это смелое решение, но необдуманное.

Всегда можно передать что-то куда-то. Не надо было столько кода вываливать, а просто пояснить каким образом файл add_adv.php связан с файлом upload.php при загрузки изображений - подключается, к первому, перенаправляется на него, другое...?
Ответить с цитированием
  #3 (permalink)  
Старый 11.03.2017, 15:02
Новичок на форуме
Отправить личное сообщение для sunat1709@mail.ru Посмотреть профиль Найти все сообщения от sunat1709@mail.ru
 
Регистрация: 04.12.2016
Сообщений: 6

так я в js не особо разбираюсь
этот скрипт я скачал. и хочу просто добавить его себе на сайт. просто я много чего перебрал. сейчас тоже нашел один путь но пока не получается.
этот скрипт очень удобный. сразу показывает все открытые изображения и нормально загружает и картинки и записи в базу. только надо добавить туда сам Id объявления чтобы при открытии объявления открывались по Id его картинки. я больше разбираюсь в php чем в js но по ходу дела всегда ковыряю скрипты. иногда получается иногда нет. так что вы мне посоветуете?
Ответить с цитированием
  #4 (permalink)  
Старый 11.03.2017, 15:20
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от sunat1709@mail.ru
этот скрипт очень удобный.
За такую загрузку изображений на сервер, в плане проверки того, что загружено, нужно руки отрывать, а вы об удобстве.

Сразу просмотреть при загрузке, это не проблема. А пояснения так понимаю не будет, если скрипты чужие, а вы даже не понимаете как их связать.
Ответить с цитированием
  #5 (permalink)  
Старый 11.03.2017, 15:30
Новичок на форуме
Отправить личное сообщение для sunat1709@mail.ru Посмотреть профиль Найти все сообщения от sunat1709@mail.ru
 
Регистрация: 04.12.2016
Сообщений: 6

тогда посоветуйте мне нормальный скрипт загрузки изображений? как вы говорите не кривыми руками написанный) чтобы сразу показывал эскизы и мог загружать до 6 изображений, и корректную запись в базу данных!
заранее спасибо!
Ответить с цитированием
  #6 (permalink)  
Старый 11.03.2017, 15:46
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от sunat1709@mail.ru
тогда посоветуйте мне нормальный скрипт загрузки изображений
А может лучше не с этого начать, а с того чтобы прочесть какие требования нужно соблюдать при загрузке файлов на сервер? А уже понимая, что это процесс далеко не "жмахнул кнопку, отправилось на сервер, сохранилось, значит все хорошо, главное чтобы красота была", уже с осознанием процесса выбрать готовое, а может и свое написать. А проблемам загрузки файлов на сервер в сети посвящено столько, что бесконечный сериал по этим статьям снимать можно.

Найти конкретный скрипт который бы выполнял на все 100% необходимые для вас действия на сервере не обязательно возможно. А вот добавить таковые операции скрипту готовому, это можно.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите составить код vir2l Учебные материалы 1 17.04.2015 18:23
Люди помогите добавить код гугл аналитикс sanchez087 Общие вопросы Javascript 2 11.03.2015 16:51
Помогите поправить код JavaScript на сайте karvor AJAX и COMET 1 08.02.2015 13:13
Код калькулятора на JS. помогите с ошибкой! kirill.psl Общие вопросы Javascript 9 26.08.2010 11:38
Помогите оптимизировать код. pizzZ jQuery 5 17.11.2009 23:52