Не могу добавить процедуру переключения без ошибки - PullRequest
0 голосов
/ 14 марта 2012

Это учебный проект для меня, и я уже сделал пару запросов на этом сайте, который научил меня совсем немного. Но у меня проблемы с рутиной «переключения», и я буду признателен за любые советы, которые смогу найти. Эта процедура переключения была предложением, но я получаю ошибки. Я провел немало исследований, но до сих пор не могу понять, как выполнить этот процесс. Я также не понимаю, что означает "@" в "date_create (" @ $ qucls ")". Кажется, не имеет значения, есть ли он там или нет, но это было предложение вместе с рутиной.

Запросы проверяют, насколько я могу получить то, что я хочу произвести, но как только я пытаюсь обновить временные строки, он застревает. Ошибка: «date_format () ожидает, что параметр 1 будет DateTime, логическое значение задано в ...». Насколько я знаю, $ qucls должен быть строкой чисел, а не истиной / ложью. В этих полях таблицы определенно есть числовая строка в виде int.

Просто, чтобы повторить другие мои посты, я не могу изменить базу данных, не выходя из головы. Мне нужно взять информацию из нее, чтобы сделать напоминания по электронной почте из календарной программы. Таблицы запутаны с необычными формами и длинами строк даты / времени, поэтому в этом сценарии есть гораздо больше, чем показано здесь. В моем процессе, это то, где я нахожусь в выяснении этого, и это не так уж плохо для septuagenarian. Я пойду на уборку после того, как выясню процессы, которые дают правильный результат.

Вот соответствующая часть сценария:

date_default_timezone_set('UTC');
$today = date("Ymd");
mysql_select_db($dbname);
$querydel = "SELECT cal_entry_id, cal_type FROM webcal_entry_log WHERE cal_type = 'D'";
$delqu = mysql_query($querydel);
$i = 0;
while ($row = mysql_fetch_array($delqu, MYSQL_NUM)) {
    $qudel[$i] = $row[0];
}
$query1 = "SELECT cal_id, cal_name, cal_date, cal_time, cal_type, cal_description FROM webcal_entry WHERE cal_type = 'M' AND cal_date != ' . $today . ' AND cal_id != " . $qudel[$i];
$wequ1 = mysql_query($query1);
while ($row = mysql_fetch_array($wequ1, MYSQL_NUM)) {
    $quid1[$i] = $row[0];
    $quname[$i] = $row[1];
    $qutime[$i] = $row[3];
    $qudesc[$i] = $row[5];

    $query2 = "SELECT cal_id, cal_type FROM webcal_entry_repeats WHERE cal_id = " . $quid1[$i];
    $wer1 = mysql_query($query2);
    if ($row = mysql_fetch_array($wer1, MYSQL_NUM)) {        
        $qutype[$i] = $row[1];
    }

    $query3 = "SELECT cal_id, cal_last_sent FROM webcal_reminders WHERE cal_id = " . $quid1[$i];
    $wer2 = mysql_query($query3);
    if ($row = mysql_fetch_array($wer2, MYSQL_NUM)) {
        $qucls[$i++] = $row[1];
    }
}
for ($j = 0; $j < $i; $j++) {
}
// date calculations - switch routine

$dateObj = date_create("@$qucls");

switch($qutype) {
  case "daily":
    date_add($dateObj, date_interval_create_from_date_string("1 day"));
    break;
  case "weekly":
    date_add($dateObj, date_interval_create_from_date_string("1 week"));
    break;
  case "monthly":
    date_add($dateObj, date_interval_create_from_date_string("1 month"));
    break;
  case "yearly":
    date_add($dateObj, date_interval_create_from_date_string("1 year"));
    break;
}

$qucls = date_format($dateObj, "U");

Спасибо!

Редактировать: $ qucls выводит массив меток времени Unix в виде типа int () после завершения цикла запроса. Как только он принимает - $ dateObj = date_create ("@ $ qucls"), $ dateObj возвращает false. Я не могу найти трюк.

1 Ответ

1 голос
/ 14 марта 2012

При просмотре кода выясняется, что $qucls - это массив (основанный на строке $qucls[$i++] = $row[1];). date_create не принимает массив в качестве первого параметра.

Знак @ будет указывать date_create, что вы передаете метку времени Unix.

Я бы рекомендовал проверить if ($dateObj === false), чтобы увидеть, возвращает ли date_create правильное значение.

Также представляется, что $qutype является массивом. Не совсем уверен, как switch реагирует на передачу массива ...

Прежде чем пытаться вызвать date_create ... вы должны print_r($qutype) и print_r($qucls), чтобы убедиться, что вы знаете, с какими данными вы имеете дело.

Итак, вы пытаетесь сделать что-то вроде этого:

foreach($qutype as $key => $type){
    $time    = $qucls[$key];
    $dateObj = date_create("@$time");

    switch($type) {
      case "daily":
        date_add($dateObj, date_interval_create_from_date_string("1 day"));
        break;
      case "weekly":
        date_add($dateObj, date_interval_create_from_date_string("1 week"));
        break;
      case "monthly":
        date_add($dateObj, date_interval_create_from_date_string("1 month"));
        break;
      case "yearly":
        date_add($dateObj, date_interval_create_from_date_string("1 year"));
        break;
    }

    $qucls[$key] = date_format($dateObj, "U");
}

Вы можете сделать print_r до и после цикла, чтобы гарантировать, что все $qucls значения обновляются ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...