SQL

Заполняется не вся карточка сотрудников, почему?

<? session_start();

$id=$_SESSION['id'];
echo 'Карточка сотрудника';
echo "
";
unset($postrow);unset($result);
$result = mysql_query("SELECT * FROM `go_users` where id='$id'");
// В цикле переносим результаты запроса в массив $postrow
while ( $postrow[] = mysql_fetch_array($result)) ;

// --список выходных-
unset($po); unset($result);
$result = mysql_query("SELECT * FROM `go_dni` where id='$id'");
// В цикле переносим результаты запроса в массив $postrow
while ( $po[] = mysql_fetch_array($result));
// ------------------

// --смотрим даты в строке
$x=($postrow[0][dni]+$postrow[0][dop])*86400;
$start=$postrow[0][s];
$last = date('d.m.Y', strtotime($start)+$x - 86400) ; // находим последний день отпуска.
// -- добавляем праздничные дни
$kp=count($po)-1; $change=0;
for ($k=0; $k<$kp; $k++)
{
if ((strtotime($po[$k][d])>=strtotime($start))&&(strtotime($po[$k][d])<=strtotime($last)))
{$last=date('d.m.Y', strtotime($last)+ 86400); $change=$change+1;}
}
// ----------------------------

echo '';
echo 'ФИО'.$postrow[0][fio].' Форма Т-7';
echo 'Отдел'.$postrow[0][otdel].'';
echo 'Отпуск с'.$postrow[0][s].'';

echo 'Отпуск по'.$last.' ';

echo 'Основной'.$postrow[0][dni].' дн.';
echo 'Праздники'.$change.' дн.';

echo '
';

// ------------------------

?>
$id=$_SESSION['id']; - где и как в $_SESSION['id'] заносится значение?

unset($postrow);unset($result);
$result = mysql_query("SELECT * FROM `go_users` where id='$id'");
while ( $postrow[] = mysql_fetch_array($result)) ;

Тут сразу куча ляпов.
Бессмысленно уничтожать переменные и тут же создавать их снова. Это только увеличивает и замедляет код. Старое значение переменной уничтожается автоматически - в процессе присваивания нового значения.
Ты добавляешь элементы массива к несуществующей переменой. Сначала надо $postrow = []; (или $postrow = array(); в давно протухших версиях PHP), а только потом $postrow[] = ...;.
Бессмысленно получить в цикле ЕДИНСТВЕННУЮ строку базы данных, да ещё и добавлять в создаваемый массив никому не нужную вторую строку, содержащую false. Достаточно написать $postrow = mysql_fetch_array($result); - безо всяких while. И дальше обращаться к значениям: $postrow['fio'] - без лишнего индекса.
Отсутствует проверка того, что данные в базе существуют.
В СОВРЕМЕННОМ PHP функций mysql_* не существует, а подстановка в запросе id='$id' в современном же программировании является откровенным говнокодом. Для запросов в MySQL есть PDO и mysqli, я для передачи параметров запросов есть механизм подготовленных выражения.

Конструкция $postrow[0][otdel] работает только в старых версиях PHP (в современных версиях PHP выдаёт ошибку). Причём работает раз в 10 медленнее, чем $postrow[0]['otdel']. Потому, что otdel без $ и кавычек - это КОНСТАНТА. И PHP сначала будет искать константу otdel и если не найдёт, то создаст константу otdel со значением 'otdel'. А если константа уже определена, подставит вместо otdel её значение - что может привести совсем не к тем результатам, которые ты ожидаешь.

"SELECT * FROM `go_dni` where id='$id'". id в нормальных таблицах - это первичный ключ. Потому результатом запроса будет ЕДИНСТВЕННАЯ строка.

Зачем сначала в цикле получать значения из go_dni в массив, а потом в ДРУГОМ цикле проходить по этому массиву? Что мешает СРАЗУ подсчитать $change - в цикле получения данных?

И зачем вообще считать $change в цикле, когда кол-во праздничных дней можно получить запросом к базе данных - безо всяких циклов?
B.
B.mc .
65 764
Лучший ответ
Неизвестно Неизвестно Ну слушай, нас так учили в чушке, а потом как это все перестало работать, все сражу сказали что: "Помочь ни чем не можем". Вот и все. А теперь это все не работает, и я не знаю как исправить
Неизвестно Неизвестно Ты сможешь чем то помочь?
могу попытаться сделать
Неизвестно Неизвестно Было бы не плохо