小编Lot*_*har的帖子

MySQL - 使现有的Field Unique

我有一个已经存在的表,其中一个字段应该是唯一的但不是.我只知道这一点,因为表中的条目与另一个已存在的条目具有相同的值,这导致了问题.

如何使此字段仅接受唯一值?

mysql unique-constraint

143
推荐指数
5
解决办法
17万
查看次数

jqGrid - rowObject不一致?

使用jqgrid rowObject的结果的第一页返回预期数据,但随后返回结果的后续页面的不完整数据.为什么?

结果的第一页:rowObject [3]将等于"2"

后续结果页:rowObject [3]将等于"undefined",返回结果的第一页现在也将等于"undefined".

更多细节和一些代码:

使用jqGrid,如果要实现自定义格式化程序,可以使用名为rowObject的参数,该参数包含行数据.因此,例如,一行rowObject可能是这样的:

["18", "133", "Betelguese", "3", "photo.jpg", "", "0", ""]
Run Code Online (Sandbox Code Playgroud)

所以我的自定义格式化程序使用这些数据中的一些来准备链接,如下所示:

var newval = '<a href="/proj/' + rowObject[3] + '/images/' + imgval + '">' + imgval + '</a>';
Run Code Online (Sandbox Code Playgroud)

这给了我一个网址:

<a href="/proj/3/images/photo.jpg">photo.jpg</a>
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.我的问题是当我在jqgrid中转到结果的下一页时,我丢失了一些这样的数据并得到:

<a href="/proj/undefined/images/photo.jpg">photo.jpg</a>
Run Code Online (Sandbox Code Playgroud)

如果我加载显示所有结果的页面一切正常,但是如果我使用分页,只有第一页结果将具有rowObject [3]的正确值,而后续页面上的每个其他结果都不具有该rowObject值!

那么为什么rowObject包含关于最初加载到网格中的内容的正确数据,并且当网格结果的下一页出现时似乎丢失了该数据?

我在Firebug中看到的一件事我不明白...当页面最初加载时我得到:

console.log(rowObject); 
["18", "133", "Betelguese", "3", "photo.jpg", "", "0", ""]
Run Code Online (Sandbox Code Playgroud)

在结果的下一页,我发现事情就像我预期的那样停止工作

console.log(rowObject);
Object { photo_id="18", site_id="133", more...} 
Run Code Online (Sandbox Code Playgroud)

为什么要改变?第一个结果是json,为什么我现在得到这个对象?

javascript jquery jqgrid

9
推荐指数
1
解决办法
6511
查看次数

从多维数组生成导航

问题:如何生成导航,允许从多维数组中将不同的类应用于不同的子项?

在我需要多级导航之前,我就是这样做的:

Home 
Pics 
About
Run Code Online (Sandbox Code Playgroud)

并通过调用nav()生成:

