mysql — функция PHP внутри запроса не будет возвращать значение

Итак, у меня есть PHP-скрипт, который бы вставлял посещаемость ученика. Сначала следует проверить, существует ли уже посещаемость с таким же идентификатором и датой студента. Если нет, он вставляет посещаемость. Я хочу вставить в статус посещаемости, присутствует ли студент или опаздывает на основе возвращаемого значения моей функции php CompareTime. Но проблема в том, что функция не будет ничего возвращать. Поэтому в данных о посещаемости столбец состояния пуст.

function checkAttendance($conn, $stud_id) {
$check = mysqli_query($conn, "SELECT * FROM tbl_attendance WHERE student_id = '$stud_id' AND date = CURDATE()") or die (mysqli_error());
if(mysqli_num_rows($check) > 0) {
return true;
}
else {
return false;
}
}

function compareTime($time,$grade) {
$ctime = strtotime($time);
if($grade == "H1" || $grade == "H2" || $grade == "H3" || $grade == "H4" || $grade == "S1" || $grade == "S2") {
if ($ctime > strtotime('05:00:00') && $ctime < strtotime('07:30:00')) return "P";
else if ($ctime > strtotime('07:30:00') && $ctime < strtotime('8:30:00')) return "L";
}
else {
if($ctime > strtotime('05:00:00') && $ctime < strtotime('07:15:00'))
return "P";
else if ($ctime > strtotime('07:15:00') && $ctime < strtotime('8:30:00'))
return "L";
}
}

function recordAttendance($conn, $sid, $glid, $scid) {
$sql = mysqli_query($conn, "INSERT INTO tbl_attendance(student_id, gradeLevel_id, section_id, date, arrival_time, status) VALUES ('".$sid."', '".$glid."', '".$scid."', CURDATE(), CURTIME(), '".compareTime(date('H:i:s'),$glid)."')") or die(mysqli_error());
}

$res = mysqli_query($connect, "SELECT * FROM tbl_student WHERE card_id = '$cardID'")or die(mysqli_error());
while($row = mysqli_fetch_array($res,MYSQLI_ASSOC)) {
if (checkAttendance($connect, $row['student_id']))
echo "Already Exist!";
else
recordAttendance($connect, $row['student_id'], $row['gradeLevel_id'], $row['section_id']);
}

0

Решение

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

  • Сначала начните отладку, выводя значения compareTime, чтобы увидеть, работают ли они вообще. Если это не так, исправьте это в первую очередь.
  • Если это работает, вы можете попробовать добавить «жестко закодированное» значение к вашему запросу, чтобы посмотреть, вставляется ли оно в ваши (тестовые) данные / таблицу. Если это не дает хорошего результата, то это может быть случай неправильного типа в базе данных. Может быть, он ожидает целое число или что-то еще?
  • Вы также можете извлечь вызов функции из запроса и поместить его в переменную, это обеспечит немного более чистый и более читаемый код, а также его будет легче отлаживать.

постскриптум
Понимаете ли вы, что в маловероятном случае, когда будет ровно 7:30:00 или 7:15:00, человек попадает между трещин, потому что вы проверяете только больше или меньше, чем. Некоторые также должны быть> = или <знак равно

Может быть, лучше переписать это примерно так:

function compareTime($grade,$time = ''){
$time = (empty($time))?strtotime(date('H:i:s')):strtotime($time);

$time_5 = strtotime('05:00:00');
$time_715 = strtotime('07:15:00');
$time_730 = strtotime('07:30:00');
$time_830 = strtotime('08:30:00');

if ($grade == "H1" || $grade == "H2" || $grade == "H3" || $grade == "H4" || $grade == "S1" || $grade == "S2") {
if (
$time > $time_730
&& $time < $time_830
){
return "L";
} elseif (
$time > $time_5
&& $time <= $time_730
){
return "P";
}
} else {
if (
$time > $time_715
&& $time < $time_830
){
return "L";
} elseif (
$time > $time_5
&& $time <= $time_715
){
return "P";
}
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector