powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Перебор ассоциативного массива, полученного из БД ms sql
12 сообщений из 12, страница 1 из 1
Перебор ассоциативного массива, полученного из БД ms sql
    #38235842
ruby_byru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток.

Есть код, раньше он работал с БД mysql, все прекрасно работало, после переделывания его под ms sql он стал работать частично, помогите пожалуйста разобраться в чем дело.

Есть таблица с такими полями:

teacher-преподаватель
day-день недели
time-время начала и конца пары
subject-предмет
audience-аудитория
week-неделя(над чертой, под чертой или все время)

По выбранному преподавателю должна строиться таблица с расписанием такого вида:


Но у меня теперь строится пустая таблица.

Вот собственно сам код:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
$th = mssql_query("select * from timetable1 where name='$_POST[ListBox]' ");

$schedule = array();
$week = array();
$times = array('8.00-9.40','9.55-11.35','12.05-13.45','14.15-15.50','16.00-17.35','17.45-19.20');
$days = array('Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб');
if (mssql_num_rows($th)!=0)
{
  if($th)
  {
   foreach ($times as $time) 
   {
     foreach ($days as $day) 
     {
      $schedule[$day][$time] = ' ';
      $week[$day][$time] = '';
     }
   }
   
   while($teacher = mssql_fetch_assoc($th))
   { 
     
   if ($teacher['week'] == 'над чертой' && $schedule[$teacher['day']][$teacher['time']] == ' ')
    $schedule[$teacher['day']][$teacher['time']] = $teacher['subject'].' '.$teacher['audience'].'<hr />'.$schedule[$teacher['day']][$teacher['time']];
    elseif ($teacher['week'] == 'под чертой' && $schedule[$teacher['day']][$teacher['time']] != '&nbsp;')
    $schedule[$teacher['day']][$teacher['time']] .= $teacher['subject'].' '.$teacher['audience'];
    elseif ($teacher['week'] == 'под чертой' && $schedule[$teacher['day']][$teacher['time']] == '&nbsp;')
    $schedule[$teacher['day']][$teacher['time']] .= '<hr />'.$teacher['subject'].' '.$teacher['audience'];
    elseif ($teacher['week'] == 'над чертой' && $schedule[$teacher['day']][$teacher['time']] != '&nbsp;')
    $schedule[$teacher['day']][$teacher['time']] = $teacher['subject'].' '.$teacher['audience'].$schedule[$teacher['day']][$teacher['time']];
    elseif ($teacher['week'] == 'все время')
    $schedule[$teacher['day']][$teacher['time']] = $teacher['subject'].' '.$teacher['audience'];
    $week[$teacher['day']][$teacher['time']] .= $teacher['week'];
    
   } 
   echo "<table border=1>";
   echo "<tr align='center'><td></td><td>Пн</td><td>Вт</td><td>Ср</td><td>Чт</td><td>Пт</td><td>Сб</td></tr>";
   foreach ($times as $time)
   {
    echo "<tr align='center'><td>".$time."</td>";
    foreach ($days as $day) 
    {
     echo "<td width='100' height='50' valign='middle' align='center'>";
     echo $schedule[$day][$time];
     echo "</td>";
    }
    echo "</tr>";
   }
   echo "</table>";
  }
else
{
 echo "<p><b>Error: ".mssql_error()."</b><p>";
}
}
else 
{
 echo "<br> Данных по выбранному преподавателю нет.";
}
...
Рейтинг: 0 / 0
Перебор ассоциативного массива, полученного из БД ms sql
    #38235858
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ruby_byruвсе прекрасно работало
ruby_byruтеперь строится пустая таблицаНачните с var_dump($teacher) внутри цикла.
...
Рейтинг: 0 / 0
Перебор ассоциативного массива, полученного из БД ms sql
    #38235865
ruby_byru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
все верно выдает
...
Рейтинг: 0 / 0
Перебор ассоциативного массива, полученного из БД ms sql
    #38235874
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Включая кодировку?
...
Рейтинг: 0 / 0
Перебор ассоциативного массива, полученного из БД ms sql
    #38235880
