客户端要求记录所有GET/POST请求并将其存储90天以用于其应用程序.我写了一个HOOK,似乎记录了一些GETS/POSTS,但数据少于我的预期.例如,在提交表单数据时,条目似乎不会放入日志中.有人写过类似的东西吗?
这是我到目前为止的版本:
class Logging {
function __construct() {
$this->CI =& get_instance();
}
function index() {
$this->CI->load->model('Logging_m');
$this->CI->load->model('Portal_m');
//get POST and GET values for LOGGING
$post = trim(print_r($this->CI->input->post(), TRUE));
$get = trim(print_r($this->CI->input->get(), TRUE));
$this->CI->Logging_m->logPageView(array(
'portal_id' => $this->CI->Portal_m->getPortalId(),
'user_id' => (!$this->CI->User_m->getUserId() ? NULL : $this->CI->User_m->getUserId()),
'domain' => $_SERVER["SERVER_NAME"],
'page' => $_SERVER["REQUEST_URI"],
'post' => $post,
'get' => $get,
'ip' => $this->CI->input->ip_address(),
'datetime' => date('Y-m-d H:i:s')
));
}
}
Run Code Online (Sandbox Code Playgroud)
此数据存储在名为"Logging_m"的模型中,如下所示:
<?php
class Logging_m extends CI_Model {
function __construct() {
parent::__construct();
}
function logPageView($data) { …Run Code Online (Sandbox Code Playgroud) 假设我有一个 mysql 查询,它是根据某些条件构建的:示例
$query = "SELECT * from `usertable` where users_active=:users_active";
if($mode=="archived") {
$query .= " AND archived=:archived";
}
$stmt = $dbpdo->prepare($query);
$stmt->bindParam(':users_active', $users_active);
$stmt->bindParam(':archived', $archived);
$stmt->execute();
Run Code Online (Sandbox Code Playgroud)
现在,如果我运行上面的代码,它仅在 $mode=="archived" 时才有效,否则命名占位符“:archived”将不会成为查询的一部分。
从一方面来说,这对我来说是有道理的,但又引出了如何优雅地处理它的问题。我的应用程序中有很多查询是有条件构建的。我可以这样做,但这对我来说似乎是重复的:
if($mode=="archived") {
$stmt->bindParam(':archived', $archived);
}
Run Code Online (Sandbox Code Playgroud)
这看起来很冗长,特别是如果查询的构建方式有很多条件的话。有谁对如何做到这一点有一个更简洁的想法,而无需添加大量条件测试。
任何想法将不胜感激。
问候
詹姆士
我开始在LibGDX中开始玩游戏,才开始.我已经加载了一个基本的瓷砖地图,一个玩家精灵,可以移动角色,屏幕(相机)滚动 - 完美.
我在屏幕的右下角有两个重叠的纹理,一个左右箭头,用作控制角色的游戏手柄.我将这些与player.x位置相关联,该位置始终固定在屏幕中心.到目前为止凉爽....如下:
/////////////////////////////////////////////////////////////////
private void renderJoypad(float deltaTime)
{
batch.draw(Assets.leftJoypad, blockman.position.x-14, 1, 3, 3);
batch.draw(Assets.rightJoypad, blockman.position.x-9, 1, 3, 3);
}
Run Code Online (Sandbox Code Playgroud)
我现在试图将玩家的分数放在屏幕的左上角.分数由位图字体组成,如下所示.
font = new BitmapFont(Gdx.files.internal("fonts/minecrafter.fnt"),Gdx.files.internal("fonts/minecrafter.png"),false);
font.setScale(0.02f);
Run Code Online (Sandbox Code Playgroud)
在我的render()方法中,我调用了一些其他方法来更新,比如leftJoypad等的位置,就像在renderJoypad()中一样.我也在调用我的绘制字体方法来更新乐谱的位置,但是,当我滚动它时,它都是生涩的,有时它显示的字符数量应该少于应有的数量.
public void drawScore(float deltaTime)
{
font.draw(batch, "00000", blockman.position.x, 10);
}
Run Code Online (Sandbox Code Playgroud)
我相信我需要将得分(以及任何其他屏幕文本,HUD等)放入舞台,但我无法理解如何使用我现有的代码.
我的show方法如下:
public void show()
{
//load assets class to get images etc
Assets Assets = new Assets();
//start logging Framerate
Gdx.app.log( GameScreen.LOG, "Creating game" );
fpsLogger = new FPSLogger();
//set the stage - bazinga
Gdx.input.setInputProcessor(stage);
//stage.setCamera(camera);
//stage.setViewport(480, 360, false);
batch = …Run Code Online (Sandbox Code Playgroud)