Здравствуйте! Выручайте, плиз! Я думал уже всё нормально будет, но тут начал тестировать и бац! Обнаружил ацццкий баг! Попытаюсь рассказать как можно яснее! Значит у меня есть главная таблица, в которой хранятся ID записей! Эта таблица идёт на просмотр! ID сравнивается с ID в других таблицах и выносятся данные, которые соответствуют(с этим всё нормально). Значит суть такова: В этой самой главной таблице вот такая связь: http://www.pictureshack.ru/images/140Problema1.jpg И когда мы выполняем УДАЛЕНИЕ, к примеру ОТДЕЛА(id_otd), то в ГЛАВНОЙ таблице на его месте возникает пустая строка(так и должно быть)! НО, когда я удаляю ПРЕДПРИЯТИЕ(id_predpr), то происходит следующее: http://www.pictureshack.ru/images/5178Problema2.jpg Т.е. как вы видите! вместо того, чтобы оставить ПУСТОЕ поле он тупо не выводит на просмотр ВСЁ, где был этот ID. Я долго парился и вот что обнаружил... Как я уже сказал ОТДЕЛ(id_otd) удаляется нормально и остаётся ПУСТАЯ строка, но в отделе содержится лишь 1 таблица! А в ПРЕДПРИЯТИИ ещё с 3 соединяется! Когда я убрал в коде ЭТО САМОЕ СОЕДИНЕНИЕ с ТЕМИ 3, то всё заработало нормально! Но мне то нужно, чтобы и те 3 участвовали(OKFS, OKATO, OKVED). Как быть то?? Вот, сократил до максимума код, оставив только проблемную часть! Посмотрите пожалуйста! PHP: <?php session_set_cookie_params(30800); session_start(); if (!$_SESSION["enter"] || $_SESSION["right"]<"40") { echo '<script language="JavaScript" type="text/javascript"> <!-- location="http://test1.ru/new/menu/Regonout_php/login.php" //--> </script>'; } else { echo"<html>"; echo"<HEAD>"; echo"<META http-equiv=content-type content=\"text/html; charset=windows-1251\">"; echo"</HEAD>"; echo"<body bgcolor = \"#ffffff\">"; echo"<center><h2><font color=\"082567\">Операции над статистическими формами</font></h2></center>"; echo"<table align=\"center\"border=5>"; echo"<tr align=\"center\">"; echo"<td><font color=\"2a52be\"><font size=\"3px\"><b>Название формы</b></font></font></td>"; echo"<td><font color=\"2a52be\"><font size=\"3px\"><b>Предприятие</b></font></font></td>"; echo"<td><font color=\"2a52be\"><font size=\"3px\"><b>Сроки обработки</b></font></font></td>"; echo"<td><font color=\"2a52be\"><font size=\"3px\"><b>Операция</b></font></font></td>"; echo"</tr>"; $link = mysql_connect("**********", "******","*****") or die("Could not connect"); mysql_select_db("stat_forms") or die("Could not select database"); //главная таблица $ath = mysql_query("SELECT forms_glav.* FROM forms_glav LEFT JOIN forms USING(`id_form`) ORDER BY forms.`naimenov`"); if($ath) { while($form = mysql_fetch_array($ath)) { $form_id=htmlspecialchars($form['id_form']); $form_id_pred=htmlspecialchars($form['id_predpr']); $form_obr_s=htmlspecialchars($form['srok_poluch']); $form_obr_po=htmlspecialchars($form['srok_otpr']); $form_id_otd=htmlspecialchars($form['id_otd']); $form_id_name=htmlspecialchars($form['id_name']); //название формы $ath2 = mysql_query("SELECT * FROM forms WHERE id_form=".$form_id); if($ath2) { while($forms = mysql_fetch_array($ath2)) { $forms_id=htmlspecialchars($forms['id_form']); $forms_naim=htmlspecialchars($forms['naimenov']); } //вот то самое ПРЕДПРИЯТИЕ, с которым проблемы $ath9 = mysql_query("SELECT * FROM predpriyat WHERE id_predpr=".$form_id_pred); if($ath9) { while($pred = mysql_fetch_array($ath9)) { $predpr=htmlspecialchars($pred['nazv']); $predpr_id=htmlspecialchars($pred['id_predpr']); $okfs=htmlspecialchars($pred['okfs']); $okato=htmlspecialchars($pred['okato']); $okved=htmlspecialchars($pred['okved']); } //таблица, соединяющаяся с таблицей predpriyat! $ath10 = mysql_query("SELECT * FROM okfs WHERE id=".$okfs); if($ath10) { while($okfs_num = mysql_fetch_array($ath10)) { $okfs_nazv=htmlspecialchars($okfs_num['num']); } //таблица, соединяющаяся с таблицей predpriyat! $ath12 = mysql_query("SELECT * FROM okved WHERE id=".$okved); if($ath12) { while($okved_num = mysql_fetch_array($ath12)) { $okved_nazv=htmlspecialchars($okved_num['num']); } //таблица, соединяющаяся с таблицей predpriyat! $ath11 = mysql_query("SELECT * FROM okato WHERE id=".$okato); if($ath11) { while($okato_num = mysql_fetch_array($ath11)) { $okato_nazv=htmlspecialchars($okato_num['num']); } echo "<link rel=\"stylesheet\" href=\"style.css\" type=\"text/css\">"; echo "<tr><td><font color=\"black\">".$forms_naim."</font></td> <td><font color=\"black\">".$predpr."</font> //тут всплывающее окно, чтобы просматривать ОКФС, ОКАТО и ОКВЭД предприятия! <a href=\"#\" onclick=\"document.getElementById('wind_".$predpr_id."').style.display='block'; return false;\"> <img src=\"http://test1.ru/new/prosmotr/Forms/eye.png\" alt=\"Просмотр данных предприятия\" title=\"Просмотр данных предприятия\" border=\"0\" > </a> <div id=\"wind_".$predpr_id."\" class=\"wind\"><br> <center> <table border=5> <tr><td><font color=\"082567\"><font size=\"3px\">Название:</font></font></td> <td><textarea name=comment rows=5 cols=25 readonly>$predpr</textarea></td></tr> <tr><td><font color=\"082567\"><font size=\"3px\">ОКФС:</font></font></td> <td><textarea name=comment rows=1 cols=25 readonly>$okfs_nazv</textarea></td></tr> <tr><td><font color=\"082567\"><font size=\"3px\">ОКАТО:</font></font></td> <td><textarea name=comment rows=1 cols=25 readonly>$okato_nazv</textarea></td></tr> <tr><td><font color=\"082567\"><font size=\"3px\">ОКВЭД:</font></font></td> <td><textarea name=comment rows=1 cols=25 readonly>$okved_nazv</textarea></td></tr> </table></center> <button type=\"button\" value=\"закрыть\" onclick=\"document.getElementById('wind_".$predpr_id."').style.display='none'; return false;\"> Закрыть</button> </div> </td> <td><font color=\"black\"><font color=\"2a52be\">Получил: </font>" .$form_obr_s. "  <font color=\"2a52be\"> Отправил: </font>" .$form_obr_po."</font></td> <td> <a href=editform_form.php?id=".$form_id."><input type=submit value=\"Изменить\"></a> <a href=delete_form.php?id=".$form_id."><input type=submit value=\"Удалить\"></a> </td> </tr>"; } } } } } } } echo "</table>"; mysql_close($link); } ?> Вот! :cry:
Какую именно часть? Там просто в начале вопроса на скринах вся проблемная часть выложена! и таблицы, которые необходимы!
Вот! Написал к проблемным таблицам! http://www.pictureshack.ru/images/2996Problema3.jpg id_otd и id_name ПОКА трогать не будем! Надо с этими разобраться почему так..
Dimitry_LD когда удаляешь предприятие, необходимо удалить/обнулить все связанные с ним записи, т.е. при удалении предприятия в своей самой верхней таблице выставляешь id_predpr НУЛЛ. и вопрос: какие ты будешь брать значения из зависимых таблиц OKFS, OKATO, OKVED, если ты удаляешь предприятие?
Наверное я не понял, но ведь там и так id_predpr стоит NULL...или я чего то не так понял? Таблицы OKFS, OKATO, OKVED хранятся отдельно и таблица predpriyat берёт данные об этих OKFS, OKATO, OKVED.. И наверно я чего то не так делаю, но если убрать связь с этими ДОП.таблицами, то всё начинает работать нормально! Т.е. при удалении предприятия на его месте возникает пустое поле! Как же так? что такое?
точно сказать не могу, но скорее всего не понял. когда ты удаляешь предприятие, в таблице forms_glav нужно найти все записи для этого предприятия, и выставить id_predpr в нулл. и то - не факт что это поможет.
тут нужно аццкое решение - вызов специалиста на дом а как ты его убирал, если не секрет? возможно ларчик просто открывается
Ну..я не из Ташкента, к сожалению PHP: //код, что был выше $ath9 = mysql_query("SELECT * FROM predpriyat WHERE id_predpr=".$form_id_pred); if($ath9) { while($pred = mysql_fetch_array($ath9)) { $predpr=htmlspecialchars($pred['nazv']); $predpr_id=htmlspecialchars($pred['id_predpr']); $okfs=htmlspecialchars($pred['okfs']); $okato=htmlspecialchars($pred['okato']); $okved=htmlspecialchars($pred['okved']); } //УБРАЛ это $ath10 = mysql_query("SELECT * FROM okfs WHERE id=".$okfs); if($ath10) { while($okfs_num = mysql_fetch_array($ath10)) { $okfs_nazv=htmlspecialchars($okfs_num['num']); } //Это $ath12 = mysql_query("SELECT * FROM okved WHERE id=".$okved); if($ath12) { while($okved_num = mysql_fetch_array($ath12)) { $okved_nazv=htmlspecialchars($okved_num['num']); } //И это $ath11 = mysql_query("SELECT * FROM okato WHERE id=".$okato); if($ath11) { while($okato_num = mysql_fetch_array($ath11)) { $okato_nazv=htmlspecialchars($okato_num['num']); } Лишь в коде!
Хорошо, конечно! Но помогите с этим...это будет последний мой вопрос Ибо я уже почти закончил всё) p.s. Заранее благодарю!
Dimitry_LD вроде логично. как только удаляется предприятие, строка Код (Text): $ath9 = mysql_query("SELECT * FROM predpriyat WHERE id_predpr=".$form_id_pred); перестаёт работать, и соответственно весь последующий код во вложенных запросах не выполняется. добавь до 67 строки $ath9 = mysql_query("SELECT * FROM predpriyat WHERE id_predpr=".$form_id_pred); инициализацию переменных: Код (Text): $okfs = 0; $okved = 0; $okato = 0; должно помочь -- добавлено -- вообще правильным было бы обходится одним запросом с использованием left join-ов, а не писать подзапросы каждый раз.
Мож быть немного не в тему, но я гдето читал, что если возникает проблема удаления в связанных таблицах, то как выриант, можно соотнести все связанные записи в какой-то другой раздел. Например создать раздел "Общее" и присвоить его ID всем связанным записям. )))))))))) Водка - зло, и надо с ним бороться