2017-04-09 10 views
-1

POSTリクエストからJSONペイロードを受け取ってphpMyAdminのデータベースに挿入するPHPハンドラを作成しました。なぜこれが動作していないのか分かりません。jsonデータがmySQLデータベースにINSERTされないのはなぜですか?

JSON:

payload = { 
    "version":"1.0", 
    "event":"video_recorded", 
    "data":{ 
     "videoName":"vs1457013120534_862", 
     "audioCodec":"NellyMoser ASAO", 
     "videoCodec":"H.264", 
     "type":"FLV", 
     "orientation":"landscape", 
     "id":"0", 
     "dateTime":"2016-03-03 15:51:44", 
     "timeZone":"Europe/Bucharest", 
     "payload":"111.111.111.11", 
     "httpReferer":"http://site_from_where_video_was_recorded.com" 
    } 
} 

私はオンラインチュートリアルから得たPHPコード。

<?php 

/* db variables */ 

$dbhost = 'localhost'; 
$dbname = 'name_db'; 
$dbuser = 'user_db'; 
$dbpass = 'pass_db'; 

/* grab the json */ 

$data = $_POST['payload']; 

/* put json into php associative array */ 

$data_array = json_decode($data); 

/* store in PHP variables */ 

$ip_address = $data_array['data']['payload']; 
$vid_name = $data_array['data']['videoName']; 
$date_time = $data_array['data']['dateTime']; 
$time_zone = $data_array['data']['timeZone']; 

/* connect to mysql db */ 

$con = mysql_connect($dbuser, $dbpass, $dbhost) or die('Could not connect: ' . mysql_error()); 

/* select the specific db */ 

mysql_select_db($dbname, $con); 

/* insert the values into the db */ 

$sql = "INSERT INTO ip_and_videos(IpAddress, VideoName, DateTime, Timezone) VALUES('$ip_address','$vid_name','$date_time','$time_zone')"; 

if(!mysql_query($sql,$con)) 
{ 
    die('Error : ' . mysql_error()); 
} 

?> 

私はintに設定し、主キーを持っているし、自動インクリメント上でそれを持っている:チュートリアルでは、2017年から私はすべてが最新のものであるが、まだそれはまだ動作しないと仮定していました。私が正しく理解すれば、その列には何も挿入する必要はありません。そのたびに番号を割り当てるからです。あるいは、他の変数をINSERTするときに渡す必要がありますか?あなたは同じ問題があったが、これは私のために動作しない場合はわからない

+1

停止を支援しますmysqlの拡張機能を使用します。あなたのコードはSQLインジェクション用にオープンされています。 – Bhavin

+0

大丈夫私はそれを調べます。それはなぜそれが動作していない任意のアイデア? –

+0

いいえ。主キーは自動インクリメントであるため、渡す必要はありません。あなたの質問をあなたのエラーで更新してください。そしてあなたのコードの開始時にerror_reporting(E_ALL)を開始してください。他のエラーが発生した場合は、それを把握することもできます。 – Bhavin

答えて

1

これは配列の部分で機能しますが、正しい答えが得られます。だから、あなたのコードは悪くないですが、すべてのエラーをチェックするべきです(Bhavinのコメントのように)。そして、私はあなたが誤植を持っていることを心配しています - > $ vid_name = $ data_array ['data'] ['videName']; NOT $ vid_name = $ data_array ['data'] ['o名前']; Thereforerは、のerror_reportingは非常に参考になり、他のエラー(プリペアドステートメント^^)

<?php 

error_reporting(E_ALL); 
ini_set('display_errors', 1); 

$payload = '{ 
      "version":"1.0", 
      "event":"video_recorded", 
      "data": { 
       "videoName":"vs1457013120534_862", 
       "audioCodec":"NellyMoser ASAO", 
       "videoCodec":"H.264", 
       "type":"FLV", 
       "orientation":"landscape", 
       "id":"0", 
       "dateTime":"2016-03-03 15:51:44", 
       "timeZone":"Europe/Bucharest", 
       "payload":"111.111.111.11", 
       "httpReferer":"http://site_from_where_video_was_recorded.com" 
      } 
     }'; 

