PHP: функция CURL с помощью формы?

0

Я пытаюсь преобразовать британские почтовые индексы в longs и lats, используя PHP.

поэтому вместо использования карт Google я собираюсь использовать PHP CURL и использовать альтернативный поставщик, который проще реализовать.

тем не менее, у меня проблема с тем, что функция CURL возвращает что-либо, используя поле ввода в форме.

в основном, мне просто нужно поместить Кодовый Код в поле ввода в мою форму и нажать поиск, и он должен использовать CURL и вернуть длинный и лат этого почтового кода, но мой код этого не делает и вместо этого печатает поле ввода значение в строке URL и это!

вот мой весь код:

<?php 
error_reporting(-1);
ini_set('display_errors', 'On');
if (isset($_POST["postcode"])) {
function postCode2Geog($code){
//$code = strtolower(str_replace(' ','',$code));

$code = $_POST["postcode"];

 $uri = "http://www.streetmap.co.uk/streetmap.dll?GridConvert?name=".$code."&type=Postcode";

 $ch = curl_init($uri);
 curl_setopt($ch, CURLOPT_HEADER, 0);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 $output = curl_exec($ch);
 curl_close($ch);

 preg_match('#long</strong> \(wgs84\)\s*?\<\/td\>\s*?\<td width="50%" align="center" valign="middle"\>\S{2,3}:\S{2}:\S{2} \( (.*?) \)#i',$output,$longMatch);
 preg_match('#lat</strong> \(wgs84\)\s*?\<\/td\>\s*?\<td width="50%" align="center" valign="middle"\>\S{2,3}:\S{2}:\S{2} \( (.*?) \)#i',$output,$latMatch);
 $long = $longMatch[1];
 $lat = $latMatch[1];

 return array($lat,$long);
}
}
?>

и это часть HTML:

<form action="" method="GET">

<input type="text" name="postcode" />

<input type="submit" value="search" >
</form>

мог бы кто-нибудь проконсультировать по этому поводу?

РЕДАКТИРОВАТЬ:

error_reporting(-1);
ini_set('display_errors', 'On');
if (isset($_POST["postcode"])) {

//$code = strtolower(str_replace(' ','',$code));

$code = $_POST["postcode"];

 $uri = "http://www.streetmap.co.uk/streetmap.dll?GridConvert?name=".$code."&type=Postcode";

 $ch = curl_init($uri);
 curl_setopt($ch, CURLOPT_HEADER, 0);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 $output = curl_exec($ch);
 curl_close($ch);

 preg_match('#long</strong> \(wgs84\)\s*?\<\/td\>\s*?\<td width="50%" align="center" valign="middle"\>\S{2,3}:\S{2}:\S{2} \( (.*?) \)#i',$output,$longMatch);
 preg_match('#lat</strong> \(wgs84\)\s*?\<\/td\>\s*?\<td width="50%" align="center" valign="middle"\>\S{2,3}:\S{2}:\S{2} \( (.*?) \)#i',$output,$latMatch);
 $long = $longMatch[1];
 $lat = $latMatch[1];

 return array($lat,$long);
}
  • 0
    где вы на самом деле вызываете эту функцию? Ваш метод формы также должен быть POST так как вы используете $_POST
  • 0
    @ ElefantPhace, я думал, что звоню внутри if (isset ...) и т. Д.?
Показать ещё 6 комментариев
Теги:
curl

1 ответ

0
Лучший ответ

во-первых, поскольку вы хотите использовать переменные $_POST вам необходимо изменить свой метод формы на POST

<form action="" method="POST">

Вы также никогда не называете свою функцию, но вы никогда не узнаете об этом, потому что, когда вы проверяете if(isset($_POST['whatever'])) он никогда не будет установлен, потому что вы использовали GET в качестве метода формы.

Вам нужно определить свою функцию вне этого блока кода и вызвать ее изнутри.

Вот рабочий пример: я использовал отдельную функцию для выполнения cURL для возврата любых ошибок

<?php

if(isset($_POST['postcode'])){
    $data = postCode2Geog($_POST['postcode']);
    var_dump($data);
}else{
    displayForm();
}

function displayForm(){
    echo "<form action='' method='post'>";
    echo "<input type='text' name='postcode' />";
    echo "<input type='submit' value='search' />";
    echo "</form>";
}

function postCode2Geog($code){
    $code = urlencode($code);
    $uri = "http://www.streetmap.co.uk/streetmap.dll?GridConvert?name=$code&type=Postcode";

    $output = url_get_contents($uri);

    preg_match('#long</strong> \(wgs84\)\s*?\<\/td\>\s*?\<td width="50%" align="center" valign="middle"\>\S{2,3}:\S{2}:\S{2} \( (.*?) \)#i',$output,$longMatch);
    preg_match('#lat</strong> \(wgs84\)\s*?\<\/td\>\s*?\<td width="50%" align="center" valign="middle"\>\S{2,3}:\S{2}:\S{2} \( (.*?) \)#i',$output,$latMatch);
    $long = $longMatch[1];
    $lat = $latMatch[1];

    return array('lat'=>$lat,'long'=>$long);
}

function url_get_contents($url){
    $crl = curl_init();
    $timeout = 10;
    curl_setopt_array($crl, array(
        CURLOPT_URL => $url,
        CURLOPT_ENCODING => 'UTF-8',
        CURLOPT_RETURNTRANSFER => '1',
        CURLOPT_FOLLOWLOCATION => '1',
        CURLOPT_CONNECTTIMEOUT => $timeout)
    );
    $ret = curl_exec($crl);
    $info = curl_getinfo($crl);

if ($ret === false || $info['http_code'] != 200) {
   $ret = "No cURL data returned for $url [". $info['http_code']. "]";
   if (curl_error($crl))
     $ret .= "<br>\n Error: ". curl_error($crl) . "Code: " . curl_errno($crl);
}
    curl_close($crl);
    return $ret;
}

Возврат EC1R 4RR
array(2) { ["lat"]=> string(9) "51.526254" ["long"]=> string(9) "-0.109119" }

Там отредактирован, чтобы вы могли хотя бы увидеть, что есть в массиве. И для их использования вы должны использовать $data['lat'] и $data['long']

  • 0
    Спасибо, но все, что мне было нужно, это фактические $ lat и $ long, но вы, кажется, помещаете все в массив, что затрудняет извлечение данных!
  • 0
    @william. это способ, которым вы его получили, возвращенный в виде массива. Это все еще не трудно получить из массива, хотя ... Но я пошел вперед и сделал больше работы для вас. будь счастлив.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню