2016-07-13 7 views
-3

がここに私のコードの関連部分の価値観場合:問題/他の

$json = file_get_contents('php://input'); 

$obj = json_decode($json, true); 
$device_id =$obj['device_id']; 
$num =$obj['sensor_value']; 
$sensor_value =(int)$num; 


if ($sensor_value > 100){ 
    $sql = "INSERT INTO rr_emergency (device_id,sensor_value) VALUES('$device_id','$sensor_value');"; 
    $result = $dbh->query($sql)->fetchAll(PDO::FETCH_ASSOC); 
} 
else { 

    $sql = "INSERT INTO general_logging (device_id,sensor_value) VALUES('$device_id','$sensor_value');"; 
    $result = $dbh->query($sql)->fetchAll(PDO::FETCH_ASSOC); 
} 

elseステートメントが正常に動作します。ただし、$sensor_valueが100より大きい場合、私のステートメントのif部分は発生しません。私はここで何が欠けていますか?

+1

チェックが...それはおそらく 'if'に入りますが、何かが行きます違う。 – FirstOne

+7

**警告**あなたのコードはSQLインジェクション攻撃に対して非常に脆弱です –

+0

@ DanielA.Whiteはい、ありがとう、私はそれを知っています。いくつかのものをテストするだけです。後で適切なPDO構文を実行します。 – jonmrich

答えて

2

言語構成としてif/elseがランダムに壊れている可能性はほとんどありません。

$json = file_get_contents('php://input'); 

$obj = json_decode($json, true); 
$device_id =$obj['device_id']; 
$num =$obj['sensor_value']; 
$sensor_value =(int)$num; 

echo "num=$num\n"; //Are you actually getting a value from $obj? 
echo "sensor_value=$sensor_value\n"; //Compare to num. Is it being cast correctly? 

if ($sensor_value > 100){ 
    echo "Inside 'True' clause\n"; 
    try { 
     $sql = "INSERT INTO rr_emergency (device_id,sensor_value) VALUES('$device_id','$sensor_value');"; 
     $result = $dbh->query($sql)->fetchAll(PDO::FETCH_ASSOC); 
    } catch (Exception $e) { 
     echo "Caught exception trying to execute sql: ", $e->getMessage(), "\n"; 
    } 
} 
else { 
    ... 
} 

あなたがを期待するとして、我々はすべてがに動作していることを確認してこれらの事を行うことにより:しかし、あなたはあなたがあなたが何を考えてやっているかどうかを判断するためにいくつかのことを行うことができます。これが問題を明らかにする可能性があります。整数に文字列からキャストするに

のキャスト

注 、あなたが使用する必要がありますintval:エラーのため

$sensor_value = intval($num); 
+0

私は実際にこれらの ''の結果を見ることができます'echo' ''私はPHPを自分で実行していないので、 Webサービスは単にそれをPOSTしています。 – jonmrich

+0

私は間違いなく正しく値を得ています。 '' $ sensor_value''の値が100を超えない場合(つまり、iF条件を満たす場合)、ELSEの指示に従って正しい値がデータベースに挿入されます – jonmrich

+0

@jonmrich Webサービスはロギング?その場合、echoの代わりにそのロガーを使用することができます。 htmlで「ソースを見る」と表示されるかもしれませんが、インフラストラクチャについてもっと知る必要があります。 –

関連する問題