如何在PHP中克服“undefined offset 0”和“undefined variable:str”的注意事项?

时间:2014-04-07 14:49:26

标签: php wordpress undefined

我的PHP中有一个if和array语句,显示通知未定义偏移量&未定义的变量。如何在下面的代码中克服这两个错误?

  

未定义的偏移量0

     

未定义的变量:str

 function calc_pending_conf(){
$comm = array();
global $wpdb;
$unsecurearray = array();
$nps = $wpdb->get_results("SELECT ID FROM wp_posts WHERE post_status = 'publish' AND post_type = 'post' AND comment_status = 'open'");
$numposts=0;
foreach($nps as $np){
    if (comments_open($np->ID)){
        $numposts++;
        $unsecurearray[]=$np->ID;
    }
}
$allusers = $wpdb->get_results("SELECT ID FROM wp_users");
foreach ($allusers as $usr):
    $comcount=0;
    $args = array('user_id' => $usr->ID);
    $usercomment = get_comments($args);
    foreach($usercomment as $cot) :
        if(in_array($cot->comment_post_ID,$unsecurearray)){$comcount++;}
    endforeach;
    $snumposts = $wpdb->get_var("SELECT COUNT(*) FROM wp_ps_security, wp_posts WHERE wp_ps_security.sec_protect_id = wp_posts.ID AND wp_posts.post_type = 'post' AND wp_posts.comment_status = 'open'");
    $unsecure = $numposts - $snumposts;
    $cid = $usr->ID;
    $groupid = $wpdb->get_results("SELECT grel_group_id FROM wp_ps_group_relationships WHERE grel_user_id = '".$cid."'");
    if(isset($groupid) && is_array($groupid) && is_object($groupid[0])):
    if($groupid[0]->grel_group_id==11 || $groupid[0]->grel_group_id==3 || $groupid[0]->grel_group_id==1 || sizeof($groupid)==0):
        $pendingc = 0;
    else:
        $applicable=0;
        foreach($groupid as $grp){
            $str = $str."wp_ps_security.sec_access_id=".$grp->grel_group_id." OR ";
        }
        global $applicablearray;
        $applicablearray = array();
        $aarray = $wpdb->get_results("SELECT DISTINCT wp_ps_security.sec_protect_id FROM wp_posts,wp_ps_security WHERE wp_posts.comment_status='open' AND wp_posts.post_status='publish' AND wp_posts.post_type='post' AND (".substr($str, 0, -3).") AND wp_posts.ID=wp_ps_security.sec_protect_id");
        foreach ( $aarray as $aa ) 
        {
            $applicablearray[]=$aa->ID;
        }
        $applicable = sizeof($applicablearray);

        $pendingc = $unsecure + $applicable - $comcount;
    endif;
    $wpdb->query( "UPDATE wp_users SET confpending=".$pendingc." WHERE ID=".$cid);
    update_user_meta( $cid, 'confpending', $pendingc );
endforeach;

}

3 个答案:

答案 0 :(得分:1)

不要使用未定义的变量吗?

在尝试访问变量之前,请使用isset确保变量存在。

就个人而言,不自己这样做,但我个人将错误报告设置为E_ALL ^ E_NOTICE。这是一个坏主意,我再次说你不应该这样做,但是如果你愿意接受如果你错误输入一个变量名就会悄悄搞砸的风险,这是一个选择。

答案 1 :(得分:1)

php检查条件是否懒散,如果某些内容失败,他将不会继续前进。

例如IF(A AND B),如果A为假,则永远不会检查B.

你可以在你的例子中使用它,你可以检查isset($ groupID [0])AND(其他一切)。

如果$ groupID [0]未设置,则忽略整个if check。

答案 2 :(得分:0)

之前检查$ groupid:

    // you just need insert this line before your if statement:
    if(isset($groupid) && is_array($groupid) && is_object($groupid[0]))
    // Your code
    if($groupid[0]->grel_group_id==11 || $groupid[0]->grel_group_id==3 || $groupid[0]->grel_group_id==1 || sizeof($groupid)==0):