Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: ничего не получается

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
kirill1
Отправлено: 12 Декабря, 2013 - 23:23:50
Post Id


Новичок


Покинул форум
Сообщений всего: 32
Дата рег-ции: Май 2013  


Помог: 0 раз(а)




Здравствуйте, есть задание создать ИС поликлиники. я сделал БД, таблицы, связал нужные поля. вот пример. Усть таблица otdelenia c полями (ID_OTD,NAZVANIE) и таблица vrachi с полями (ID_VR, FIO, ID_OTD).
Я связал поля ID_OTD и ID_OTD

ALTER TABLE vrachi ADD FOREIGN KEY (ID_OTD) REFERENCES otdelenia(ID_OTD)
ON UPDATE CASCADE UPDATE ON DELETE CASCADE ;

сделал, вывод из таблицы. и форму для добавления и удаления данных. ну и обновления

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

Может быть есть другой способ .... Подскажите пожалуйста
 
 Top
Panoptik
Отправлено: 12 Декабря, 2013 - 23:29:55
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




FOREIGN KEY помогает сохранить целостность данных (к примеру запретить удалять отделения если в них числятся врачи, чтобы не осталось врачей висящих в воздухе не относящихся ни к одному отделению или удалять каскадом зависимые строки, если вы к примеру удаляете отделение, то все врачи удалятся - это как раз то что вы написали, ну и обновление влияет на изменение айди отделения в таблице врачей если вдруг изменится айди отделения в таблице отделений, но этот случай практически встречается очень редко)

соответственно в вашем вопросе добавление вы должны писать сами и делать соответствующие проверки, потому как внешний ключ теперь не даст вам добавить доктора, если вы ему не укажите существующее отделение

что вы имели ввиду под видом "что бы в дочерней таблице данные менялись, добавлялись и удалялись при изменении в родительской." не совсем понятно, но в данном случае на счет удаления я вроде как пояснил


-----
Just do it
 
 Top
kirill1
Отправлено: 12 Декабря, 2013 - 23:38:29
Post Id


Новичок


Покинул форум
Сообщений всего: 32
Дата рег-ции: Май 2013  


Помог: 0 раз(а)




Panoptik пишет:
FOREIGN KEY помогает сохранить целостность данных (к примеру запретить удалять отделения если в них числятся врачи, чтобы не осталось врачей висящих в воздухе не относящихся ни к одному отделению или удалять каскадом зависимые строки, если вы к примеру удаляете отделение, то все врачи удалятся - это как раз то что вы написали, ну и обновление влияет на изменение айди отделения в таблице врачей если вдруг изменится айди отделения в таблице отделений, но этот случай практически встречается очень редко)

соответственно в вашем вопросе добавление вы должны писать сами и делать соответствующие проверки, потому как внешний ключ теперь не даст вам добавить доктора, если вы ему не укажите существующее отделение

что вы имели ввиду под видом "что бы в дочерней таблице данные менялись, добавлялись и удалялись при изменении в родительской." не совсем понятно,
но в данном случае на счет удаления я вроде как пояснил





Да, вот и именно он мне не позволяет добавить нового врача без ID_OTD в phpmyadmin я могу добавить ему отделение но как реализовать добавление через форму я не понимаю ...

<form method="post" action="insert2.php">
ФИО: <input type="text" name="FIO" />
Должность: <input type="text" name="DOLGNOST" />
телефон: <input type="text" name="TELEFON" />
кабинет: <input type="text" name="KABINET" />
idотдела: <input type="text" name="OTD" />
<input type="submit" name="ok" value="Добавить" />
</form>

insert2.php:

<?php
include('db.php');
$FIO = $_POST['FIO'];
$DOLGNOST = $_POST['DOLGNOST'];
$TELEFON = $_POST ['TELEFON'];
$KABINET = $_POST ['KABINET'];
$OTD = $_POST ['OTD'];
if (isset($_POST['ok']))
{
$query = mysql_query ("INSERT INTO vrachi (FIO,DOLGNOST,TELEFON,KABINET,OTD) VALUES ('$FIO','$DOLGNOST','$TELEFON','$KABINET','$OTD')") ;
echo"добавленно<a href='vrachi.php'>Обновить</a>";
}
?>

(Отредактировано автором: 12 Декабря, 2013 - 23:43:15)

 
 Top
Panoptik
Отправлено: 13 Декабря, 2013 - 00:57:04
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




