如何在CodeIgniter中进行HTTP GET?

时间:2018-03-21 16:13:53

标签: php codeigniter codeigniter-3

假设我有一个名为用户

的表格

enter image description here

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

如果用户'steve'并且密码为'12345',则检查数据库。这些是我的代码。

控制器

var array = [{    "open": "0.06353900",    "high": "0.06354800",    "low": "0.06341700",    "close": "0.06347300",    "volume": "335.48500000",    "timestamp": 1521640800000},{    "open": "0.06347300",    "high": "0.06365400",    "low": "0.06344000",    "close": "0.06357500",    "volume": "461.02800000",    "timestamp": 1521641100000},{    "open": "0.06349500",    "high": "0.06360400",    "low": "0.06341400",    "close": "0.06352300",    "volume": "495.50600000",    "timestamp": 1521641400000}];

var result = array.reduce((a, {low}) => {
  a.push(low);
  return a;
}, []);

console.log(result);

模型     

<?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;
        }
    }

?>

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

如何正确地进行HTTP呼叫呢?

3 个答案:

答案 0 :(得分:2)

模型中的方法名称为dataB,而您将其称为get_user()

你应该使用POST而不是GET来获取用户名和密码。

同样使用bcrypt或其他哈希算法代替MD5,它更安全。 DO NOT USE MD5

答案 1 :(得分:1)

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

CodeIgniter摘要通过建议您使用网址来处理GET参数。

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

它分为

  1. 控制器(必填)
  2. 方法(强制性,但index可能隐含,见下文)
  3. 第一个参数(可选)
  4. 第二个参数(可选)
  5. ......等等
  6. 您想使用控制器index()的方法Login,它转换为

      

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

    此外,通过htaccess激活mode_rewrite,可以在

    中进行简化
      

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

    现在,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

    请注意,我已将index放入网址?这是因为在传递参数时,该方法是强制性的。

    那就是说,我会重申其他人所说的话:

    1. 避免通过GET传递登录名/密码。喜欢POST。
    2. 使用加密连接( HTTPS
    3. 请勿使用md5甚至sha1散列您的密码。你需要一个强大的算法。你也需要加盐。无论如何,PHP让你了解password_hash。不要重新发明轮子。
    4. 祝你好运。

答案 2 :(得分:0)

如果您通过网址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); 

SORCE: https://www.codeigniter.com/userguide3/libraries/uri.html

如果$ this-&gt; get('password')为空,则此行$md5_pass = md5($this->get('password'));设置错误是可能的。