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

Есть код, раньше он работал с БД 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
23.04.2013, 01:02
    #38235858
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор ассоциативного массива, полученного из БД ms sql
ruby_byruвсе прекрасно работало
ruby_byruтеперь строится пустая таблицаНачните с var_dump($teacher) внутри цикла.
...
Рейтинг: 0 / 0
23.04.2013, 01:14
    #38235865
ruby_byru
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор ассоциативного массива, полученного из БД ms sql
все верно выдает
...
Рейтинг: 0 / 0
23.04.2013, 01:37
    #38235874
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор ассоциативного массива, полученного из БД ms sql
Включая кодировку?
...
Рейтинг: 0 / 0
23.04.2013, 02:02
    #38235880
ruby_byru
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор ассоциативного массива, полученного из БД ms sql
Ну вот..вроде все в порядке:
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
23.04.2013, 07:59
    #38235938
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор ассоциативного массива, полученного из БД ms sql
Нифига не в порядке. Вот элемент массива расписания в коде:автор
Код: php
1.
'Ср'

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

А зачем вообще пробелов то в базу напихали?
...
Рейтинг: 0 / 0
25.04.2013, 00:32
    #38239221
ruby_byru
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор ассоциативного массива, полученного из БД ms sql
Так все получилось, но пришлось этих trim ов напихать..что-то как-то совсем нерационально. А пробелы не пихал, в базе выделено определенное количество символов под запись..вот оно почему-то так считывается странно, доставляя пробелы, если запись занимает меньшее количество символов, чем выделено
...
Рейтинг: 0 / 0
25.04.2013, 09:07
    #38239363
mhx
mhx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор ассоциативного массива, полученного из БД ms sql
Думаете, эта строка
Код: 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
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Перебор ассоциативного массива, полученного из БД ms sql / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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