Update с переменными

peretc001

Новичок
Добрый день.

У меня есть поля
date
opisanie
которые выводятся с помощью переменной i++

PHP:
<?php
 $opisanie = mysql_query("SELECT * FROM opisanie WHERE id = '$id' ORDER by DATE ASC");
         $i = 0;
         while($row = mysql_fetch_assoc($opisanie))
             {
             $i++;
            
            
             ?>
                         <TR>
                             <TD class="date"><input name='date<?php echo $i ?>' value='<?php echo $row[date]; ?>'></TD>
                             <TD class="r"><textarea name='opisanie<?php echo $i ?>' /> <?php echo $row[opisanie]; ?> </textarea></TD>
                         </TR>
            
            
             <?php } ?>

то есть получаются поля:
date1
opisanie1

date2
opisanie2 и т.д. до бесконечности

Мне нужно при внесении изменений в эти поля обновить запись через UPDATE.

Если было бы поля только 2 (date и opisanie) проблем нет, обновляю так:


PHP:
<?php
 if(isset($_POST['update']))
             {
                 mysql_query("UPDATE opisanie SET
                 date = '$_POST[date]',
                 opisanie = '$_POST[opisanie]'
                 WHERE id = '$id' ");
             }
 ?>


Подскажите, как добавить к ним переменную
 

С.

Продвинутый новичок
При неопределнном количестве переменных, лучше организовать из них массив.

<input name='date[<?php echo $i ?>]' value='<?php echo $row[date]; ?>'>
 

С.

Продвинутый новичок
<input name='date[<?php echo $i ?>]' value='<?php echo $row[date]; ?>'>
 

peretc001

Новичок
так я это уже сделал.
Выводит date1, opisanei1, date2, opesanie2 и т.д. С этим все нормально. А как теперь их записать в базу.
На данный момент скрипт позволяет записать только данные из date, opisanie. Остальные поля date2, opisanie2 игнорируются.
 

peretc001

Новичок
можно сделать немного по другому:
есть
id
date
opisanie
Добавляем ячейку iid

этот iid = id из другой таблицы

Собственно вопрос, как обновить записи
PHP:
<?php
			if(isset($_POST['update']))
			{
				mysql_query("UPDATE opisanie SET 
				id = '$_POST[id]',
				date = '$_POST[date]',
				opisanie = '$_POST[opisanie]'
				WHERE iid = '$id' ");
			}
		
			
// Проверка, пустая или нет, существует иль жэ нет
	$opisanie = mysql_query("SELECT * FROM opisanie WHERE iid = '$id' ORDER by DATE ASC");
		while($row = mysql_fetch_assoc($opisanie))
			{
			
			?>
						<TR>
							<input type="hidden" name='iid' value='<?php echo $row[id]; ?>'>
							<TD class="date"><input name='date' value='<?php echo $row[date]; ?>'></TD>
							<TD class="r"><textarea name='opisanie' /> <?php echo $row[opisanie]; ?> </textarea></TD>
						</TR>
			
			
			<?php } ?>
Такая конструкция не работает. Чую истина где-то рядом :)
 

peretc001

Новичок
Проблема в том, что тут не добавление новой записи через Inser into, а обновление нескольких существующих.

В итоге выводится примерно следующее:
Дата | Описание
2011-07-07 | Проведена встреча
2011-07-08 | Выставлен счет
и т.д.
 

С.

Продвинутый новичок
Попытка номер 3:

<input name='date[<?php echo $i ?>]' value='<?php echo $row[date]; ?>'>

Сравни посимвольно с тем что ты "уже видел":

<input name='date<?php echo $i ?>' value='<?php echo $row[date]; ?>'>
 

peretc001

Новичок
е-мое, вот это я слепой.

ткните, пожалуйста, меня носом, в этом коде что изменить:
PHP:
if(isset($_POST['update']))
            {
                mysql_query("UPDATE opisanie SET 
				date[] = '$_POST[date]',
				opisanie[] = '$_POST[opisanie]'
				WHERE id = '$id' ");
            }
 

peretc001

Новичок
:( у меня скоро мозг сам будет организовывать цикл, зациклившись.

Спасибо Вам за подсказки! Буду копать var_dump
 

peretc001

Новичок
а придумал как это обойти.
Переходим к редактированию конкретной записи, например data[1] с iid=1 и там уже изменяем.
Но это надо создавать отдельную страницу, где зашита форма которая фильтрует запись по iid, и уже ее можно изменить.
PHP:
<?php 

// Далее поплыли в запрос
	$id = htmlspecialchars(trim($_GET['id']));	
	
	// Далее поплыли в запрос
	$iid = htmlspecialchars(trim($_GET['iid']));


if(isset($_POST['update']))
			{
				mysql_query("UPDATE opisanie SET 
				date = '$_POST[date]',
				opisanie = '$_POST[opisanie]'
				WHERE iid = '$iid' ");
			}
?>
<form action="opisanie.php?id=<?php echo $id; ?>&iid=<?php echo $iid ?>" method="post" name="update">
<input type="hidden" name="id" value='<?php echo $id; ?>' />
<input type="hidden" name="iid" value='<?php echo $iid; ?>' />
<?php
// Проверка, пустая или нет, существует иль жэ нет
	$opisanie = mysql_query("SELECT * FROM opisanie WHERE id = '$id' AND iid = '$iid' ORDER by DATE ASC");
		while($row = mysql_fetch_assoc($opisanie))
			{
			
			
			?>
		
						<TR>
							
							<TD class="date"><input name='date' value='<?php echo $row[date]; ?>'></TD>
							<TD class="r"><textarea name='opisanie'><?php echo $row[opisanie]; ?></textarea></TD>
							
						</TR>
			<?php
			}
		?>	
<input type="submit" value="Отправить" name="update">
			</form>
Но это не удобно.
 

peretc001

Новичок
Через эту штуку я вывожу что было передано
PHP:
foreach ($_POST as $varname => $varvalue) {
    $post[$varname] = $varvalue;
}
print "<pre>";
var_dump($post[date]);
var_dump($post[opisanie]);
подскажите, пожалуйста, как теперь записать это в базу

PHP:
mysql_query("UPDATE opisanie SET 
				date = '$post[date]',
				opisanie = '$post[opisanie]'
				WHERE id = '$id' ");
так не записывает.
 

С.

Продвинутый новичок
Давай поэтапно. Запиши сначала в базу то, что идет под первым индексом. Только одну запись, забудь пока об остальных.
 

KorP

Новичок
И сразу стоит подумать - что будет, если у тебя будет 100 или 1000 записей. Надо сразу подумать о том, что нужно обновлять только те записи, в которые внесли изменения.

Когда ты выводишь свои данные в цикле, присваивай каждой записи индекс массива, при изменении в поле, записываешь куда-нить в хайден поле индексы, изменённых строк (тут JS тебе в помощь, например onblur), разбираешь эту переменную, вытаскиваешь idшники, ну а дальше по ним уже вытаскиваешь данные для запроса. Ну или Ajax`ом апдейтить сразу, так же по onblur.
 

peretc001

Новичок
Спасибо Вам за советы. Щас работы погорло, чуть позже займусь этим вопрос
 
Сверху