2016-06-24 19 views
0

我正在使用Zillow API以從用戶輸入中獲取一些數據。到目前爲止,我已經能夠正確使用API​​從單個輸入中獲取所需的數據。PHP函數 - 將HTML表單輸入轉換爲多輸入的可重用函數

我遇到的問題是當我嘗試將簡單的代碼塊轉換爲可以多次重複使用多個輸入的函數時。最後,我希望用戶能夠上傳CSV文件或並通過多個輸入來運行該功能。

下面是我的代碼可正常工作:

HTML

<form action="logic.php" method="post"> 
    <p>Address: <input type="text" name="address"></p> 
    <p>City/State: <input type="text" name="csz"></p> 
    <input type="submit"> 
</form> 

PHP

//API Key 
$api_key = 'XXXxxXXX'; 


//User Inputs 
$search = $_POST['address']; 
$citystate = $_POST['csz']; 
//User Inputs Fromatted 
$address = urlencode($search); 
$citystatezip = urlencode($citystate); 



//Get Address ID From API 
$url = "http://www.zillow.com/webservice/GetSearchResults.htm?zws-id=".$api_key."&address=".$address."&citystatezip=".$citystatezip; 
$result = file_get_contents($url); 
$data = simplexml_load_string($result); 
$addressID = $data->response->results->result[0]->zpid; 



//Get Estimate from API (using adressID) 
$estimate_url = "http://www.zillow.com/webservice/GetZestimate.htm?zws-id=".$api_key."&zpid=".$addressID; 
$estimate_result = file_get_contents($zurl); 
$estimate_data = simplexml_load_string($zresult); 
$estimate = $zdata->response->zestimate->amount; 

echo $estimate; 

現在的問題是,當我嘗試和包裝這兩種起來分成兩個獨立的功能,以便將它們用於多個輸入。

$api_key = 'XXXxxXXX'; 

//User Inputs 
$search = $_POST['address']; 
$citystate = $_POST['csz']; 
//User Inputs Fromatted 
$address = urlencode($search); 
$citystatezip = urlencode($citystate); 


function getAddressID($ad,$cs){ 

    //Get Address ID From API 
    $url = "http://www.zillow.com/webservice/GetSearchResults.htm?zws-id=".$api_key."&address=".$ad."&citystatezip=".$cs; 
    $result = file_get_contents($url); 
    $data = simplexml_load_string($result); 
    $addressID = $data->response->results->result[0]->zpid; 
    return $addressID; 

} 

$addressID = getAddressID($address, $citystatezip); 




function getEstimate($aID){ 
    //Get Estimate from API (using adressID) 
    $estimate_url = "http://www.zillow.com/webservice/GetZestimate.htm?zws-id=".$api_key."&zpid=".$aID; 
    $estimate_result = file_get_contents($estimate_url); 
    $estimate_data = simplexml_load_string($estimate_result); 
    $estimate = $estimate_data->response->zestimate->amount; 
    return $estimate; 

} 

echo getEstimate($addressID); //Calling function doesn't return anything 

如果基本上我在做和第一個PHP例子一樣的事情。爲什麼不在函數內部工作?我忽略了什麼?

對此的螞蟻幫助將不勝感激。

+1

你能告訴我什麼是'$ zurl'?我看不到你在哪裏定義了它? – Rohit

+0

對不起,我更新了代碼塊。 $ zurl是從舊版本複製的。 – iammikerodriguez

回答

1

問題是,您在兩個函數中都使用$api_key變量,並且該變量在那裏不可用。 PHP與其他語言有些不同。你可以在這裏閱讀:http://php.net/manual/en/language.variables.scope.php

我建議你提取一個調用API的函數。這樣你可以在該函數中聲明api鍵。它還允許您更容易地維護您的代碼(您可以通過添加一些錯誤處理或切換到curl或某物來改進您的api調用)。程序員的黃金法則,不要重複自己。

的代碼可能看起來像這樣(未經):

//User Inputs 
$search = $_POST['address']; 
$citystate = $_POST['csz']; 
//User Inputs Fromatted 
$address  = urlencode($search); 
$citystatezip = urlencode($citystate); 

function callZillow($endpoint, array $params) 
{ 
    $params['zws-id'] = 'XXX'; // this would be your api_key 

    $url = 'http://www.zillow.com/webservice/' . $endpoint . '.htm?' . http_build_query($params); 
    $result = file_get_contents($url); 

    return simplexml_load_string($result); 
} 


function getAddressID($ad, $cs) 
{ 
    //Get Address ID From API 
    $data  = callZillow('GetSearchResults', ['address' => $ad, 'citystatezip' => $cs]); 
    $addressID = $data->response->results->result[0]->zpid; 

    return $addressID; 
} 

$addressID = getAddressID($address, $citystatezip); 

function getEstimate($aID) 
{ 
    //Get Estimate from API (using adressID) 
    $estimate_data = callZillow('GetZestimate', ['zpid' => $aID]); 
    $estimate  = $estimate_data->response->zestimate->amount; 

    return $estimate; 
} 

echo getEstimate($addressID); 
+0

感謝您的回答。我部分理解你在說什麼。所以你所說的幾乎是,$ api_key不是全局變量,因此它不能在兩個函數中調用,對吧? – iammikerodriguez

+1

它是一個全局變量,但是「它沒有在這個範圍內賦值」,「在PHP中,全局變量必須在函數中聲明爲全局變量,如果它們將被用於該函數」。在我給出的鏈接中有很好的解釋。 – Pevara

+0

Gotcha。感謝您的回答。我更像是一位JavaScript程序員,所以我在PHP上苦苦掙扎。我將在PHP中閱讀範圍。我感謝您的幫助。 – iammikerodriguez

相關問題