для таких случаев используется элемент <select> в который вы предварительно перед отрисовкой формы должны выбрать все существующие отделения и в атрибут value каждого опшина подставить айди этого самого отделения

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?
  3. // перед выводом формы должны выбрать все отделения в переменную-массив
  4. $res = mysql_query('SELECT ID_OTD,NAZVANIE FROM otdelenia');
  5. $otd = array();
  6. while($row = mysql_fetch_assoc($res)) {
  7.  $otd[] = $row;
  8. }
  9.  
  10. ?>
  11.  
  12. <form method="post" action="insert2.php">
  13. ФИО: <input type="text" name="FIO" />
  14. Должность: <input type="text" name="DOLGNOST" />
  15. телефон: <input type="text" name="TELEFON" />
  16. кабинет: <input type="text" name="KABINET" />
  17. отдел: <select name="OTD">
  18. <? foreach($otd as $o): ?>
  19.   <option value="<?=$o['ID_OTD'];?>"><?=$o['NAZVANIE'];?></option>
  20. <? endforeach; ?>
  21. </select>
  22. <input type="submit" name="ok" value="Добавить" />
  23. </form>


ну а при редактировании вы должны еще заполнить форму существующими значениями с базы данных

вобщем учите мат часть

PS настоятельно прошу использовать оформление кода, очень трудно читать
уважайте других пользователей


-----
Just do it
 
 Top
kirill1
Отправлено: 13 Декабря, 2013 - 01:34:08
Post Id


Новичок


Покинул форум
Сообщений всего: 32
Дата рег-ции: Май 2013  


Помог: 0 раз(а)




Panoptik пишет:
для таких случаев используется элемент <select> в который вы предварительно перед отрисовкой формы должны выбрать все существующие отделения и в атрибут value каждого опшина подставить айди этого самого отделения

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?
  3. // перед выводом формы должны выбрать все отделения в переменную-массив
  4. $res = mysql_query('SELECT ID_OTD,NAZVANIE FROM otdelenia');
  5. $otd = array();
  6. while($row = mysql_fetch_assoc($res)) {
  7.  $otd[] = $row;
  8. }
  9.  
  10. ?>
  11.  
  12. <form method="post" action="insert2.php">
  13. ФИО: <input type="text" name="FIO" />
  14. Должность: <input type="text" name="DOLGNOST" />
  15. телефон: <input type="text" name="TELEFON" />
  16. кабинет: <input type="text" name="KABINET" />
  17. отдел: <select name="OTD">
  18. <? foreach($otd as $o): ?>
  19.   <option value="<?=$o['ID_OTD'];?>"><?=$o['NAZVANIE'];?></option>
  20. <? endforeach; ?>
  21. </select>
  22. <input type="submit" name="ok" value="Добавить" />
  23. </form>


ну а при редактировании вы должны еще заполнить форму существующими значениями с базы данных

вобщем учите мат часть

PS настоятельно прошу использовать оформление кода, очень трудно читать
уважайте других пользователей



да конечно, извините.


я забыл написать, что использую select.

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. $query = mysql_query ("select * from vrachi") ;
  4. $row = mysql_fetch_array ($query);
  5.  
  6. $table = "<table border=0  align=center  bordercolor='black'  width='500'>\n";
  7. $table .= "<tr bgcolor='gray'>
  8. <td align=center> id </td>
  9. <td align=center> ФИО </td>
  10. <td align=center> Должность </td>
  11. <td align=center>  Телефон </td>
  12. <td align=center>  Кабинет </td>
  13. <td align=center>  idотдела </td>
  14. </tr>";
  15. while ($row = mysql_fetch_assoc($query))
  16. {  
  17.     $table .= "<tr>\n";
  18.     $table .= "<td bgcolor='white'>".$row['ID_VR']."</td>\n";
  19.          $table .= "<td align=center bgcolor='white'>".$row['FIO']."</td>\n";
  20.     $table .= "<td align=center bgcolor='white'>".$row['DOLGNOST']."</td>\n";
  21.     $table .= "<td align=center bgcolor='white'>".$row['TELEFON']."</td>\n";
  22.          $table .= "<td align=center bgcolor='white'>".$row['KABINET']."</td>\n";
  23.          $table .= "<td align=center bgcolor='white'>".$row['ID_OTD']."</td>\n";
  24.          
  25.     $table .= "</tr>\n";
  26. }
  27.  
  28. $table .= "</table>\n";
  29.  
  30.  
  31. echo $table;
  32. ?>
  33. </div>
  34.  
  35. <div class="footer">
  36.  <table width="610" border="0">
  37.   <tr>
  38.     <td height="29"  align="center"><a href="vrachadd.php" class="q3">Добавить данные</a></td>
  39.     <td  align="center"><a href="delotdel.php" class="q3">Удалить данные</a></td>
  40.     <td  align="center"><a href="reotdel.php" class="q3">Обновить данные</a></td>
  41.   </tr>
  42. </table>
  43.  


это я знаю, но поясните пожалуйста еще раз то что вы написали после, и как мне с этим быть ?
 
 Top
Panoptik
Отправлено: 13 Декабря, 2013 - 08:28:18
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




что вам не понятно? селект я за вас уже вставил в прведенную вами форму

на счет того что не сохраняется смотрите ошибки mysql (mysql_error) если запрос на инсерт выдает false. может в чет-то другом проблема

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


-----
Just do it
 
 Top
kirill1
Отправлено: 13 Декабря, 2013 - 15:02:57
Post Id


Новичок


Покинул форум
Сообщений всего: 32
Дата рег-ции: Май 2013  


Помог: 0 раз(а)




Panoptik пишет:
что вам не понятно? селект я за вас уже вставил в прведенную вами форму

на счет того что не сохраняется смотрите ошибки mysql (mysql_error) если запрос на инсерт выдает false. может в чет-то другом проблема

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


мне не понятна вот эта часть
PHP:
скопировать код в буфер обмена
  1.  
  2. <? foreach($otd as $o): ?>
  3.   <option value="<?=$o['ID_OTD'];?>"><?=$o['NAZVANIE'];?></option>
  4. <? endforeach; ?>
  5.  
 
 Top
VenZell
Отправлено: 13 Декабря, 2013 - 15:22:23
Post Id


Частый гость


Покинул форум
Сообщений всего: 237
Дата рег-ции: Июнь 2013  


Помог: 12 раз(а)




Примерно так:

Начало цикла
Открыть тег <option>;
Записать в атрибут value значение ID_OTD текущего элемента;
Записать внутри тега значение NAZVANIE текущего элемента;
Закрыть тег <option>;
Вывести на экран получившийся html-код целиком;
Проверить, был ли текущий элемент массива $otd последним;
Если это НЕ последний элемент - установить указатель на следующий элемент и перейти в начало тела цикла;
Если это был последний элемент - сбросить указатель на первый элемент массива и завершить выполнение цикла;
Конец цикла
 
 Top
kirill1
Отправлено: 13 Декабря, 2013 - 15:38:19
Post Id


Новичок


Покинул форум
Сообщений всего: 32
Дата рег-ции: Май 2013  


Помог: 0 раз(а)




VenZell пишет:
Примерно так:

Начало цикла
Открыть тег <option>;
Записать в атрибут value значение ID_OTD текущего элемента;
Записать внутри тега значение NAZVANIE текущего элемента;
Закрыть тег <option>;
Вывести на экран получившийся html-код целиком;
Проверить, был ли текущий элемент массива $otd последним;
Если это НЕ последний элемент - установить указатель на следующий элемент и перейти в начало тела цикла;
Если это был последний элемент - сбросить указатель на первый элемент массива и завершить выполнение цикла;
Конец цикла



Спасибо теперь понял. Но как я понимаю и в этом документе теперь нужно что то изменить ?

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. include('db.php');
  4. $FIO = $_POST['FIO'];
  5. $DOLGNOST = $_POST['DOLGNOST'];
  6. $TELEFON = $_POST ['TELEFON'];
  7. $KABINET = $_POST ['KABINET'];
  8. $ID_OTD = $_POST ['ID_OTD'];
  9. if (isset($_POST['ok']))
  10. {
  11. $query = mysql_query ("INSERT INTO vrachi (FIO,DOLGNOST,TELEFON,KABINET,ID_OTD) VALUES ('$FIO','$DOLGNOST','$TELEFON','$KABINET','$ID_OTD')") ;
  12. echo"добавленно<a href='vrachi.php'>Обновить</a>";
  13. }
  14. ?>
  15.  

потому что Notice: Undefined index: ID_OTD in Z:\home\5kurs.ru\www\insert2.php on line 7
 
 Top
Panoptik
Отправлено: 13 Декабря, 2013 - 15:52:51
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




в форме нужно
<select name="OTD">

заменить на <select name="ID_OTD">


-----
Just do it
 
 Top
kirill1
Отправлено: 13 Декабря, 2013 - 16:07:54
Post Id


Новичок


Покинул форум
Сообщений всего: 32
Дата рег-ции: Май 2013  


Помог: 0 раз(а)




Panoptik пишет:
в форме нужно
<select name="OTD">

заменить на <select name="ID_OTD">


это я сделал, но ошибка не здесь. Может я что то не так записал ... посмотрите пожалуйста, никак не могу понять.
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $query = mysql_query ("select * from vrachi") ;
  4. $otd = array();
  5. $row = mysql_fetch_array ($query);
  6.  
  7. $table = "<table border=0  align=center  bordercolor='black'  width='500'>\n";
  8. $table .= "<tr bgcolor='gray'>
  9. <td align=center> id </td>
  10. <td align=center> ФИО </td>
  11. <td align=center> Должность </td>
  12. <td align=center>  Телефон </td>
  13. <td align=center>  Кабинет </td>
  14. <td align=center>  idотдела </td>
  15. </tr>";
  16. while ($row = mysql_fetch_assoc($query))
  17. {  
  18. $otd[] = $row;
  19.      $table .= "<tr>\n";
  20.      $table .= "<td bgcolor='white'>".$row['ID_VR']."</td>\n";
  21.          $table .= "<td align=center bgcolor='white'>".$row['FIO']."</td>\n";
  22.      $table .= "<td align=center bgcolor='white'>".$row['DOLGNOST']."</td>\n";
  23.      $table .= "<td align=center bgcolor='white'>".$row['TELEFON']."</td>\n";
  24.          $table .= "<td align=center bgcolor='white'>".$row['KABINET']."</td>\n";
  25.          $table .= "<td align=center bgcolor='white'>".$row['ID_OTD']."</td>\n";
  26.          
  27.      $table .= "</tr>\n";
  28.  }
  29.  
  30.  $table .= "</table>\n";
  31.  
  32.  
  33.  echo $table;
  34. ?>
  35.  


PHP:
скопировать код в буфер обмена
  1.  
  2. <form method="post" action="insert2.php">
  3.   ФИО: <input type="text" name="FIO" />
  4.   Должность:  <input type="text" name="DOLGNOST" />
  5.   телефон: <input type="text" name="TELEFON" />
  6.   кабинет: <input type="text" name="KABINET" />
  7.   idотдела: <select  name="ID_OTD" />
  8. <? foreach($otd as $o): ?>
  9.   <option value="<?=$o['ID_OTD'];?>"><?=$o['NAZVANIE'];?></option>
  10. <? endforeach; ?>
  11. </select>
  12.   <input type="submit" name="ok" value="Добавить" />
  13. </form>
  14.  

insert2:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. include('db.php');
  4. $FIO = $_POST['FIO'];
  5. $DOLGNOST = $_POST['DOLGNOST'];
  6. $TELEFON = $_POST ['TELEFON'];
  7. $KABINET = $_POST ['KABINET'];
  8. $ID_OTD = $_POST ['ID_OTD'];
  9. if (isset($_POST['ok']))
  10. {
  11. $query = mysql_query ("INSERT INTO vrachi (FIO,DOLGNOST,TELEFON,KABINET,ID_OTD) VALUES ('$FIO','$DOLGNOST','$TELEFON','$KABINET','$ID_OTD')") ;
  12. echo"добавленно<a href='vrachi.php'>Обновить</a>";
  13. }
  14. ?>
  15.  
 
 Top
Panoptik
Отправлено: 13 Декабря, 2013 - 16:12:28
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




знаете что, мне не сложно помочь и подсказать, не знаю зачем вы это всё делаете (возможно в институте задали).
если вам нужно действительно что-то сделать, то вам нужно пойти по суровому пути джедая и разобраться в каждой строчке написанной выше. выяснить значение каждой функции и оператора. как работает интерпретатор и условия, циклы и прочее
если вам нужно просто сдать сессию, то лучше просто опишите задание и может кому-нибудь будет лень, и он это напишет

просто подсказывать вам решение проблемы в которой вы 90% не понимаете происходящего - это как-то неправильно.

так что выбор за вами


-----
Just do it
 
 Top
kirill1
Отправлено: 13 Декабря, 2013 - 17:35:07
Post Id


Новичок


Покинул форум
Сообщений всего: 32
Дата рег-ции: Май 2013  


Помог: 0 раз(а)




Panoptik пишет:
знаете что, мне не сложно помочь и подсказать, не знаю зачем вы это всё делаете (возможно в институте задали).
если вам нужно действительно что-то сделать, то вам нужно пойти по суровому пути джедая и разобраться в каждой строчке написанной выше. выяснить значение каждой функции и оператора. как работает интерпретатор и условия, циклы и прочее
если вам нужно просто сдать сессию, то лучше просто опишите задание и может кому-нибудь будет лень, и он это напишет

просто подсказывать вам решение проблемы в которой вы 90% не понимаете происходящего - это как-то неправильно.

так что выбор за вами


Мне не нужно что бы вы все делали за меня. Я сам пытаюсь во всем разобраться, но признаться это очень сложно для меня.
Я понял в чем ошибка - данные не поступают из формы. Элемент <select> создает список из которого нужно выбрать значение, но у меня он пустой. (таблица otdelenia заполнена) как это исправить я не знаю.

P.S. большое спасибо за оказанную помощь
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB