Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.07.2015, 08:47
Аватар для psfdek
Профессор
Отправить личное сообщение для psfdek Посмотреть профиль Найти все сообщения от psfdek
 
Регистрация: 14.02.2014
Сообщений: 157

ckeditor в ajax форме
Подключил для textarea формы визуальный редактор ckeditor, и отправляю данные с помощью jQuery Form Plugin. Почему то при первой отправке текстареа всегда пустые (хотя контент в эдитор добавлен), но при второй отправке уже нормально отправляет.


http://ckeditor.com/
https://github.com/malsup/form

Вот сам код...
<form id="addTest1" enctype="multipart/form-data" action="/admin/quest-create.html?isNaked=1&test=<?=$get_id?>" class="TTWForm spoilerBlock" method="post">   
	  <div id="field1-container" class="field f_100">
		   <label for="field1">
				Текст вопроса
		   </label>
		   <textarea rows="5" cols="20" name="questText" id="field1" required="required"></textarea>
	  </div>
	  <div id="field3-container" class="field f_100">
		   <label for="field3">
				Минимум ответов (если 0 то неограничено)
		   </label>
		   <input name="minReply"  value="1" id="field3" required="required" type="text">
	  </div>   
	  <div id="field4-container" class="field f_100">
		   <label for="field4">
				Максимум ответов (если 0 то неограничено)
		   </label>
		   <input name="maxReply" value="1" id="field4" required="required" type="text">
	  </div>
	  
		<input name="Test_id" value="<?=$get_id?>" id="field5" type="hidden">
	 
	  <div id="form-submit" class="field f_100 clearfix submit">
		   <input value="Добавить" type="submit">
	  </div>
	  <div id="addTestReply" class="field f_100 infoError">

	  </div>
	</form>

(function() {

		var status = $('#addTestReply');

		$('#addTest1').ajaxForm({
			beforeSend: function() {
				status.empty();
				console.log('step1');
			},
			uploadProgress: function(event, position, total, percentComplete) {
				console.log('step2');
			},
			success: function() {
				console.log('step3');
			},
			complete: function(xhr) {
				data = jQuery.parseJSON(xhr.responseText);
				status.html(data.ReplyText);
				if(data.status=='ok'){
					ContentReload();
				}
				console.log('step4');
			}
		});
	})();
	var field1 = CKEDITOR.replace( 'field1' );
	AjexFileManager.init({
		returnTo: 'ckeditor',
		editor: field1
	});

if(isSet($_POST['questText']) or isSet($_POST['minReply']) or isSet($_POST['maxReply'])){
	$err_count=0;
	$this_date = date("Y-m-d H:i:s");

	$f_questText = mysql_escape_string($_POST['questText']);
	$f_Test_id = preg_replace('~\D~','',$_POST['Test_id']);
	$f_minReply = preg_replace('~\D~','',$_POST['minReply']);
	$f_maxReply = preg_replace('~\D~','',$_POST['maxReply']);

	if (empty($f_questText)) {
		$err_count++;
		$arr_req['ReplyText']='Текст вопроса не может быть пустым!';
		$arr_req['ErrorElemName']='questText';
	}
	if (empty($f_minReply)) {
		$err_count++;
		$arr_req['ReplyText']='Поле "Минимум ответов" не может быть пустым';
		$arr_req['ErrorElemName']='minReply';
	}
	if (empty($f_maxReply)) {
		$err_count++;
		$arr_req['ReplyText']='Поле "Максимум ответов" не может быть пустым';
		$arr_req['ErrorElemName']='maxReply';
	}
	if ($f_maxReply<$f_minReply) {
		$err_count++;
		$arr_req['ReplyText']='Минимальное число ответов не может быть больше максимального!';
		$arr_req['ErrorElemName']='minReply';
	}
	if (empty($f_Test_id)) {
		$err_count++;
		$arr_req['ReplyText']='Заполните имя!';
		$arr_req['ErrorElemName']='';
	}
	if ($get_test!=$f_Test_id){
		$err_count++;
		$arr_req['ReplyText']='Ошибка! Перезагрузите страницу!';
		$arr_req['ErrorElemName']='';
	}

	if($err_count==0){
		$sql_string = "SELECT `Priority` FROM `{$DB_FX}Quest` WHERE `Test_id`='{$f_Test_id}' ORDER BY `Priority` DESC LIMIT 1;";
		$sql_query = mysql_query($sql_string);
		$arr_row = mysql_fetch_row($sql_query);
		$Priority = $arr_row[0];
		if($Priority=='' or $Priority=='0' or $Priority<=0){
			$Priority=1;
		}else{
			$Priority++;
		}
		
		$sql_string="INSERT INTO `{$DB_FX}Quest` SET `Quest_text`='{$f_questText}', `Checked`='0', `Priority`='{$Priority}', `Test_id`='{$f_Test_id}', `Reply_min`='{$f_minReply}', `Reply_max`='{$f_maxReply}', `Reply_count`='0';";

		if(mysql_query($sql_string)){
			$arr_req['status']='ok';
			$arr_req['ReplyText']='Вопрос успешно добавлен!';
			
			$sql_string = "SELECT COUNT(*) FROM `{$DB_FX}Quest` WHERE `Test_id`='{$f_Test_id}';";
			$sql_query = mysql_query($sql_string);
			$arr_row = mysql_fetch_row($sql_query);
			$count_quest = $arr_row[0];
		
			$sql_string="UPDATE `{$DB_FX}Test` SET `Quert_count`='{$count_quest}' WHERE `Test_id`='{$f_Test_id}';";
			mysql_query($sql_string);
		}else{
			$arr_req['status']='fail';
			$arr_req['ReplyText']='Ошибка записи данных!';
		}
	}else{
		$arr_req['status']='fail';
		$arr_req['get_test']=$get_test;
	}
}
echo json_encode($arr_req);
Изображения:
Тип файла: jpg 2015-07-06_104944.jpg (8.9 Кб, 2 просмотров)
Тип файла: jpg 2015-07-06_105018.jpg (8.4 Кб, 2 просмотров)

