Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Перезапись в таблицу
 
 автор: Dizels   (27.11.2007 в 20:01)   письмо автору
 
 

Запрос на обновление записи в таблице:

 $query = "UPDATE enterprise SET 
                id='$id',
                                                 ..................
        ch_bithday='$ch_bithday',
                                                ...................
                          WHERE id_catalog='$id_catalog'";


Выдает ошибку:

Duplicate entry '2' for key 1

Переменная $ch_bithday имеет 2 значения: show и hide (описывает checkbox).
Вот структура колонки ch_bithday:

  `ch_bithday` enum('show','hide') NOT NULL default 'show',


Подскажите что за ошибка(что она означает) и как ее исправить

   
 
 автор: Trianon   (27.11.2007 в 20:30)   письмо автору
 
   для: Dizels   (27.11.2007 в 20:01)
 

а что такое многоточие?

   
 
 автор: Dizels   (27.11.2007 в 20:51)   письмо автору
 
   для: Trianon   (27.11.2007 в 20:30)
 

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

$query = "UPDATE enterprise SET 
                id='$id',
                name='$name',
                form='$form',
                leader='$leader',
                bithday_leader='$l_bithday',
                ch_bithday='$ch_bithday',
                activity='$activity',
                rewards='$rewards',
                adress='$adress',
                sity='$sity',
                phone='$phone',
                fax='$fax',
                email='$email',
                site='$site',
                additionally='$dopolnitelno'
                          WHERE id_catalog='$id_catalog'";

Решил поставить многоточие, чтобы много текста не было)

   
 
 автор: Trianon   (27.11.2007 в 20:56)   письмо автору
 
   для: Dizels   (27.11.2007 в 20:51)
 

ругань у Вас идет на duplicate entry 2 , то есть на поле name . На нем, похоже , стоит уникальный ключ, а Вы пытаетесь засунуть в таблицу две строки с одним и тем же name.

   
 
 автор: Dizels   (27.11.2007 в 21:09)   письмо автору
 
   для: Trianon   (27.11.2007 в 20:56)
 

Сейчас все перепроверю, но добавлена в код одна строка:

ch_bithday='$ch_bithday',

До этого код работал исправно.

   
 
 автор: Dizels   (27.11.2007 в 21:12)   письмо автору
 
   для: Dizels   (27.11.2007 в 21:09)
 

Вот код где я определяю переменную:

  // Определяем, нужно ли скрывать
  if($_POST['ch_bithday'] == "on") $ch_bithday = "hide";
  else $ch_bithday = "show";

   
 
 автор: Trianon   (27.11.2007 в 21:15)   письмо автору
 
   для: Dizels   (27.11.2007 в 21:09)
 

Если Вы полагаете, что знаете в которой строке проблема, какой смысл спрашивать, что происходит?
Если полагаете , что не знаете, почему не слушаете то, что Вам говорят?

   
 
 автор: Dizels   (27.11.2007 в 21:31)   письмо автору
 
   для: Trianon   (27.11.2007 в 21:15)
 

Извините:)
Видимо я чего-то не догоняю:)
>Вы пытаетесь засунуть в таблицу две строки с одним и тем же name.
Не пойму это как?

   
 
 автор: Trianon   (27.11.2007 в 21:36)   письмо автору
 
   для: Dizels   (27.11.2007 в 21:31)
 

видимо, уже одна такая строка там есть.

   
 
 автор: Dizels   (27.11.2007 в 22:03)   письмо автору
 
   для: Trianon   (27.11.2007 в 21:36)
 


<?php

  
// Устанавливаем соединение с базой данных
  
require_once("config.php");


  
// Проверяем, переданы ли скрытые поля формы

if(empty($id)) { echo "Не передана переменная предприятия";
         exit;
         }
if(empty(
$id_catalog)) { echo "Не передана переменная каталога";
         exit;
         }

  
// Проверяем, заполнены ли поля
  
if(empty($_POST['name'])) links("Введите название предприятия.");
  if(empty(
$_POST['leader'])) links("Введите ФИО руководителя.");
  if(empty(
$_POST['activity'])) links("Введите виды деятельности.");

  
// Получаем переменные и где надо заменяем одинарные кавычки на обратные
$form $_POST['form'];
  
$name str_replace("'","`",$_POST['name']);

  
$leader str_replace("'","`",$_POST['leader']);

$l_day $_POST['l_day']; 
$l_month $_POST['l_month']; 
$l_year $_POST['l_year']; 

  
$l_bithday $l_day.".".$l_month.".".$l_year;

  
// Определяем, скрыт параграф или нет
  
if($_POST['ch_bithday'] == "on"$ch_bithday "hide";
  else 
$ch_bithday "show";

  
$activity str_replace("'","`",$_POST['activity']);
  
$rewards str_replace("'","`",$_POST['rewards']);
  
$adress str_replace("'","`",$_POST['adress']);
  
$sity str_replace("'","`",$_POST['sity']);
  
$phone str_replace("'","`",$_POST['phone']);
  
$fax str_replace("'","`",$_POST['fax']);
  
$email str_replace("'","`",$_POST['email']);
  
$site str_replace("'","`",$_POST['site']);
  
$dopolnitelno str_replace("'","`",$_POST['dopolnitelno']);


  if(empty(
$_POST['id_catalog']))$parent=0;
  else 
$parent $_POST['id_catalog'];



 
  
// Формируем и осуществляем SQL-запрос на исправление страны

  
$query "UPDATE enterprise SET 
                id='
$id',
                name='
$name',
                form='
$form',
                leader='
$leader',
                bithday_leader='
$l_bithday',
                ch_bithday='
$ch_bithday',
                activity='
$activity',
                rewards='
$rewards',
                adress='
$adress',
                sity='
$sity',
                phone='
$phone',
                fax='
$fax',
                email='
$email',
                site='
$site',
                additionally='
$dopolnitelno'
                          WHERE id_catalog='
$id_catalog'";
  if(
mysql_query($query))
    {
      
// В случае успеха, осуществляем автоматический переход на
      // страницу стран
        
echo "<HTML><HEAD>
            <META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php'>
            </HEAD></HTML>"
;

    }
    else 

 echo 
mysql_error();



?>



Вот весь код, вроде нету еще одной такой строки.

   
 
 автор: Trianon   (27.11.2007 в 22:26)   письмо автору
 
   для: Dizels   (27.11.2007 в 22:03)
 

речь идет о строке (о записи) в таблице БД, а не о строке в коде.

   
 
 автор: Dizels   (27.11.2007 в 23:22)   письмо автору
 
   для: Trianon   (27.11.2007 в 22:26)
 

может тогда имеется ввиду, что по умолчанию в столбец ch_bithday подставляется "show" и при редактировании опять в переменной $ch_bithday параметр show ?

   
 
 автор: Trianon   (28.11.2007 в 00:31)   письмо автору
 
   для: Dizels   (27.11.2007 в 23:22)
 

чем гадать на кофейной гуще, замените строку
echo mysql_error();
на строку

echo "Error in <br> $query  <br>".mysql_error(); 


и поглядите полный текст сформировавшегося запроса.
Заодно посмотрите, какой в таблице первый индекс.

   
 
 автор: Trianon   (27.11.2007 в 22:41)   письмо автору
 
   для: Dizels   (27.11.2007 в 22:03)
 

.возможно, дело не в name, а в id. Если id- первичный ключ - даже вероятно.
Кстати, я вообще не понял, откуда берется значение в переменной $id.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования