代码之家  ›  专栏  ›  技术社区  ›  anta40

如何在CodeIgniter中获取HTTP?

  •  0
  • anta40  · 技术社区  · 6 年前

    假设我有一张桌子叫 使用者

    enter image description here

    我想大致像这样进行HTTP调用 http://my.awesome.server/dev_api/index.php/login/get_user.php?user=steven&password=12345

    如果用户“steve”的密码为“12345”,则会检查数据库。这是我的密码。

    控制器

    <?php
    if(!defined("BASEPATH")) exit("No direct script access allowed");
    
    class login extends CI_Controller
    {
      public function index()
      {
        $this->load->model("login_model"); 
        $data["users"]=$this->login_model->get_user(); 
    
        $this->load->view("login_view", $data);
      }
    } 
    

    模型

        class Login_model extends CI_Model {
    
            function get_user(){
                // get username, like $_GET['user']
                $user = $this->input->get('user');
    
                // get the password and MD5-ed it, like md5($_GET['password'])
                $md5_pass = md5($this->get('password'));
    
                // the where condition
                $this->db->where(array('userName' => $user, 'password' => $md5_pass)); 
    
                // ok, now let's query the db
                $q = $this->db->get('user');
    
                if($q->num_rows() > 0){
    
                    foreach ($q->result() as $row){
                        $data[] = $row;
                    }
                }
                return $data;
            }
        }
    
    ?>
    

    看法

    <?php
    
    if (!empty($users)){
        foreach ($users as $u){
            echo $u->userId .' '. $u->userName.' '.$u->password.' ';
        }
    }
    
    ?>
    

    然后我在浏览器上打开了这个: http://my.awesome.server/dev_api/index.php/login/ 。结果是 enter image description here

    那么,如何正确地进行HTTP调用呢?

    3 回复  |  直到 6 年前
        1
  •  2
  •   Zachary Craig    6 年前

    模型中的方法名为 get_user() 而你称之为 login_model->get()

    此外,您应该使用POST而不是GET作为用户名和密码。

    同时使用 bcrypt 或者用另一种哈希算法代替MD5,这样更安全。 DO NOT USE MD5

        2
  •  1
  •   Indigo    6 年前

    您正试图与正在使用的框架对抗。

    CodeIgniter摘要通过建议您使用 URL段

    CodeIgniter中的URI方案如下( see docs ): controller/method/params...

    它分为 细分市场 :

    1. 控制器(强制)
    2. 方法(强制,但在以下情况下可能隐含 index ,请参见下文)
    3. 第一个参数(可选)
    4. 第二个参数(可选)
    5. 。。。等等

    您想使用该方法 index() 控制器的 Login ,它转换为

    http://my.awesome.server/dev_api/index.php/login/index

    此外,通过htaccess激活mode\U rewrite,可以在

    http://my.awesome.server/dev_api/login/index

    现在 索引() 是一种特殊方法,因为它是在控制器中默认调用的方法。因此,最终URL为:

    http://my.awesome.server/dev_api/login

    现在,如果您想将参数传递给您的函数,CodeIgniter会通过后续的段来实现这一点。

    但您需要在控制器方法中声明它们。

    class login extends CI_Controller
    {
        public function index($user = null, $password = null)
        { 
            // Check for $user / $password emptiness
    
            // ...
    
            // Use $user / $password as needed
            $data["users"]=$this->login_model->get_user($user , $password); 
    
            // use the results...
        }
    }
    

    现在你可以打电话:

    http://my.awesome.server/dev_api/login/index/steven/12345

    注意,我已经 指数 在URL中?这是因为在传递参数时,该方法是必需的。


    尽管如此,我将重申其他人所说的话:

    1. 避免通过GET传递登录名/密码。更喜欢POST。
    2. 使用加密连接( HTTPS )
    3. 不要用md5甚至sha1散列您的密码。你需要一个强大的算法。你还需要加盐。不管怎样,PHP让你 password_hash 。不要重新发明轮子。

    祝你好运

        3
  •  0
  •   Stefan Avramovic    6 年前

    如果您通过url传递数据 http://my.awesome.server/dev_api/index.php/login/get_user.php?user=steven&password=12345

    您可以通过URI段检索它

    $user= $this->uri->segment(3); 
    $password= $this->uri->segment(4); 
    

    分拣: https://www.codeigniter.com/userguide3/libraries/uri.html

    这条线可能 $md5_pass = md5($this->get('password')); 正在设置错误if$this->get('password')为空。