【问题标题】:Something wrong with Codeigniter Callback validationCodeigniter 回调验证有问题
【发布时间】:2016-02-18 14:04:40
【问题描述】:

所以我正在创建一个网络应用程序,它有这个上传表单,您可以在其中上传 android APK,这部分上传表单专门用于上传旧 APK 的修订版本(即应用程序的新版本)。

所以我在 PHP 中使用 CodeIgniter 2.x 完成所有这些工作 由于用户正在上传旧应用程序的新版本,我希望网站确保用户为这个旧应用程序上传的应用程序具有相同的包名(Android 包文件名),例如 com.example.something

启动文件上传时,解析文件并将包名放入数据库,并将该文件随机生成的hash作为'new_app_hash'存储在session数据中,旧文件的随机hash为在名为“app_id”的隐藏输入字段中。

现在来看代码: 我的控制器已经准备好为 app_id 执行回调,并将其信息与会话中的“new_app_hash”进行比较。 所以,这个回调主要是为了获取我的数据库表中hash为'app_id'和'new_app_hash'的行信息,然后比较包名。

    $app_id = $this->input->post('app_id',TRUE);

    if($app_id!='0'){ //only if app_id is not 0, else I dont want this to happen
      $this->form_validation->set_rules('app_id','New Package','required|callback_packagerevname');
    }

回调中使用的模型函数:

public function check_checkpackagerevname($app_id,$sessionhash){
    if($app_id!='0'){
      $old_package = $this->getPackageInfo($app_id);
      $new_package = $this->getPackageInfo($sessionhash);
      if($old_package['package_name']==$new_package['package_name']){
      ///ok fine they are same, return true.
        return TRUE;
      }else{
        return FALSE;
      } 
    }else{
      return TRUE;
    }
  }

GetPackageInfo():

public function getPackageInfo($hash){

    $this->db->select('*');
    $this->db->from('appstore_packages');
    $this->db->where('hash',$hash);
    $query = $this->db->get();
    return $query->row_array();
}

我的回调如下:

  function callback_packagerevname($app_id){
    $sessionAppHash  = $this->session->userdata('new_hash_app');
    $checking = $this->storeM->check_checkpackagerevname($app_id,$sessionAppHash);

    if($checking==TRUE){
        return TRUE;    
    }else{
      $this->form_validation->set_message('packagerevname','The uploaded APK must have same package name as the parent app that you are trying to upload.');
      return FALSE; ////// new apk doesnt have same package name.
    }
  }

我尝试检查 form_validation 规则是否有效,当我添加其他类型的规则(如大于 [0])时,它确实显示错误,但在提交表单时回调不起作用,尽管回调函数似乎为了正常工作,当我直接从 URL 访问它时,在会话中设置了“new_app_hash”并将 app_id 放入 URL 中,它会相应地返回 true 或 false。

可能出了什么问题?

P.S 如果问题有点令人困惑,请发表评论,我在过去 12 个小时内一直在为这个项目工作,所以我有点了解。 :P

编辑:好吧,看来我真的需要 12 个小时。 感谢praveen,我错误地命名了回调方法, 而不是:

  function callback_packagerevname($app_id){
}

显然应该是:

function packagerevname($app_id){
}

【问题讨论】:

    标签: php codeigniter callback


    【解决方案1】:

    您不需要 callback_functionname 作为回调事件,只需删除 callback_ 即可正常工作...

    function packagerevname()
    {
    $app_id = $this->input->post('app_id');
    //so on....
    }
    

    【讨论】:

    • 大夫,我怎么错过了。也许 12 个小时让我付出了代价 :( 谢谢
    • 别心疼人...我已经 3 年了,仍然犯一些愚蠢的错误 :)
    • 将其标记为答案...您肯定知道该怎么做:)
    【解决方案2】:

    您可以使用设置闪存数据

        /* $this->form_validation->set_message('checkpackagerevname',
    'The uploaded APK must have same package name as the parent app that you are trying to upload.'); */
    
        $this->session->set_flashdata('checkpackagerevname', 
    'The uploaded APK must have same package name as the parent app that you are trying to upload.');
    

    可以打印

    echo $this->session->flashdata('checkpackagerevname');
    

    更多访问 https://ellislab.com/codeigniter/user-guide/libraries/sessions.html

    【讨论】:

    • 我有一个特定的库,我的验证错误正在显示,除了这个回调,同一方法中同一控制器中的另一个回调函数正在工作。
    猜你喜欢
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多