Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.10.2015, 13:53
Новичок на форуме
Отправить личное сообщение для ggyyvv Посмотреть профиль Найти все сообщения от ggyyvv
 
Регистрация: 01.10.2015
Сообщений: 8

Не передается значения из формы через аякс в пхп функцию
есть форма
Код:
<form method="post" action="" enctype="multipart/form-data">
<input type="file" name="file" id="demo1" />
<input type="text" name="cartiid" value=130 id="cartiid" />
</form>
через скрипт, в котором указывается action: "uploaded.php" запускается файл

подскажите, пожалуйста, почему в пхп функцию попадает только name="file", а name="cartiid" нет?

Последний раз редактировалось ggyyvv, 02.10.2015 в 00:18.
Ответить с цитированием
  #2 (permalink)  
Старый 01.10.2015, 17:14
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

А в чем вы ищите значение "cartiid"? Ведь "file" будет в массиве $_FILES, а "cartiid" в массиве $_POST.
Ответить с цитированием
  #3 (permalink)  
Старый 01.10.2015, 21:47
Новичок на форуме
Отправить личное сообщение для ggyyvv Посмотреть профиль Найти все сообщения от ggyyvv
 
Регистрация: 01.10.2015
Сообщений: 8

может я неправильно всё выстраиваю, прошу поправить...
изначально нужно через форму и файл загрузить и была мысль отправить значение для изменения названия этого файла. Может невозможно использовать сразу и $_FILES и $_POST? Если есть другие способы, подскажите...

я пытаюсь сразу и одну и вторую переменную использовать, но успешно получается передать либо одно либо другое

Последний раз редактировалось ggyyvv, 01.10.2015 в 21:56.
Ответить с цитированием
  #4 (permalink)  
Старый 01.10.2015, 21:52
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от ggyyvv
Может невозможно использовать сразу и $_FILES и $_POST?
Все данные передаваемые формой (ее поля), кроме поля file, в РНР помещаются в массив S_POST, оттуда их и забирайте. А загружаемые файлы забирайте из массива $_FILES. Или что не понятно?
Ответить с цитированием
  #5 (permalink)  
Старый 01.10.2015, 23:01
Новичок на форуме
Отправить личное сообщение для ggyyvv Посмотреть профиль Найти все сообщения от ggyyvv
 
Регистрация: 01.10.2015
Сообщений: 8

в js файле у меня указывается action="uploaded.php" и вот этот пхп
$whitelist = array('jpg', 'jpeg', 'png', 'gif', 'doc', 'docx', 'pdf');
$name      = null;
$error     = 'Файл не загружен.';
$date_day = date(d);
$date_mes = date(m);
$date_mhou = date(H);
$prefiix = $_POST['cartiid'];
if (isset($_FILES)) {
	if (isset($_FILES['file'])) {
		$tmp_name = $_FILES['file']['tmp_name'];
		$name     = basename($_FILES['file']['name']);
		$name	  = $prefiix.$date_day.$date_mes.$date_mhou.'_'.$name;
		$error    = $_FILES['file']['error'];
		
		if ($error === UPLOAD_ERR_OK) {
			$extension = pathinfo($name, PATHINFO_EXTENSION);

			if (!in_array($extension, $whitelist)) {
				$error = 'Недопустимый тип загружаемого файла. Для загрузки разрешены только jpg, jpeg, png, gif, doc, docx, pdf';
			} else {
			move_uploaded_file($tmp_name, 'upload/'.$name);
			}
		}
	}
}

echo json_encode(array(
	'name'  => $prefiix,
	'error' => $error,
));
die();

так вот сервер мне отдает {"name":null,"error":0}
то есть это $prefiix = $_POST['cartiid']; не отрабатывает,
соответсвенно оно не подставляется в имя файла
$name = $prefiix.$date_day.$date_mes.$date_mhou.'_'.$name;
ради чего я его туда и пытаюсь вытянуть...
в $_POST из формы должны же попадать значения?

подскажите пожалуйста, что неправильно делаю

Последний раз редактировалось ggyyvv, 02.10.2015 в 00:18.
Ответить с цитированием
  #6 (permalink)  
Старый 01.10.2015, 23:14
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Имя файла находится здесь basename($_FILES['file']['name']);
В $_POST['cartiid']; может содержаться только то, что введено пользователем.
Если $_POST['cartiid'] пустое, значит оно не передается клиентом.
Ответить с цитированием
  #7 (permalink)  
