2016-06-24 1 views
0

Я использую API Zillow для получения данных от пользовательских входов. До сих пор я мог правильно использовать 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 в этой функции. Он также позволяет вам упростить работу с вашим кодом (вы можете улучшить свой 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

Смежные вопросы