Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Replace 
V
    Опции темы
Igor_CH
Дата 16.6.2006, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 20.3.2005

Репутация: нет
Всего: нет



Перезаписываю несколько строк ($count = количество строк) таким способом:

Код

<?php
$i=0;
while ($row = @ mysql_fetch_array($result)){
$i++;
?>
<tr>
    <td valign=middle align=right>
    <?=$i;?> <input name="fotoname_[<?=$i;?>]" type="text" value="<?=$row['foto_name'];?>">
    <td valign=middle align=left>
    <input name="fototext_[<?=$i;?>]" type="text" value="<?=$row['text'];?>">
    </td>
</tr>

<?php
}
?>

............................................................

for ($i = 1; $i <=$count; $i++) {
if ($_POST["fotoname_"][$i] !== "") {
$sql_insert = "REPLACE INTO photo (foto_name, text, id_kat) VALUES  (".sql_quote($_POST["fotoname_"][$i]).",".sql_quote(($_POST["fototext_"][$i])).",".sql_quote($_GET['nId'])." ) ;";
$result = mysql_query($sql_insert,$con) or die (mysql_error()."<br>".$sql_insert);
}
}


Но при этом количество строк увеличивается в двое, почему так? 
PM MAIL   Вверх
Bikutoru
Дата 16.6.2006, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


Профиль
Группа: Участник
Сообщений: 522
Регистрация: 24.5.2005
Где: Москва

Репутация: 2
Всего: 22



А какие у таблицы photo уникальные индексы? 
REPLACE заменяет только те строки, у которых такое же значение уникального индекса, как и у вставляемой записи, остальные просто добавляет.
 


--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
Igor_CH
Дата 16.6.2006, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 20.3.2005

Репутация: нет
Всего: нет



таблица фото
id   id_kat    foto_name    text 

id был auto_increment, но auto_increment использовать нельзя

Как сделать уникальный индекс, можно поподробнее? 
PM MAIL   Вверх
Bikutoru
Дата 16.6.2006, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


Профиль
Группа: Участник
Сообщений: 522
Регистрация: 24.5.2005
Где: Москва

Репутация: 2
Всего: 22



Например так:
Код

CREATE UNIQUE INDEX ON photo (name);

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

Добавлено @ 16:27 
Сорри, там обязательно нужно имя указывать
Код
CREATE UNIQUE INDEX index_name ON photo(name)

http://dev.mysql.com/doc/refman/5.0/en/create-index.html 


--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
Igor_CH
Дата 16.6.2006, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 20.3.2005

Репутация: нет
Всего: нет



я id сделал как уникальным.
Тогда код выше не вносит ни каких изменений. 
PM MAIL   Вверх
Bikutoru
Дата 16.6.2006, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


Профиль
Группа: Участник
Сообщений: 522
Регистрация: 24.5.2005
Где: Москва

Репутация: 2
Всего: 22



Ты устанавливаешь значения для полей foto_name, text, id_kat. Соответственно, хотя бы на одном из них и должен стоять уникальный индекс. Иначе весь REPLACE лишен смысла и вместо него можно использовать INSERT! 


--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
Igor_CH
Дата 17.6.2006, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 20.3.2005

Репутация: нет
Всего: нет



Сделал поле ID уникальным
добавил его в hidden, получил код:

Код

<?php
$i=0;
while ($row1 = @ mysql_fetch_array($result1)){
$i++;
?>
<tr>
    <td valign=middle align=right>
    <?=$i;?> <input name="fotoname_[<?=$i;?>]" type="text" value="<?=$row1['foto_name'];?>">
    <td valign=middle align=left>
    <input name="fototext_[<?=$i;?>]" type="text" value="<?=$row1['text'];?>">
    <input name="id" type="hidden" value="<?=$row1['id'];?>">
    </td>
</tr>

<?php
}
?>
....................................        
....................................
for ($i = 1; $i <=$count; $i++) {
if ($_POST["fotoname_"][$i] !== "") {
$sql_insert = "REPLACE INTO photo (id, foto_name, text, id_kat) VALUES  (".sql_quote($_POST["id"]).",".sql_quote($_POST["fotoname_"][$i]).",".sql_quote(($_POST["fototext_"][$i])).",".sql_quote($_GET['nId'])." ) ;";
$result = mysql_query($sql_insert,$con) or die (mysql_error()."<br>".$sql_insert);
}
}


Ошибок нет, но изменения не происходят smile 

Измение происходит только в последнем поле. 

Это сообщение отредактировал(а) Igor_CH - 17.6.2006, 10:02
PM MAIL   Вверх
Igor_CH
Дата 17.6.2006, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 20.3.2005

Репутация: нет
Всего: нет



Все вроде разобрался. У ID тоже надо было дабавить $i

Код

$sql_insert = "REPLACE INTO photo (id, foto_name, text, id_kat) VALUES  (".sql_quote($_POST["id_"][$i]).",".sql_quote($_POST["fotoname_"][$i]).",".sql_quote(($_POST["fototext_"][$i])).",".sql_quote($_GET['nId'])." ) ;";
$result = mysql_query($sql_insert,$con) or die (mysql_error()."<br>".$sql_insert);
 
PM MAIL   Вверх
Igor_CH
Дата 17.6.2006, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 20.3.2005

Репутация: нет
Всего: нет



вот так записываю

Код

for ($i = $count+1; $i <=$s; $i++) {
if ($_POST["newfoto_"][$i] !== "") {
$sql_insert = "INSERT INTO photo (id, foto_name, text, id_kat) VALUES  (".sql_quote($_POST["max_"][$i]).",".sql_quote($_POST["newfoto_"][$i]).",".sql_quote(($_POST["newtext_"][$i])).", ".sql_quote($_GET['nId']).") ;";
$result = mysql_query($sql_insert,$con) or die (mysql_error()."<br>".$sql_insert);
}
}


поле ID уникальное (т.к. делаю REPLACE код пару сообщений выше)
вот такая ошибка: Duplicate entry '127' for key 1
INSERT INTO photo (id, foto_name, text, id_kat) VALUES ('131','фото','текст', '42') ;

Почему дупликат ведь я пытаюсь записать в поле ID значение 131, а не 127?
  

Это сообщение отредактировал(а) Igor_CH - 17.6.2006, 19:28
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.1157 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.