Старый 01.10.2015, 23:26
Новичок на форуме
Отправить личное сообщение для ggyyvv Посмотреть профиль Найти все сообщения от ggyyvv
 
Регистрация: 01.10.2015
Сообщений: 8

но я же его задаю
<input type="text" name="cartiid" value=130 />
здесь для примера поставил значение, а так там переменная и я вижу ее в input'е на странице
Ответить с цитированием
  #8 (permalink)  
Старый 01.10.2015, 23:30
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

То что есть значение у поля, еще не гарантия того, что оно будет передано Ajax. Смотрите код клиентский.
Ответить с цитированием
  #9 (permalink)  
Старый 01.10.2015, 23:55
Новичок на форуме
Отправить личное сообщение для ggyyvv Посмотреть профиль Найти все сообщения от ggyyvv
 
Регистрация: 01.10.2015
Сообщений: 8

вот то что отвечает за форму
var interval;
	var $upload="uploaded.php";
			
			function applyAjaxFileUpload(element) {
				$(element).AjaxFileUpload({
					action: $upload,
					onChange: function(filename) {
						// Create a span element to notify the user of an upload in progress
						var $span = $("<span />")
							.attr("class", $(this).attr("id"))
							.text("Uploading")
							.insertAfter($(this));
						
						$(this).remove();

						interval = window.setInterval(function() {
							var text = $span.text();
							if (text.length < 13) {
								$span.text(text + ".");
							} else {
								$span.text("Uploading");
							}
						}, 200);
					},
					onSubmit: function(filename) {
						// Return false here to cancel the upload
						
						// Return key-value pair to be sent along with the file
						return true;
					},
					onComplete: function(filename, response) {
						window.clearInterval(interval);
						var $span = $("span." + $(this).attr("id")).text(filename + " "),
							$fileInput = $("<input />")
								.attr({
									type: "file",
									name: $(this).attr("name"),
									id: $(this).attr("id")
								});

						if (typeof(response.error) === "string") {
							$span.replaceWith($fileInput);

							applyAjaxFileUpload($fileInput);

							alert(response.error);

							return;
						}

						$("<a />")
							.attr("href", "#")
							.text("x")
							.bind("click", function(e) {
								$span.replaceWith($fileInput);

								applyAjaxFileUpload($fileInput);
							})
							.appendTo($span);
					}
				});
			}

			applyAjaxFileUpload("#demo1");

тут вроде все только то что отвечает за вывод названия файла в форме

я так понимаю мне нужно где то здесь вставить что-то такое?

var cart_id = document.getElementById('cartiid').value;;

						$.ajax({
							type: "POST",
							url: "uploaded.php",
							data: { cartiid: cart_id}
						}).done(function( msg ) {
						alert( "Data Saved: " + msg );
						});


var cart_id = document.getElementById('cartiid').value;; - вставляю в начале
а оставшуюся часть после onSubmit: function(filename) {

тогда я получаю ответ от сервера
{"name":"130","error":"\u0424\u0430\u0439\u043b \u043d\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0435
\u043d."} (error: Файл не загружен.)

то есть значение вроде бы попадает в пхп, но название файла все так же не меняется

Последний раз редактировалось ggyyvv, 02.10.2015 в 00:15.
Ответить с цитированием
  #10 (permalink)  
Старый 02.10.2015, 01:53
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Можно конечно передаться и последовательно, сперва файл, затем данные, но не стоит. Выбрасывайте это, ищите в сети плагин Ajax отправки формы с возможность и отправки файлов, и таковые есть. Если же ориентироваться на новые браузеры, то вообще никакого плагина не требуется.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужен совет по регистрации через аякс Garik AJAX и COMET 1 19.08.2011 23:31
Через argument.callee не получается переписать функцию. Jurasmi Общие вопросы Javascript 2 23.03.2011 12:54
Передача полю объекта - массиву, значения элемента через set метод poorking Общие вопросы Javascript 1 13.02.2011 20:22
Получить значения из формы VistaSV30 Общие вопросы Javascript 1 20.01.2011 20:12
Достучаться до формы во фрейме через объект d0ublezer0 Events/DOM/Window 6 02.07.2009 17:09