2016-12-02 11 views
1

私は、送信されている投稿に基づいてクエリを変更するためにPHPファイルを設定しました。ネイティブフェッチに反応します:投稿は送信されましたが、PHPファイルで受信されません

<?php 

$pdo = new PDO("mysql:host=localhost;dbname=...","...","...",array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); 
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

if(isset($_POST['country'])){ 

    $query = stripslashes("SELECT A.id, A.supplier_id, A.pickup_date, A.dropoff_date, A.rate, A.days_allowed, A.fuel_allowed, A.location_from, A.location_to, A.dropoff_office_id,  A.pickup_office_id, A.vehicle_type_id, B.city AS location_from_city, C.city AS location_to_city, D.vehicle_type,D.transmission FROM _relocation_deals A JOIN _airport_codes_lookup B ON A.location_from = B.code JOIN _airport_codes_lookup C ON A.location_to = C.code JOIN _vehicle_types D ON A.vehicle_type_id = D.id WHERE B.country = '".$_POST['country']."' AND A.active = 1 AND A.status = 1 ORDER BY A.pickup_date ASC"); 

$data = array(); 

try 
{ 
    $sql = $query; 
    $result = array(); 
    $stmt = $pdo->prepare($sql); 
     $stmt->execute(); 
    while($result = $stmt->fetch()){ 
     $data[] = $result; 
    } 
} 
    catch (PDOException $e) 
{ 
    echo $e->getMessage(); 
} 

    echo json_encode($data); 
}else{ 
    $arr = array('error' => 'no post sent'); 
    echo json_encode($arr); 
} 

?> 

私はfetchを使用して、反応ネイティブでこのファイルに投稿しています。

fetch(REQUEST_URL, { 
    method: 'POST', 
    headers: { 
    'Accept': 'text/html', 
    'Content-Type': 'application/x-www-form-urlencoded' 
    }, 
    body: JSON.stringify({ 
    country: "New Zealand" 
    }) 
}) 
    .then((response) => response.json()) 
    .then((responseData) => { 
    console.log(responseData); 
    }) 
    .catch((error) => { 
    console.error(error); 
}); 

私が送信されたデータは、{「国」、「ニュージーランド」}であるというのが私のネットワークインスペクタで見ることができますが、私は{「エラー」、「何のポストは送信されません」}の応答を取得します。私のPHP文書がこの投稿を受け取っていない理由はありますか?ありがとう。

答えて

0

あなたは代わりにJSONのリクエストボディas URIエンコードする必要があります。

body: 'country=' + encodeURIComponent('New Zealand'), 

それとも、php://inputからPOSTパラメータを読み、手動でJSONからそれらをデコードすることができます。

さらに、PHPコードは、非常にvulnerableです。 HTTPクエリー文字列には、HTTPリクエストやその他の信頼できないデータからパラメータを挿入しないでください。 stripslashes()は、SQLの特殊文字をエスケープする方法ではありません。すでにPDOとプリペアドステートメントを使用しているので、bindValue()などの適切な方法でパラメータをバインドしてください。

関連する問題