PHP获取返回字符串,而不是布尔值“真/假”值
我使用完整的日历,我有一些事件是全天事件。通常,我的php设置全部为'allDay' => 'false'
。现在我注意到它增加了一个时间,如果我没有指定时间。PHP获取返回字符串,而不是布尔值“真/假”值
我想为所有值设置所有的默认值为false,除非我指定它们为true。
我的PHP读取如下:
$sql = "SELECT `id`, `title`, `time`, `start`, `end`, `url`, `backgroundColor`, `textColor`, `className`,
`allDay` FROM calender WHERE length('column') > '0'";
$result = $dbh->query($sql)->fetchAll(PDO::FETCH_ASSOC);
foreach ($result as $row){
$return[]=array('id'=>$row['id'],
'title'=>$row['title'],
"allDay" =>$row['allDay'],
'start'=>$row['start'].' '.$row['time'],
'end'=>$row['end'],
'url'=>$row['url'],
'backgroundColor'=>$row['backgroundColor'],
'textColor'=>$row['textColor'],
'className' =>$row['className']);
}
$dbh = null;
header('Content-type: application/json');
echo json_encode($return);
和jQuery的功能是:
$(document).ready(function() {
$('#calendar').fullCalendar({
editable: false,
events: "json-events.php",
eventDrop: function(event, delta) {
alert(event.title + ' was moved ' + delta + ' days\n' +
'(You cannot update these fields!)');
},
loading: function(bool) {
if (bool) $('#loading').show();
else $('#loading').hide();
},
});
});
我不知道我在哪里添加值。我有mySQL存储'allDay'为真/假,但它作为一个字符串返回。所以我真的知道如何在json编码文件之前转换它。或者在查看数据后让jQuery/javascript改变它。
MySQL中的allDay字段是什么类型?如果这是一个enum('true', 'false')
,那可能是你的问题。这被转换为一个字符串。我有人这样做,并且我花了我一直想弄清楚为什么我认为是一个布尔(或一个int)是一个字符串。
仔细检查您的数据库,并尝试将其设置为tinyint(1)
,并将0用于false,将1用于true。 PHP的布尔值true和false将被转换为相应的整数,并且在JavaScript中使用0/1时不会出现问题。
如果我这样做,那么我需要编辑我的JavaScript来说,如果它的字符串保持不变,如果它的真/假返回值? – 2012-04-18 20:50:41
如果正确完成,您应该可以将其评估为true或false。尝试在PHP中的json_encode之前做一个var_dump来列出数组的所有类型和值,所以我们确切知道什么类型的allDay是。 – CWSpear 2012-04-18 20:52:20
var_dump说[“allDay”] =>字符串(1)“1” – 2012-04-18 20:55:02
试试这个:
foreach ($result as $row){
$return[]=array('id'=>$row['id'],
'title'=>$row['title'],
"allDay" =>$row['allDay'] == "true",
'start'=>$row['start'].' '.$row['time'],
'end'=>$row['end'],
'url'=>$row['url'],
'backgroundColor'=>$row['backgroundColor'],
'textColor'=>$row['textColor'],
'className' =>$row['className']);
}
$dbh = null;
它实际上给了我正确的值,但仍然显示为一个字符串。 – 2012-04-18 20:58:30
我想把'true'切换到'1'作品 – 2012-04-18 21:05:14
你可以allso试试这个:
$sql = "SELECT `id`, `title`, `time`, `start`, `end`, `url`, `backgroundColor`, `textColor`, `className`, IF(`allDay` = 'true',true,false) AS allDay FROM calender WHERE length('column') > '0'";
为什么你在阵列中有'allDay'两次?另外,你在单独和双引号混入各地,不是一个好习惯。 – elclanrs 2012-04-18 20:45:58
这很有趣,我试图修复它,从来没有回去擦掉最后一个。 – 2012-04-18 20:47:14
你使用什么列类型来存储真/假值? – liquorvicar 2012-04-18 20:47:27