Последний раз редактировалось psfdek, 06.07.2015 в 08:54.
Ответить с цитированием
  #2 (permalink)  
Старый 06.07.2015, 09:26
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сколько лишнего в коде и при этом даже намека нет о безопасности.
Ответить с цитированием
  #3 (permalink)  
Старый 06.07.2015, 10:03
Аватар для psfdek
Профессор
Отправить личное сообщение для psfdek Посмотреть профиль Найти все сообщения от psfdek
 
Регистрация: 14.02.2014
Сообщений: 157

Ок плохой код. (форма закрыта от общего доступа, тут просто защита от дураков).
А что на счет того что с первого раза не отсылается?
Ответить с цитированием
  #4 (permalink)  
Старый 06.07.2015, 10:31
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

В коде вообще нет никакой защиты, а вот написано...
Не знаю почему не отправляется, возможно не правильно используется плагин, а я не знаком с ним.
Ответить с цитированием
  #5 (permalink)  
Старый 06.07.2015, 10:41
Аватар для psfdek
Профессор
Отправить личное сообщение для psfdek Посмотреть профиль Найти все сообщения от psfdek
 
Регистрация: 14.02.2014
Сообщений: 157

от чего нет защиты от SQL инъекции что ли?
Ответить с цитированием
  #6 (permalink)  
Старый 06.07.2015, 10:52
Аватар для psfdek
Профессор
Отправить личное сообщение для psfdek Посмотреть профиль Найти все сообщения от psfdek
 
Регистрация: 14.02.2014
Сообщений: 157

О всемогучий рони приди,
И отдебаж мой кривой код.
Ответить с цитированием
  #7 (permalink)  
Старый 06.07.2015, 14:37
Аватар для psfdek
Профессор
Отправить личное сообщение для psfdek Посмотреть профиль Найти все сообщения от psfdek
 
Регистрация: 14.02.2014
Сообщений: 157

http://docs.cksource.com/ckeditor_ap...OR.editor.html
Короче я тут нашел .getData() - получить контент из объекта CKEditor у меня объеткт с объектами для каждого текстареа в модальном окне создаются при открытии модального окна и я из него беру объект CKEditorObj.editContentQuest.getData();
Короче так работает. Всё ништяк.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объект ajax и приостановка функции kilohertz_. AJAX и COMET 5 18.01.2015 16:33
Изменение значений input в форме перед ее отправкой через ajax rustleofstars jQuery 4 26.06.2012 17:40
Ajax таблица gofkane Работа 1 26.09.2011 18:26
Ajax таблица gofkane Работа 0 25.09.2011 11:53
Ajax разбор метода mycoding jQuery 14 21.05.2010 10:57