我有以下switch语句,它应返回发送给用户/从用户发送的消息数组:
<?php
// Load libs, verify user
require_once '../bootstrap.php';
switch ($_GET['folder']) {
case 'inbox':
$messages = Message::sentToUser($userId);
break;
case 'sent':
$messages = Message::sentByUser($userId);
break;
default:
$messages = Message::sentToUser($userId);
break;
}
$json = json_encode($messages);
echo $json;
Messages.php
public static function sentToUser($user_id)
{
$messages = DB::table('messages')
->order_by('id', 'DESC')
->where('sent_to_id', '=', $user_id)
->where('show_to_receiver', '=', 1)
->get();
return ($messages) ? $messages : array();
}
如果我传入folder
param:
[
{
id: "1"
title: "Test Message"
message: ""
read: "0"
date_sent: "2014-05-14 15:08:43"
date_read: null
sent_from_id: "5"
sent_to_id: "40"
}
]
但是,在默认情况下(没有给出文件夹参数),PHP抛出PHP Notice: Undefined index: folder
(预期),并且$messages
作为对象返回,而不是数组:
{
id: "1"
title: "Test Message"
message: ""
read: "0"
date_sent: "2014-05-14 15:08:43"
date_read: null
sent_from_id: "5"
sent_to_id: "40"
}
如果$messages
为$_GET['folder']
或'inbox'
,我希望将undefined
设置为相同的内容。关于不一致的根源的任何想法?
答案 0 :(得分:4)
$folder = isset($_GET['folder']) ? $_GET['folder'] : '';
switch ($folder) {
...
答案 1 :(得分:1)
这意味着$_GET['folder']
未定义,因此您最好使用isset()
进行检查
的 P.S。 : 您应该始终验证用户的输入(例如$_GET
和$_POST
)
答案 2 :(得分:1)
您没有检查他们是否正在请求有效的文件夹,这可能会变得很重要。如果你按照@ user574632建议的方式做一些事情会更好,但我会添加更多代码。为什么$_GET['folder']
为空?为什么它会有不同的价值?您应该考虑这些两个不同的案例。如果文件夹可以为空并且意味着收件箱,那么请在代码中说明。这样就更合适了:
// Acknowledge only for the empty folder if it follows your logic, not for everything
$folder = isset($_GET['folder']) ? $_GET['folder'] : 'inbox';
switch ($folder) {
case 'inbox':
$messages = Message::sentToUser($userId);
break;
case 'sent':
$messages = Message::sentByUser($userId);
break;
// Other code would cause an exception, error, exit or whatever. LOG THAT.
default:
throw new InvalidFolderException("User trying to access an invalid folder");
break;
}