Я пытаюсь получить дату, предоставленную через POST, а затем сформировать список дат за 12-недельный период с указанной даты начала. Эти даты затем войдут в БД, и будет выведено 12-недельное расписание, с которым пользователь может взаимодействовать (добавлять/редактировать/удалять).Проблемы с serialize() и unserialize() - вставка и выбор данных PHP MySQL
Я успешно с датой начала, генерация списка дат 12 недель и добавить это в БД в последовательной форме, но когда дело доходит до выбора даты для отображения, я получаю следующее сообщение об ошибке:
Notice: unserialize() [function.unserialize]: Error at offset 0 of xxx bytes in ...
Вот мой код:
первый .php файл здесь, чтобы принять форму входа (даты), а затем получить список каждой даты в течение 12-недельного периода с даты начала и вставьте в БД:
Массив:
$start = strtotime($_POST['Start_Date']);
$dates=array();
for($i = 0; $i<=84; $i++)
{
array_push($dates,date('Y-m-d', strtotime("+$i day", $start)));
}
$savetodb = serialize($dates);
Вставка:
$sql = "INSERT INTO programme VALUES (NULL, '20', '".$_POST["Start_Date"]."' , ' ".$savetodb." ', '".$_POST["Programme_Notes"]."')";
второй .php файл здесь - ВЫБОР и десериализации:
$result = mysql_query("SELECT Programme_Dates FROM programme");
while($row = mysql_fetch_array($result))
{
$dates = unserialize($row["Programme_Dates"]);
echo $dates;
}
Из того, что я прочитал, что проблема может быть связана с колонкой DB, где сериализованный массив вставлен (т. е. слишком мал), но он установлен в TEXT, так что это должно быть правильно? Я также думал, что могут быть определенные символы в дате, вызывающие проблемы, но при тестировании с помощью «регулярного» массива (т.е. только текста) я получаю те же ошибки.
Любые предложения/подсказки очень ценятся, спасибо.
Почему вы называете 'stripslashes'? Вы работаете с магическими кавычками? Ваш код, похоже, уязвим для [SQL injection] (http://en.wikipedia.org/wiki/SQL_injection). – Charles
К сожалению, этого не должно быть - отредактировано, спасибо – Dave
Вы проверили, что на самом деле находится в базе данных? Вы проверили значение $ row ["Programme_Dates"] после чтения из базы данных? Согласны ли они с тем, что, по вашему мнению, помещается в базу данных? – Craig