Javascript.RU

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

Добавление, редактирование и удаление на лету
Добрый день!
У меня вот какая задача: нужно добавлять, редактировать и удалять данные из базы данных при помощи Ajax.
Я вывожу в браузер данные из базы данных в виде таблицы. Три ячейки содержат текстовые данные и одна ячейка содержит изображение(в базе хранится только имя файла).
С редактированием ячеек с текстовыми данными проблем не возникло, а вот с теми ячейками где у меня картинки я никак не могу справиться.
Принцип такой:
при наведении на ячейку с текстовыми данными появляется поле ввода типа input со значением этой ячейки, меняем это значение на новое и данные по средствам $.ajax отправляются на обработчик там идет редактирование в бд, а в ячейке у нас уже новое значение.

При наведение на ячейку с картинкой появляется кнопка upload file при нажатии на которую происходит загрузка картинки в определенную директорию и отображение ее в этой ячейке.

Все бы хорошо, но мне нужно, чтобы у меня была одна функция, к примеру edit, в которой я мог бы собрать строку для обработчика с изображением(если оно изменилось) и без него если пользователь предпочел его не менять.

На данный момент у меня есть функция загрузки изображения и функция редактирования текстовых данных.
Главное, чтобы страничка не перезагружалась и все происходило на лету.
Вот мой код index файла (тут происходит вывод данных):
<?php
	session_start();
	include 'db.php';
	$query = "SELECT * FROM books";
	$result = mysql_query($query) or die('MySql Error' . mysql_error());
?>
<html>
	<head>
		<title></title>
		<script type="text/javascript" src="js/jquery-1.3.2.js" ></script>
		<script type="text/javascript" src="js/AjaxUpload.js" ></script>
		<script type="text/javascript" src="js/AddEditDelete.js" ></script>
		
		<link rel="stylesheet" type="text/css" href="css/reset.css" />
		<link rel="stylesheet" type="text/css" href="css/styles.css" />
	</head>
	<body>
		<table class="zebra">
			<tr>
				<th>Author</th>
				<th>Title</th>
				<th>Photo</th>
				<th>Genre</th>
				<th>&nbsp;</th>
			</tr>
			<?php 
				while ($row = mysql_fetch_array($result)) :
				$id = $row['book_id'];
				$author = $row['book_author'];
				$title = $row['book_title'];
				$photo = $row['book_photo'];
				$genre = $row['book_genre'];
			?>
			<tr id="<?php echo $id; ?>" class="edit" name="edit">

				<td>
					<span id="author_<?php echo $id; ?>" class="text">
						<?php echo $author; ?>
					</span>
					<input type="input" value="<?php echo $author; ?>" class="editbox" id="author_input_<?php echo $id; ?>">
				</td>

				<td>
					<span id="title_<?php echo $id; ?>" class="text">
						<?php echo $title; ?>
					</span>
					<input type="input" value="<?php echo $title; ?>" class="editbox" id="title_input_<?php echo $id; ?>">
				</td>

				<td>
					<img src="uploads/<?php echo $photo; ?>" id="photo_<?php echo $id; ?>" class="text" width="80" height="100">
					<div id="upload" >
						<span>
							Upload File
						<span>
					</div>

					<span id="status" >
					</span>

					<ul id="files" >
					</ul>
				</td>

				<td>
					<span id="genre_<?php echo $id; ?>" class="text">
						<?php echo $genre; ?>
					</span>
					<input type="input" value="<?php echo $genre; ?>" class="editbox" id="genre_input_<?php echo $id; ?>">
				</td>

				<td>
					<a href="index.php" name="delete" id="<?php echo $id; ?>">X</a>
				</td>

			</tr>
			<?php endwhile; ?>
		</table>
	</body>
</html>


А вот мои скрипты редактирования, удаления и загрузки:
$(document).ready(function()
{
	
	$(".delete").live("click", function()
	{
		var id = $(this).attr("id");
		var tr = $(this).parent().parent();
		var operationType = $(this).attr("name");
		var dataString = "id="+ id +"&operation_type="+ operationType;
		if(confirm("Sure you want to delete? "))
		{
			$.ajax({
				type: "POST",
				url: 'delete',
				data: dataString,
				cache: false,
				success: function(event)
				{
					tr.hide();
					event.stopImmediatePropagation();
				}
			});
			return false;
		}
	});
	
	$(".edit").live("click", function() {
		var id = $(this).attr("id");

		$("#author_"+ id).hide();
		$("#title_"+ id).hide();
		$("#genre_"+ id).hide();
		$("#photo_"+ id).hide();
		
		$("#author_input_"+ id).show();
		$("#title_input_"+ id).show();
		$("#genre_input_"+ id).show();
		$("#photo_input_"+ id).show();
	});
	
	$(".edit").live("change", function(event) {
		var id = $(this).attr("id");
		var operationType = $(this).attr("name");
		
		var author_val = $("#author_input_"+ id).val();
		var title_val = $("#title_input_"+ id).val();
		var genre_val = $("#genre_input_"+ id).val();
		
		var dataString = "book_id="+ id +"&book_author="+ author_val +"&book_title="+ title_val +"&book_genre="+ genre_val +"&operation_type="+ operationType;
		
		if(author_val.length > 0 && title_val.length > 0 && genre_val.length > 0) {
			$.ajax({
				type: "POST",
				url: 'edit.php',
				data: dataString,
				cache: false,
				success: function(event)
				{
					$("#author_"+ id).html(author_val);
					$("#title_"+ id).html(title_val);
					$("#genre_"+ id).html(genre_val);
					
					event.stopImmediatePropagation();
				}
			});
		} else {
			alert("Fill in all fields");
		}
	});
	
	$(".editbox").live("mouseup", function(event) {
		event.stopImmediatePropagation();
	});
	
	$(document).mouseup(function() {
		$(".editbox").hide();
		$(".text").show();
	});
	
	$(document).ready(function(){
		var uploadButton = $('#upload');
		var status = $('#status');
		new AjaxUpload(uploadButton, {
			action: 'upload.php',
			name: 'uploadfile',
			onSubmit: function(file, ext){
				 if (! (ext && /^(jpg|png|jpeg|gif)$/.test(ext))){ 
					status.text('Only JPG, PNG or GIF files are allowed');
					return false;
				}
				status.text('Uploading...');
			},
			onComplete: function(file, response){
				status.text('');
				if(response==="success"){
					$('<li></li>').appendTo('#files').html('<img src="./uploads/'+file+'" alt="" /><br />'+file).addClass('success');
				} else{
					$('<li></li>').appendTo('#files').text(file).addClass('error');
				}
			}
		});

	});
});

