1 (изменено: Саша, 2011-04-21 18:41:46)

Тема: Вывод данных из таблицы, которая связана с другой внешним ключом

Добрый вечер! у меня такая проблема: имеется две таблицы, вторая(PERSONAL) связана с первой(JOB) внешним ключом.  нужно вывести вторую таблицу. для вывода использую такой код

 $result = ibase_query("SELECT * FROM PERSONAL",$link);
echo "<table border=1 align=center>\n";
echo "<tr><td>Фамилия<td>Имя<td>Отчество<td>Специальность</tr>\n";
while ($myrow = ibase_fetch_row($result))
{
printf("<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>\n", 

$myrow[1], $myrow[2], $myrow[3],$myrow[4]);
}

только 4й столбец таблицы PERSONAL выводится как ID первой таблицы, а нужно чтобы выводилось значение соответствующее этому ID из JOB. была попытка использовать INNER JOIN, но не получилось.
заранее спасибо

2

Re: Вывод данных из таблицы, которая связана с другой внешним ключом

Саша сказал:

нужно вывести вторую таблицу.

Начните с создания SQL запроса и уже после проверки его работы в phpMyAdmin добавляйте его в скрипт.

SELECT `PERSONAL`.*,  `JOB`.`field_name`
FROM `PERSONAL` INNER JOIN `JOB` ON `PERSONAL`.`id` = `JOB`.`personal_id`

После того, как объедините две таблицы, поправьте PHP код вывода данных.

3

Re: Вывод данных из таблицы, которая связана с другой внешним ключом

Спасибо большое!

4

Re: Вывод данных из таблицы, которая связана с другой внешним ключом

у меня появилась еще одна трудность:
с помощью выпадающего списка из таблицы JOB выбирается специальность, а затем в таблицу PERSONAL в строку соответствующую выбранной специальности вносятся(или изменяютя) данные.
подскажите, пожалуйста, как обратиться к выбранной из выпадающего списка переменной, чтобы потом ее использовать?

выпадающий список:

echo "<SELECT NAME='JOB_NAME' >";
 echo "<option value='$JOB_NAME'>не выбран</option>";
while($row=ibase_fetch_assoc($result)){
$JOB_NAME=$row["JOB_NAME"];
  if (isset($_REQUEST['JOB_NAME']) && $_REQUEST['JOB_NAME'] == $row["JOB_NAME"]) {
echo "<option value='$JOB_NAME' selected='selected'>$JOB_NAME</option>";
}
else{
echo "<option value='$JOB_NAME'>$JOB_NAME</option>";
}
}

В другой теме на форуме рассматривалась похожая задача, там с помощью скрытого поля сохранялось выбранное значение.
вопрос: Как обратиться к значению из скрытого поля?

5

Re: Вывод данных из таблицы, которая связана с другой внешним ключом

Саша сказал:

как обратиться к выбранной из выпадающего списка переменной, чтобы потом ее использовать?

Вы же обратились уже, как к $_REQUEST['JOB_NAME']. Здесь все правильно, только в этой строке лишняя переменная.
echo "<option value='$JOB_NAME'>не выбран</option>";

Саша сказал:

Как обратиться к значению из скрытого поля?

Так же, как к любому другому полю.
<input type="hidden" name="var_name" value="" />
При отправке POST формы получим $_POST['var_name'].

6

Re: Вывод данных из таблицы, которая связана с другой внешним ключом

т.е. в документе где формируется выпадающий список прописываю

<input type="hidden" name="JOB_NAME" value="$_POST['JOB_NAME']" />

