2011-03-23 57 views
5

誰知道爲什麼:代碼點火器POST變量

 
class Booking extends Controller { 

    function booking() 
    { 
     parent::Controller(); 
    } 

    function send_instant_to_paypal() 
    { 
     print_r($_POST); 
     echo '<hr />'; 
     print_r($this->input->post()); 
     echo '<hr />'; 
     $id_booking = $this->input->post('id_booking'); 
     $title = $this->input->post('basket_description'); 
     $cost = ($this->input->post('fee_per_min') * $this->input->post('amount')); 
     echo $id_booking; 
     echo $title 
     echo $cost 
    } 
} 

迴音必交的變量CI爲$ _ POST 但不是$這個 - >輸入 - >後();?

我有 $ this-> input-> post()在使用和在網站的其他地方的搜索頁面上工作...但在此頁面上,它不工作.. 這裏是我的表格.. 。

 
<form id="add_funds" action="' . site_url('booking/send_instant_to_paypal') . '" method="post"> 
<input type="text" name="amount" id="amount" value="" /> 
<input type="hidden" name="id_booking" id="id_booking" value="0" /> 
<input type="hidden" name="basket_description" id="basket_description" value="Adding Credit" /> 
<input type="hidden" name="fee_per_min" id="fee_per_min" value="' . $fee_per_min . '" /> 
<input type="submit" value="Add to basket" /> 
</form> 

它的精神;-p 任何點什麼明顯的愚蠢我失蹤?

+0

CI2.1 or CI1.X?看起來像CI1,這意味着你對'$ this-> input-post()'的調用是錯誤的 – Jakub 2011-03-23 17:56:46

回答

4

您很可能已啓用XSS或CSRF,並且會禁止(在此猜測)PayPal將這些詳細信息發回給您。

這是CodeIgniter的典型代碼,並且有一些解決方法,如某些控制器(通過配置或掛鉤)排除CSRF。

如果您對POST來自哪裏有更多詳細信息,我可以回答一些問題。

編輯

可能是你錯誤地調用$this->input->post()?我知道CI2.1增加了$this->input->post()支持返回全陣列,但直到這一點上,你必須明確定義變量後你想ALA:

$user = $this->input->post('username');

+0

說實話,貝寶並沒有在循環中(它會)。 我所做的只是在視圖中加載表單併發布到上面提供的控制器/方法。 沒有其他的事情..我已經把它分解爲基本知識.. :-( – Beertastic 2011-03-23 17:55:55

+3

我懷疑你CI2.1文檔(用戶指南)與CI1.X版本混淆,所以$ this-> input - > post()不會爲你返回一個數組,在這裏查看最新的更改日誌:http://codeigniter.com/user_guide/changelog.html – Jakub 2011-03-23 17:59:11

+0

確實,這是一個菜鳥的錯誤.. 但是,我添加了明確的後變量,我已經添加到我的第一篇文章。 這些變量不回顯......我無法理解爲什麼...... – Beertastic 2011-03-24 09:57:42

0

的唯一的事情我現在能想到的是你可能沒有加載表單助手,但我不確定它是否被用於此。 可以在/config/autoload.php

我如這樣做有這樣的:

$autoload['helper'] = array('url', 'form', 'html', 'site_helper', 'upload_helper'); 

你也可以在你的函數本身加載如下:

function send_instant_to_paypal() 
    { 
     $this->load->helper('form'); 
     print_r($_POST); 
     echo '<hr />'; 
     print_r($this->input->post()); 
     echo '<hr />'; 
     $id_booking = $this->input->post('id_booking'); 
     $title = $this->input->post('basket_description'); 
     $cost = ($this->input->post('fee_per_min') * $this->input->post('amount')); 
     echo $id_booking; 
     echo $title 
     echo $cost 
    } 
2

我解決了問題與排除針對該特定方法的CSRF保護

您可以在application/config/config.php中添加此代碼

if(stripos($_SERVER["REQUEST_URI"],'/Booking/send_instant_to_paypal') === FALSE) 
{ 
    $config['csrf_protection'] = TRUE; 
} 
else 
{ 
    $config['csrf_protection'] = FALSE; 
}