$data_array = json_decode($payload, true); 

/* store in PHP variables */ 

$ip_address = $data_array['data']['payload']; 
$vid_name = $data_array['data']['videoName']; 
$date_time = $data_array['data']['dateTime']; 
$time_zone = $data_array['data']['timeZone']; 

echo"[ $ip_address/$vid_name/$date_time/$time_zone ]"; 

// EDIT : added query 

include"config.inc.php"; 

// connect to DB 
$mysqli = mysqli_connect("$host", "$user", "$mdp", "$db"); 

if (mysqli_connect_errno()) { echo "Error connecting : " . mysqli_connect_error($mysqli); } 

$query = " INSERT INTO ip_and_videos (`IpAddress`, `VideoName`, `DateTime`, `Timezone`) VALUES (?,?,?,?) "; 
$stmt = $mysqli->prepare($query); 

print_r($stmt->error_list); 

$stmt->bind_param("ssss", $ip_address, $vid_name, $date_time, $time_zone); 

if (!$stmt->execute()) { echo $stmt->error; } else { echo"true"; } 

?> 
+0

まだまだ....私は疲れているか何かになっているかもしれないと思っています –

+0

@ChaceMcguyer:それを試してみましたか?それらを実行するときに私のコードでスローされたエラー?はいの場合、彼らは何ですか?編集:**ちょうど**コードは、ページ上の何もDBのあなたのパラメータをしてください – OldPadawan

+0

私はまだその部分を把握しようとしています。私はAptanaをダウンロードし、ftpを設定しました。コードを実行しようとするとFirefoxを開いたままになり、エコーが表示されなくなります。 –

0

...

$vid_name = $data_array['data']['videName']; 

私は配列としてはstdClassを使用することはできません

$vid_name = $data_array->data->videoName; 

を使用する必要がありました。

+0

どこからpayloadを取得しましたか?$ data_arrayを使うべきですか? –

+0

申し訳ありませんが、マシンを編集しました。 – Vbudo

+0

ええと、 'MySQLが空の結果セット(つまりゼロ行)を返していました。(クエリは0.0002秒でした。)' dbを見るとJSONは私のハンドラに行きますそれは問題でなければならない –

0

はこのよう

<?php 

ini_set('display_errors', 1); 
ini_set('display_startup_errors', 1); 
error_reporting(E_ALL); 

/* db variables */ 

$dbhost = 'localhost'; 
$dbname = 'name_db'; 
$dbuser = 'user_db'; 
$dbpass = 'pass_db'; 

/* grab the json */ 

$data = $_POST['payload']; 

/* put json into php associative array */ 

$alldata = json_decode($data,true); 
print_r($alldata); 

/* connect to mysql db */ 

$con = mysql_connect($dbuser, $dbpass, $dbhost) or die('Could not connect: ' . mysql_error()); 

/* select the specific db */ 

mysql_select_db($dbname, $con); 

/* insert the values into the db */ 
foreach($alldata as $data_array) { 

$ip_address = $data_array['data']['payload']; 
$vid_name = $data_array['data']['videoName']; 
$date_time = $data_array['data']['dateTime']; 
$time_zone = $data_array['data']['timeZone']; 

$sql = "INSERT INTO ip_and_videos(IpAddress, VideoName, DateTime, Timezone) VALUES('".$ip_address."','".$vid_name."','".$date_time."','".$time_zone."')"; 
mysql_query($sql); 
echo mysql_errno($con) . ": " . mysql_error($con) . "\n"; 
} 

?> 

良くする必要がある場合は、その後、希望するクエリを確認し、これは

+0

まだ何もdbなし –

+0

@ChaceMcguyerは何が起こっているのか理解するために、私はコードを更新しました、それはいくつかのエラー –

+0

を投げるべきですので、私は 'Column 'IpAddress'を得ることができません。このショットをあきらめてください。 –

関連する問題