а затем, чтобы на другой странице появилось то, что выбрано
echo 'Name:'.$_POST['JOB_NAME'];
не работает(

7

Re: Вывод данных из таблицы, которая связана с другой внешним ключом

Саша сказал:

не работает

У вас на одной странице выпадающий список имеющий NAME='JOB_NAME' и скрытое поле с name="JOB_NAME"? Если да, то так работать не будет.

Что это такое я даже не понял: ни PHP код, ни строка.
<input type="hidden" name="JOB_NAME" value="$_POST['JOB_NAME']" />
Если PHP встраивается в HTML, то будет так:
<input type="hidden" name="JOB_NAME" value="<?php echo $_POST['JOB_NAME']; ?>" />

8

Re: Вывод данных из таблицы, которая связана с другой внешним ключом

добрый день!
подскажите пожалуйста с чего начать:
в таблице есть данные о времени начала и окончания рабочего дня (например 09:00, 18:00), нужно разбить все время от начала рабочего дня до окончания на промежутки по 20минут (09:00, 09:20, 09:40...), затем эти данные вывести в таблицу на страничке.
после нажатия на одно из этих значений, оно должно появлять уже в другой таблице БД.

9

Re: Вывод данных из таблицы, которая связана с другой внешним ключом

Саша сказал:

подскажите пожалуйста с чего начать:

Начните с формирования таблицы.

// В первом цикле проходим часы.
for ($hour = 9; $hour <= 18; $hour++) {
  print $hour;
  // Во втором цикле проходим минуты.
  for ($min = 0; $min < 60; $min += 20) {
    print $min;
  }
}

Что должно произойти после нажатия на значение - я понять не смог.

10

Re: Вывод данных из таблицы, которая связана с другой внешним ключом

Спасибо за цикл, именно то, что нужно.
попробую объяснить что дальше: значения времени  по 20 мин, которые вывели с помощью цикла, представить в виде ссылок, при нажатии на одну из которых(например 10:20), значение  "10:20" заносится в таблицу БД.

11

Re: Вывод данных из таблицы, которая связана с другой внешним ключом

Саша сказал:

значение  "10:20" заносится в таблицу БД

К ссылке прибавьте GET параметры: ключ (insert) и значение (время).

echo '<a href="?db=insert&time=' . urlencode('10:20') . '">10:20</a>';

И затем в скрипте проверяйте значения переменных $_GET['db'] и $_GET['time'].

if (isset($_GET['db'], $_GET['time']) && $_GET['db'] == 'insert') {
  $sql = 'INSERT ...';
}

12

Re: Вывод данных из таблицы, которая связана с другой внешним ключом

Спасибо, все заработало!

13

Re: Вывод данных из таблицы, которая связана с другой внешним ключом

Скажите, пожалуйста, возможно ли методом POST передать данные сразу на две страницы?

14 (изменено: DmitryV, 2011-05-14 10:56:04)

Re: Вывод данных из таблицы, которая связана с другой внешним ключом

Собственно не понятна задача - встречный вопрос зачем? Опишите что Вы хотите сделать.
POST передает не в страницу а в скрипт а уже в скипте вы можете передать переменные куда Вам необходимо и вывести на любые страницы.

15

Re: Вывод данных из таблицы, которая связана с другой внешним ключом

Попробую объяснить. моя задача - реализовать запись на прием пациента в поликлинику. 1.Пациент войдя на сайт авторизуется, затем логин и пароль с помощью метода POST отправляются в следующий скрипт, чтобы вывести  личные данные пациента из БД.
2.Следующий шаг непосредственно запись на прием, т.е выбор врача и просмотр его расписания работы(которое представлено ввиде таблицы).
3. Выбрав нужного специалиста и время приема, происходит запись в БД, в отдельную таблицу куда должны быть внесены: ФИО пациента(из первого шага), специалист(из второго) и время приема.
авторизация, регистрация, выбор врача и времени приема реализовать получилось.

Теперь нужно как-то связать авторизованного пациента, выбранного врача и время приема и внести в таблицу.

16

Re: Вывод данных из таблицы, которая связана с другой внешним ключом

Саша сказал:

Пациент войдя на сайт авторизуется, затем логин и пароль с помощью метода POST отправляются в следующий скрипт, чтобы вывести  личные данные пациента из БД.

Здесь все правильно, на этом же этапе авторизации необходимо занести данные посетителя, полученные из POST, в сессию и на всех остальных страницах оперировать уже данными посетителя взятыми из сессии.

Документацию по сессиям и пример использования смотрите здесь: http://php.net/manual/en/function.session-start.php

17

Re: Вывод данных из таблицы, которая связана с другой внешним ключом

С сессиями все получилось, спасибо!
только теперь появился новый вопрос - в шапку таблицы с выбором времени приема вывожу дату и день недели вот таким образом

$start ='16.05.2011' ;
$finish = '20.05.2011';
 $days = array(
0=>'Воскресенье',
1=>'Понедельник',
2=>'Вторник',
3=>'Среда',
4=>'Четверг',
5=>'Пятница',
6=>'Суббота',
);
 $start = explode('.', $start);
$start = mktime(0, 0, 0, $start[1], $start[0], $start[2]);
$finish = explode('.', $finish);
$finish = mktime(0, 0, 0, $finish[1], $finish[0], $finish[2]);
for($t=$start; $t<=$finish; $t+=86400){
                                  $date = date('d.m.Y', $t);//число
                                  $day = date('w', $t);//день недели
                                  echo  "< td>".$days[$day]++. $date++."<br></td>";
                                 }

В столбцах под каждым днем расписано время работы врача по 20 мин (в виде ссылок), нажимая на одну из ссылок  время передается в следующий скрипт. Нужно чтобы передавалась еще и дата, соответствующая этому времени.

Подскажите, пожалуйста, как это можно сделать.

18

Re: Вывод данных из таблицы, которая связана с другой внешним ключом

Саша сказал:

Нужно чтобы передавалась еще и дата, соответствующая этому времени.

Передавайте в скрипт целое число возвращаемое функцией mktime() и в принимающем скрипте разбирайте его функцией date().

19

Re: Вывод данных из таблицы, которая связана с другой внешним ключом

Спасибо большое, с датой и временем все отлично!

Еще один вопрос - создана таблица в котой нажав на определенное время, авторизованный пациент записывается на прием (т.е. в таблизу БД вносятся его ФИО, ФИО врача, время и дата). А как можно сделать, чтобы то время на которое он  записался отображалось другим цветом при просмотре таблицы?

20

Re: Вывод данных из таблицы, которая связана с другой внешним ключом

Саша сказал:

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

При формировании таблицы добавьте запрос, с помощью которого проверяйте записан пациент уже на это время, или нет.

В некоторых случаях делать много запросов в цикле не имеет смысла и можно обойтись одним: выбрав в массив все записи пациента по времени и при формировании таблицы сверять время с данными в массиве.

21

Re: Вывод данных из таблицы, которая связана с другой внешним ключом

Вот так кривенько выглядит моя таблица (

<TABLE WIDTH="70%" BORDER="5" align=center CELLPADDING="2" CELLSPACING="2" BGCOLOR=#7fc7ff >
<tr BGCOLOR=#6495ed align=center>
<?php  
            $t=16; //начало недели
$pn=date("d.m.Y", mktime(0, 0, 0, 5, $t, 2011));
 $vt=date("d.m.Y", mktime(0, 0, 0, 5, $t+1, 2011));
$sr=date("d.m.Y", mktime(0, 0, 0, 5, $t+2, 2011));
 $cht=date("d.m.Y", mktime(0, 0, 0, 5, $t+3, 2011));
$pt=date("d.m.Y", mktime(0, 0, 0, 5, $t+4, 2011));          
?>
<td>ФИО доктора </td>
<td>Понедельник  <?php  echo"<br>";  echo $pn;?> </td>
<td>Вторник  <?php  echo"<br>";  echo $vt;?></td>
<td>Среда  <?php  echo"<br>";  echo $sr;?></td>
<td>Четверг <?php  echo"<br>";  echo $cht;?></td>
<td>Пятница <?php  echo"<br>";  echo $pt;?></td>
    
<tr   align=center><td  rowspan= 2 valign="top" align=left><?php echo "$PERS_F<br> $PERS_I  

$PERS_O<br> ($JOB_NAME)"?></td>
<td><?php echo " $PERS_PN_S - $PERS_PN_DO"?></td>
<td><?php echo " $PERS_VT_S - $PERS_VT_DO"?></td>
<td><?php echo " $PERS_SR_S - $PERS_SR_DO"?></td>
<td><?php echo " $PERS_CHT_S - $PERS_CHT_DO"?></td>
<td><?php echo " $PERS_PT_S - $PERS_PT_DO"?></td></tr>
 <tr >

<td  valign="top"><table WIDTH="100%" BORDER="1"><?php for ($hour =''.$PERS_PN_S

[0].''+''.$PERS_PN_S[1].''; $hour <= ''.$PERS_PN_DO[0].''+''.$PERS_PN_DO[1].''-1; $hour++) {
 for ($min = '00'; $min < 60; $min += 20) { 
echo '<tr><td align=center BGCOLOR=#94d4dc>
<a href="http://127.0.0.1/write_s.php?db=insert&time=' . urlencode(''.$hour.':'.$min.'') . ' &date=' .urlencode

(''.$pn.''). ' ">'.$hour.':'.$min.'</a>';
}
}?></table></td>

<td  valign="top"><table WIDTH="100%" BORDER="1" ><?php for ($hour =''.$PERS_VT_S

[0].''+''.$PERS_VT_S[1].''; $hour <= ''.$PERS_VT_DO[0].''+''.$PERS_VT_DO[1].''-1; $hour++) {
 for ($min = '00'; $min < 60; $min += 20) { 
echo '<tr><td align=center BGCOLOR=#94d4dc><a href="http://127.0.0.1/write_s.php?db=insert&time=' . 

urlencode(''.$hour.':'.$min.'') . '&date='.urlencode(''.$vt.''). '">'.$hour.':'.$min.'</a>';
}
} 
?></table></td>
<td valign="top"><table WIDTH="100%" BORDER="1"><?php for ($hour =''.$PERS_SR_S

[0].''+''.$PERS_SR_S[1].''; $hour <= ''.$PERS_SR_DO[0].''+''.$PERS_SR_DO[1].''-1; $hour++) {
 for ($min = '00'; $min < 60; $min += 20) { 
echo '<tr><td align=center BGCOLOR=#94d4dc><a href="http://127.0.0.1/write_s.php?db=insert&time=' . 

urlencode(''.$hour.':'.$min.'') 

.'&date='.urlencode(''.$sr.'').'">'.$hour.':'.$min.'</a>';
}
} 
?></table></td>
<td valign="top"><table  WIDTH="100%" BORDER="1"><?php for ($hour =''.$PERS_CHT_S

[0].''+''.$PERS_CHT_S[1].''; $hour <= ''.$PERS_CHT_DO[0].''+''.$PERS_CHT_DO[1].''-1; $hour++) {
 for ($min = '00'; $min < 60; $min += 20) { 
echo '<tr><td align=center BGCOLOR=#94d4dc><a href="http://127.0.0.1/write_s.php?db=insert&time=' . 

urlencode(''.$hour.':'.$min.'') . '&date='.urlencode(''.$cht.'').'">'.$hour.':'.$min.'</a>';
}
} 
?></table></td>
<td  valign="top"><table WIDTH="100%" BORDER="1"><?php for ($hour =''.$PERS_PT_S

[0].''+''.$PERS_PT_S[1].''; $hour <= ''.$PERS_PT_DO[0].''+''.$PERS_PT_DO[1].''-1; $hour++) {
 for ($min = '00'; $min < 60; $min += 20) { 
 echo '<tr><td align=center BGCOLOR=#94d4dc><a href="http://127.0.0.1/write_s.php?db=insert&time=' . 

urlencode(''.$hour.':'.$min.'') .  '&date='.urlencode (''.$pt.'').'">'.$hour.':'.$min.'</a>';
}
} 
</table></td>
</tr>  
 </TABLE>

после нажатия на какое-то время оно передается в следующий  скрипт и затем заносится в БД. получается что формирование таблицы с возможностью выбора времени никак не связано  с табл БД куда это время потом заносится. честно говоря не поняла как можно выбрать записи в массив(((

22

Re: Вывод данных из таблицы, которая связана с другой внешним ключом

Саша сказал:

получается что формирование таблицы с возможностью выбора времени никак не связано  с табл БД куда это время потом заносится.

Даже не знаю что сказать. Я могу подсказать, какие-то детали, но скрипт делаете вы.

Саша сказал:

не поняла как можно выбрать записи в массив

Делаете запрос БД и выбираете все необходимые данные пользователей, но не выводите их в виде html кода, а собираете в многомерный массив.
$user['id_1'] = array(
'id' => 1,
'name' => 'имя',
'date' => 'дата',
...
);
Когда собираете таблицу, проверяете есть ли посетители на определенную дату и время, например.

23

Re: Вывод данных из таблицы, которая связана с другой внешним ключом

Добрый вечер!
Решила не изменять цвет уже занятого времени, а просто не выводить его в таблицу. Но только проблема в том, что не выводится только одно значение времени  из БД,  даже если их несколько, удовлетворяющих условию

 $Sootvetsvie ="SELECT * from PRIEM WHERE  PR_DOC='"."$PERS_F"."' AND PR_DATA='".$pn."'";
    $result2 = ibase_query($Sootvetsvie,$link);
    $row2 = ibase_fetch_object($result2);
    $PR_VREMYA = $row2->PR_VREMYA;
              for ($hour =''.$PERS_PN_S[0].''+''.$PERS_PN_S[1].''; 
$hour <= ''.$PERS_PN_DO[0].''+''.$PERS_PN_DO[1].''-1; $hour++) 
{  
 for ($min = '00'; $min < 60; $min += 20) 
{  
  if ($hour<>''.$PR_VREMYA[0].''+''.$PR_VREMYA[1].''or$min<>''.$PR_VREMYA[3].''+''.$PR_VREMYA[4].'')
echo '<tr><td align=center BGCOLOR=#94d4dc> 
<a href="http://127.0.0.1/write_s.php?db=insert&time=' . urlencode(''.$hour.':'.$min.'') . ' &date=' .urlencode(''.$pn.''). ' ">'.$hour.':'.$min.'</a>';
}
} 

Подскажите пожалуйста, как сделать, чтобы из таблицы БД выводились(а в моем случае не выводились) все значения, удовлетворяющие какому-то условию.

24

Re: Вывод данных из таблицы, которая связана с другой внешним ключом

Саша сказал:

как сделать, чтобы из таблицы БД выводились(а в моем случае не выводились) все значения, удовлетворяющие какому-то условию.

Добавить условие в SQL запрос. Если запрос сформировать не получается, то покажите структуру таблицы и какие данные надо вывести.

Я не понял зачем здесь по бокам приделывать пустую строку: ''.$PERS_PN_S[0].''

25

Re: Вывод данных из таблицы, которая связана с другой внешним ключом

В таблице 5 полей:
            PR_ID
            PR_PAT (вносится ID пациента который авторизовался)
            PR_DOC (Вносится ID доктора,  к которому пациент записывается на прием)
            PR_DATA 
            PR_VREMYA - вносится время приема  (тип varchar, не взяла тип TIME, потому что  нужно вносить время в формате чч:мм, без секунд ) 

$Sootvetsvie ="SELECT * from PRIEM WHERE  PR_DOC='"."$PERS_ID"."' AND PR_DATA='".$pn."'";
выбираю из таблицы где PR_DOC= ID выбранного специалиста и PR_DATA = соответствует дню недели

if ($hour<>''.$PR_VREMYA[0].''+''.$PR_VREMYA[1].''or$min<>''.$PR_VREMYA[3].''+''.$PR_VREMYA[4].'')
этой строкой сравниваю $hour с первым и вторым символом $PR_VREMYA, $min с третьим и четвертым.

почему-то такое сравнение  -   if ('.$hour.':'.$min.'<>$PR_VREMYA) не прорабатывается

и затем хочу вывести те, которые удовлетворяют этому условию, т.е. если $hour:$min<>$PR_VREMYA, то выводим.