Перейти к содержимому


Партнерская программа Kredov

Почему размножаются записи в таблице MySQL

#1 EugeneM

EugeneM
  • Пользователь
  • 20 сообщений
  • Репутация: 0
0

Отправлено 10 Июнь 2009 - 02:01

Ситуация.
Имеется таблица articles. В ней поля - id, caption и т.д.
Еще имеется таблица articles_links, в которой нужно организовать перекрестные ссылки между записями из первой таблицы. Таблица articles_links содержит поля id, article_id, linked_article_id. id - это просто ключевое поле (auto increment), article_id и linked_article_id содержат соответственно id "родительской" статьи и id статьи, на которую в родительской нужно поставить ссылку. Для каждой родительской, соответственно, можно чтобы было неограниченное количество дочерних.

Так вот, есть php файл, в котором:
elseif ($a_mode == "linkeditor"){  // тут всякая чепуха - выводим кучу текста и прочего  // далее идет форма:  echo "<form method=\"get\" action=\"$action_php_file\">";  // ...тут прописано построение комбо-бокса со списком статей из БД...  echo "<input type=\"hidden\" name=\"category\" value=\"$a_cateуgory\">";  echo "<input type=\"hidden\" name=\"mode\" value=\"linknew\">";  echo "<input type=\"hidden\" name=\"id\" value=\"$a_id\">";  echo "<input type=\"submit\" name=\"link\" value=\"$btn_name_save\">";  // На этом форма заканчивается
И чуть ниже в этом же файле:
elseif ($a_mode == "linknew"){  // Тут проверяем все ли правильно передали  $query = "INSERT INTO $db_table_articles_links    (article_id, linked_article_id)    VALUES ($article_id, $article_linked_id)";  $sql = mysql_query($query) or die(mysql_error());  // Ну и дальше проверяем удачно ли добавилось}

Так вот, в результате работы этого иногда в таблицу articles_links добавляется (как и правильно) всего одна запись, содержащая необходимые ссылки. А иногда целых 3 штуки абсолютно одинаковых (ну кроме поля id - там просто порядковые числа у них будут).
Судорожно трижды кнопку "Сохранить" я не нажимаю, чтобы запрос аж 3 раза отправить. И, причем, никакой логики - когда 1, а когда 3 записи появится тоже нет: на одной и той же статье при связывании ее с другой (тоже одинаковой в обоих случаях) сейчас появится одна запись, а в следующий раз уже 3 штуки.

 

 

  • 0

#2 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 11 Июнь 2009 - 00:58

EugeneM, что за переменная $a_mode? Случаем не GET?
По какому пути переходим и с какими дополнительными параметрами?

Попробуйте на всякий пожарный, все исполняемые скрипты перенести выше первых выводов на экран. И сразу как добавилась запись перебросить пользователя, чтобы сбросить GET параметры.
header("location: {$_SERVER['PHP_SELF']}");
exit();

Больше толком пока сказать ничего не могу, возможно дело в ваших проверках и скрипт выполняется даже тогда когда get параметры не переданы, хотя это вряд ли.
И я бы вам посоветовал передавать POST а не GET. Возможно проблема в том, что затем вы переходите на страницу у которой уже заведомо get параметры приняли значения из формы.
  • 0


Оформление форума – IPBSkins.ru