Codeigniter从URL传递值

时间:2016-09-07 17:27:36

标签: php codeigniter

函数从视图页面接收出发日期和成人(它正确地传递了值,因为我已经检查了做回显函数),但是从这个函数我无法将值传递给另一个函数

public function index()
{

    if ($data = $this->input->post('muktinath')) {

        $date = $data['departure_on'];
        $adult = $data['adult'];

        $getNameValue = array(
            $date = 'departure_on',
            $adult = 'adult',
        );

        redirect('booking/muktinath/' . $getNameValue);
    }

    else{
        $this->load->view('index');
    }
}

这是必须接收值的函数

public function muktinath($getNameValue)
{
    echo $getNameValue; 

    // here value must be shown of departure date and adult passed from above

}

2 个答案:

答案 0 :(得分:1)

您没有分享您收到的错误消息。打几个。

最大的问题是你不能将array作为查询字符串的一部分。但修复很容易。

function index()
{
    $data = $this->input->post('muktinath'); 
    if($data)
    {
        //From your question $data seems to be an array already. Just use that!
        redirect('booking/muktinath/'.$data['departure_on'].'/'.$data['adult']);
    }
    else
    {
        $this->load->view('index');
    }
}

然后以这种方式定义接收值的函数。

public function muktinath($date, $name)
{
    echo $date . " - " . $name;
}

如果$date包含我认为是日期字符串的任何斜杠(/),会出现问题。斜杠将成为URL的一部分,如果日期为" 7/9/2016"而名字是" sandesh"会做这个URL。

http://example.com/booking/muktinath/7/9/2016/sandesh

正如您所看到的,它有多个URI段,超出了您的预期。这个URL将回应" 7 - 9"这不是很有帮助。您可能必须在发送日期时调整日期格式,然后在muktinath()收到日期后重新格式化日期。

顺便说一下,你的数组声明是错误的。我想你正试图做到这一点。

$getNameValue = array(
   'departure_on' => $date,
   'adult' => $adult
   );

问题是,您刚刚重新创建了$data已经存在的内容。但是你无论如何都不需要$getNameValue

答案 1 :(得分:1)

你的问题是:

redirect('booking/muktinath/' . $getNameValue);

尝试回显预订/ muktinath /'.$ getNameValue,您将看到有一个数组到字符串错误。重定向是一个网址,但您已从帖子中获取数据。您不能轻易地从帖子转换为网址,也不应该这样做,否则首先发布数据的重点是什么。你怎么知道帖子值中没有非法的url字符?

为什么要重定向,只需将表单发布到正确的页面并在那里处理发布数据?

验证,格式化网址,然后使用网址调用中的实际组件不是这样的,但是像这样....

redirect('booking/muktinath/'.$date.'/'.$adult);

或者更好的是,不要在这里重定向,而是调用函数(库或模型或控制器中,由您决定)

public function muktinath($date, $adult)
{
       ....
      return TRUE/FALSE or whatever you need.
} 

在您的控制器中检查返回值以查看要执行的操作

if ($this->mylibraryorwhatever->mukinath($date, $adult) 
{
    // success
    redirect('success page');  // or whatever
}
else
{
   // fail
   .....
}

希望有所帮助。