function nav(){       
    $links = array(
        "Home" => "home.php",
        "Pics" => "pics.php",
        "About" => "about.php"
    );

    $base = basename($_SERVER['PHP_SELF']);

    foreach($nav as $k => $v){
        echo buildLinks($k, $v, $base);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是buildLinks():

function buildLinks($name, $page, $selected){
    if($selected == $page){
       $theLink = "<li class=\"selected\"><a href=\"$page\">$name</a></li>\n";
    } else {
       $thelink = "<li><a href=\"$page\">$name</a></li>\n";
    }

    return $thelink;
}
Run Code Online (Sandbox Code Playgroud)

我的问题,再次:

我将如何实现以下导航(并注意到可见的子导航元素仅在该特定页面上出现时):

Home
    something1
    something2 
Pics 
About
Run Code Online (Sandbox Code Playgroud)

和...

Home
Pics
    people
    places 
About
Run Code Online (Sandbox Code Playgroud)

我试过的

从它看来,SPL中的某些迭代器似乎很适合这个,但我不知道如何处理它.我玩过RecursiveIteratorIterator,但我不知道如何将不同的样式仅应用于子菜单项,以及如何在正确的页面上显示这些项目.

我构建了这个数组来测试,但不知道如何单独使用子菜单项:

$nav = array(
array(
"Home" …
Run Code Online (Sandbox Code Playgroud)

php navigation iterator

7
推荐指数
1
解决办法
5944
查看次数

使用Zend Framework安全地运行Cron Jobs

我已经看过很多关于cron和ZF的帖子,但大多数解决方案都让这项工作可以让公众触发.

如果你想设置一个只能由cron运行的动作怎么办?不是某个匿名用户而是某个必须登录的人?

我正在使用的解决方案涉及将一个文件放在我的web根目录之外,让它足够引导ZF以使用我需要的东西(比如,我不需要视图),然后从cron中找到它.我的问题是,这是一种"最佳实践"方式吗?如果您需要通过Web访问代码但仍需要阻止随机用户查找和运行代码,该怎么办?

为了说明,这里是我正在做的(有效)从php命令行运行的cron作业,并在同一台服务器上,如下所示:

* 10 * * * php /Apps/ZF/cronjobs/crontest.php
Run Code Online (Sandbox Code Playgroud)

Webroot是: /Apps/ZF/someproject/

crontest.php:

<?php
ini_set('include_path', ini_get('include_path') . ':/Apps/ZF/someproject/library');

define('APPLICATION_PATH','/Apps/ZF/someproject/application');
define('APPLICATION_ENVIRONMENT','test');

//Include the loader (for loading ZF resources)
require_once 'Zend/Loader.php';

//Include the model (to access the Sites model in this case)
require_once(APPLICATION_PATH . '/models/Planets.php');

Zend_Loader::registerAutoload();

$configuration = new Zend_Config_Ini(
    APPLICATION_PATH . '/config/config.ini',
    APPLICATION_ENVIRONMENT
);

// DB adapter
$dbAdapter = Zend_Db::factory($configuration->database);

// DB table setup
Zend_Db_Table_Abstract::setDefaultAdapter($dbAdapter);

// Whatever code we want to run... 
$test = new Model_Planets();

$test->fetchEntries();

Zend_Debug::dump($test);
?> …
Run Code Online (Sandbox Code Playgroud)

php cron zend-framework

7
推荐指数
1
解决办法
4170
查看次数

比较MySQL中的时间戳

我的数据库中的时间戳采用以下格式:

2011-02-26T13:00:00-05:00
Run Code Online (Sandbox Code Playgroud)

但是通过MySQL获取当前时间戳:

SELECT current_timestamp();
Run Code Online (Sandbox Code Playgroud)

给我一些格式化的东西......

2011-02-26 13:05:00
Run Code Online (Sandbox Code Playgroud)

我的最终目标是遍历所有条目(每2天)并删除超过2天的条目,那么如何将条目与2011-02-26T13:00:00-05:00时间戳与当前时间戳进行比较?

mysql

6
推荐指数
1
解决办法
2万
查看次数

Javascript错误,但仅限于Firefox 4

我只在Firefox 4中出现以下错误(不在FF 3.6.16,Safari,Chrome,Opera或IE中):

jQuery("#list").jqGrid is not a function
   loadComplete: function(){console.log('complete');} 

myfile.js line 542
Run Code Online (Sandbox Code Playgroud)

loadComplete是jqgrid代码块的最后一行(第542行).所以它到达jqgrid的调用结束然后抛出此错误.

这是在过去一年一直运作良好的网站上.一旦我升级到Firefox 4,我遇到了这个问题.我确定在加载所有其他javascript之后我将这个调用加载到jqgrid(并且它在所有其他测试的浏览器和旧版本的Firefox中都能正常工作).

什么可能导致这样的事情?我本来以为可以简单地通过makeing确保调用的jqGrid是jQuery和在jqGrid的插件后进行加载,但是......这似乎已经是这样来解决(我甚至尝试上加载设置5秒的超时调用jqgrid的位,以便确保加载所有内容但仍然失败).无论如何,为什么只在FF4?


额外信息:

这是页面上的js加载顺序:

<script type="text/javascript" src="/js/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="/js/jquery-ui-1.8.1.custom.min.js"></script>
<script type="text/javascript" src="/js/i18n/grid.locale-en.js"></script>
<script type="text/javascript" src="/js/jquery.jqGrid.js"></script>
<script type="text/javascript" src="/js/ajaxupload.js"></script>
Run Code Online (Sandbox Code Playgroud)

然后在页面末尾加载jqgrid调用的特定视图:

<script type="text/javascript" src="/js/viewspecific.js"></script>
Run Code Online (Sandbox Code Playgroud)

最后一个是由Zend Framework中的一个方法加载的,该方法可以预先加载,附加或偏移加载文件.在对此进行故障排除时,我明确使用了append以及偏移量来强制此脚本最后加载死机.我甚至尝试在视图脚本的底部包含原始JS,而不是作为单独的文件加载,但没有任何区别.

有关如何排除故障的任何想法?


Oleg提供的修复方法是修改各种包含文件的加载方式.在loader(jquery.jqGrid.js)中,您将看到特定于浏览器的代码,如:

if(jQuery.browser.safari ) {
    jQuery.ajax({url:filename,dataType:'script', async:false, cache: true});
} else {
if (jQuery.browser.msie) {
    document.write('<script type="text/javascript" src="'+filename+'"></script>');
} else {
    IncludeJavaScript(filename);
}
}
Run Code Online (Sandbox Code Playgroud)

我用更通用的代替了它:

document.writeln("<script type='text/javascript' src='"+filename+"'></script>"); 
Run Code Online (Sandbox Code Playgroud)

现在一切都在所有浏览器中都很好.

javascript jquery jqgrid

6
推荐指数
1
解决办法
1374
查看次数

Zend Framework - 使用WHERE和AND更新数据库行

where在Zend Framework中的MySQL表行更新中使用,我有类似的东西:

public function updateBySiteId(array $data, $id) {
        $table = $this->gettable();

        $where = $table->getAdapter()->quoteInto('site_id = ?', $id);

        return $table->update($data, $where);
    }
Run Code Online (Sandbox Code Playgroud)

而且,我希望,这给我一些像......

UPDATE foo SET ponies = 'sparkly' WHERE site_id = '1'
Run Code Online (Sandbox Code Playgroud)

但是如果我想创建以下内容呢?

UPDATE foo SET ponies = 'sparkly' WHERE site_id = '1' AND type = 'zombie'
Run Code Online (Sandbox Code Playgroud)

在手册中我没有看到如何使用quoteInto(或引用或其他一些安全的方法......这可能只是意味着我在错误的地方但是...... 叹息).

php zend-framework

5
推荐指数
1
解决办法
1万
查看次数

Zend_Dom给你一个DOMElement ...我该如何使用它?

我正在尝试使用Zend_Dom进行一些非常轻的屏幕抓取(我想抓住一个标题,一些正文和我网站上一小块新闻项目的链接)我不知道如何处理DOMElement它给了我.

在Zend_Dom的手册中,代码说:

foreach ($results as $result) {
    // $result is a DOMElement
}
Run Code Online (Sandbox Code Playgroud)

我如何使用这个DOMElement?

一个详细的例子(在Google上寻找锚元素):

$url='http://google.com/';
$client = new Zend_Http_Client($url);
$response = $client->request();
$html = $response->getBody();
$dom = new Zend_Dom_Query($html);
$results = $dom->query('a');
foreach($results as $r){
     Zend_Debug::dump($r);
}
Run Code Online (Sandbox Code Playgroud)

这给了我:

object(DOMElement)#81 (0) {
}
object(DOMElement)#82 (0) {
}
object(DOMElement)#83 (0) {
}
... etc, etc...
Run Code Online (Sandbox Code Playgroud)

我觉得令人困惑的是,这看起来每个元素都不包含任何东西(0)!事实并非如此,但这是我的第一印象.所以我在网上找到了,发现我可以添加nodeValue以获得一些东西:

Zend_Debug::dump($r->nodeValue);
Run Code Online (Sandbox Code Playgroud)

这给了我:

string(6) "Images"
string(6) "Videos"
string(4) "Maps"
...etc, etc...
Run Code Online (Sandbox Code Playgroud)

但是遇到麻烦的地方是获取特定元素及其内容.

比如给出这个html:

  <div class="newsBlurb">
   <span class="newsDate">Mon, 11 October 2010</span>
   <h3 class="newsHeadline"><a href="http://foo.com/1/2/">Some text</a></h3> …
Run Code Online (Sandbox Code Playgroud)

php dom screen-scraping zend-framework

5
推荐指数
1
解决办法
4745
查看次数

jqGrid - 拖动一行进行排序会拧紧单元格宽度

我的问题:当我在jqGrid中拖动一行并完成自定义重新加载功能时,网格的单元格(以前在定义网格时设置的所有不同宽度)都会调整为大小相同的宽度.这种情况发生在Webkit浏览器中,但不发生在Firefox中.

代码: 我已拖动到网格上启用排序:

$mygrid.jqGrid(
    'sortableRows', {
        update: function(e, ui) {
            sort_grid(e, ui);
        }
    }
);
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我有一个名为drag complete的排序函数sort_grid.这里是:

function sort_grid(e, ui) {
    var current_grid = $(ui.item[0]).closest('table').attr('id');
    var $current_row, moved_id, next_id, next_priority;
    var $moved_row = $('#' + current_grid + ' tr');
    var cnt = 0;

    this_id = ui.item[0].id;
    $moved_row.each(function () {
        if ($(this).attr('id') == this_id) {
            $current_row = $moved_row.eq(cnt);
            moved_id = $current_row.attr("id");
            next_id = $current_row.next().attr("id");
            next_priority = $current_row.next().children("td:first").attr("title");
        }
        cnt++;
    });

    if ( typeof moved_id !== 'undefined' ) { …
Run Code Online (Sandbox Code Playgroud)

javascript jquery jqgrid

5
推荐指数
1
解决办法
2376
查看次数

以这种方式订购if语句的原因是什么?

为什么要形成if像...

if (null === $this->foo){...}
if (0 === count($bar)){...}
Run Code Online (Sandbox Code Playgroud)

而不是...

if ($this->foo === null){...}
if (count($bar) === 0){...}
Run Code Online (Sandbox Code Playgroud)

我在很多编码器和项目的代码中都注意到了这一点,但是我不知道为什么他们这样做.我是第二种方式,因为它遵循我的想法"如果这个值与null相同然后......"而询问"如果null与此值相同......"对我来说似乎有点不太明显.所以为什么?

php if-statement code-formatting operator-precedence

4
推荐指数
1
解决办法
85
查看次数