в обработчиках редактирования и удаления ничего особенного не происходит.
проверяю пришел ли id (
if($_POST['book_id'])
) и если пришел делаю запрос в бд на редактирование или удаление.

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

Последний раз редактировалось denvasden, 14.03.2013 в 15:40.
Ответить с цитированием
  #2 (permalink)  
Старый 14.03.2013, 18:28
Аватар для keen
Профессор
Отправить личное сообщение для keen Посмотреть профиль Найти все сообщения от keen
 
Регистрация: 28.03.2012
Сообщений: 376

не совсем ясно
попробуй переформулировать:
"мне нужна функция, которая принимает следующие параметры ... , делает ... и возвращает значение ..."
Ответить с цитированием
  #3 (permalink)  
Старый 14.03.2013, 19:17
Интересующийся
Отправить личное сообщение для denvasden Посмотреть профиль Найти все сообщения от denvasden
 
Регистрация: 14.03.2013
Сообщений: 13

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

у меня есть функция:
$(document).ready(function(){
		var uploadButton = $('#photo_input');
		var status = $('#status');
		new AjaxUpload(uploadButton, {
			action: 'upload.php',
			name: 'uploadfile',
			onSubmit: function(file, ext){
				 if (! (ext && /^(jpg|png|jpeg|gif)$/.test(ext))){ 
					status.text('Only JPG, PNG or GIF files are allowed');
					return false;
				}
				status.text('Uploading...');
			},
			onComplete: function(file, response){
				status.text('');
				if(response==="success"){
					$('<li></li>').appendTo('#files').html('<img src="./uploads/'+file+'" alt="" /><br />'+file).addClass('success');
				} else{
					$('<li></li>').appendTo('#files').text(file).addClass('error');
				}
			}
		});

	});


она отвечает за загрузку картинки при нажатии на #photo_input.
у меня таких #photo_input много,
<table border="1">
	<tr>
		<td>
			<div id="photo_input_1">Upload File</div>
		</td>
	</tr>
	<tr>
		<td>
			<div id="photo_input_2">Upload File</div>
		</td>
	</tr>
</table>

но срабатывает она только на первом #photo_input.

не буду же я описывать для каждого #photo_input новую функцию с новым uploadButton.
вот что я имею в виду:
var uploadButton1 = $('#photo_input_1');
var uploadButton2 = $('#photo_input_2');

Можно ли сделать так, чтобы эта функция вызывалась для каждого #photo_input.
Спасибо!

Последний раз редактировалось denvasden, 14.03.2013 в 19:20.
Ответить с цитированием
  #4 (permalink)  
Старый 15.03.2013, 11:21
Аватар для keen
Профессор
Отправить личное сообщение для keen Посмотреть профиль Найти все сообщения от keen
 
Регистрация: 28.03.2012
Сообщений: 376

зависит от того что за AjaxUpload'ер такой, а вернее, что он принимает первым аргументом. если вызвавший его элемент, то -
<table border="1">
    <tr>
        <td>
            <div class="photo_input" id="photo_input_1">Upload File</div>
        </td>
    </tr>
    <tr>
        <td>
            <div class="photo_input" id="photo_input_2">Upload File</div>
        </td>
    </tr>
    <tr>
        <td>
            <div class="photo_input" id="photo_input_3">Upload File</div>
        </td>
    </tr>
    ...    
    <tr>
        <td>
            <div class="photo_input" id="photo_input_100">Upload File</div>
        </td>
    </tr>
</table>

$(document).ready(function(){
		var status = $('#status');
		$('.photo_input').on('click', function () {
			new AjaxUpload(this, {
				action: 'upload.php',
				name: 'uploadfile',
				onSubmit: function(file, ext){
					 if (! (ext && /^(jpg|png|jpeg|gif)$/.test(ext))){ 
						status.text('Only JPG, PNG or GIF files are allowed');
						return false;
					}
					status.text('Uploading...');
				},
				onComplete: function(file, response){
					status.text('');
					if(response==="success"){
						$('<li></li>').appendTo('#files').html('<img src="./uploads/'+file+'" alt="" /><br />'+file).addClass('success');
					} else{
						$('<li></li>').appendTo('#files').text(file).addClass('error');
					}
				}
			}); 
		});        
    });
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическое удаление строк таблицы Tankist Events/DOM/Window 16 03.07.2013 16:42
как реализуется редактирование и оформление текста без традиционных форм macdack Общие вопросы Javascript 0 03.11.2012 20:23
Динамическое добавление и удаление одной и тойже вкладки в Ext.tab.Panel potkin ExtJS 2 29.07.2012 16:47
Редактирование по столбцам в jqGrid anton11 jQuery 0 29.04.2011 15:25
Добавление и удаление полей в форму anoth3r Events/DOM/Window 1 11.09.2009 15:10