ruby_byru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну вот..вроде все в порядке:
array(6) { ["name"]=> string(30) "Зайцева Ольга Максимовна " ["day"]=> string(5) "Ср " ["time"]=> string(20) "9.55-11.35 " ["subject"]=> string(30) "ТВП " ["audience"]=> string(15) "3-1 " ["week"]=> string(20) "под чертой " } array(6) { ["name"]=> string(30) "Зайцева Ольга Максимовна " ["day"]=> string(5) "Пн " ["time"]=> string(20) "17.45-19.20 " ["subject"]=> string(30) "ТВП " ["audience"]=> string(15) "2-1 " ["week"]=> string(20) "над чертой " } array(6) { ["name"]=> string(30) "Зайцева Ольга Максимовна " ["day"]=> string(5) "Вт " ["time"]=> string(20) "9.55-11.35 " ["subject"]=> string(30) "ТВП " ["audience"]=> string(15) "3-7 " ["week"]=> string(20) "над чертой " } array(6) { ["name"]=> string(30) "Зайцева Ольга Максимовна " ["day"]=> string(5) "Ср " ["time"]=> string(20) "14.15-15.50 " ["subject"]=> string(30) "ТВП " ["audience"]=> string(15) "2-6 " ["week"]=> string(20) "все время " }
...
Рейтинг: 0 / 0
Перебор ассоциативного массива, полученного из БД ms sql
    #38235938
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нифига не в порядке. Вот элемент массива расписания в коде:автор
Код: php
1.
'Ср'

Два символа. В зависимости от кодировки, два или четыре байта. А вот элемент расписания Ольги Максимовны из var_dump:
ruby_byru["day"]=> string(5) "Ср "Пять байт. Почему? А пробел лишний. Смотрим внимательнее - да везде по лишнему пробелу. Откуда он взялся в каждом значении?
...
Рейтинг: 0 / 0
Перебор ассоциативного массива, полученного из БД ms sql
    #38236269
ruby_byru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При создании БД, в ней указывалось эти 5 байт именно под это поле, а пробелы не сильно должны вроде как влиять на вывод результата, когда база была на mysql, var_dump() тоже выдавал пробелы
...
Рейтинг: 0 / 0
Перебор ассоциативного массива, полученного из БД ms sql
    #38236368
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ruby_byruпробелы не сильно должны вроде как влиять на вывод результатаЗато влияют на сравнение строк.
...
Рейтинг: 0 / 0
Перебор ассоциативного массива, полученного из БД ms sql
    #38239150
ruby_byru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Получается надо удалить все концевые пробелы, но что-то не понимаю как это сделать в ассоциативном массиве
...
Рейтинг: 0 / 0
Перебор ассоциативного массива, полученного из БД ms sql
    #38239182
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В принципе, достаточно trim() перед сравнением.

А зачем вообще пробелов то в базу напихали?
...
Рейтинг: 0 / 0
Перебор ассоциативного массива, полученного из БД ms sql
    #38239221
ruby_byru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так все получилось, но пришлось этих trim ов напихать..что-то как-то совсем нерационально. А пробелы не пихал, в базе выделено определенное количество символов под запись..вот оно почему-то так считывается странно, доставляя пробелы, если запись занимает меньшее количество символов, чем выделено
...
Рейтинг: 0 / 0
Перебор ассоциативного массива, полученного из БД ms sql
    #38239363
mhx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mhx
Гость
Думаете, эта строка
Код: php
1.
echo "<tr align='center'><td></td><td>Пн</td><td>Вт</td><td>Ср</td><td>Чт</td><td>Пт</td><td>Сб</td></tr>";


у вас рациональна при наличии массива $days? :)
PS. Нужно было юзать тип VARCHAR вместо CHAR
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Перебор ассоциативного массива, полученного из БД ms sql
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]