2016-07-02 11 views
1

別のスタックオーバーフローの質問からこのコードを取得しましたherePHPスクリプトがデータベースにデータを書き込んでいない

私のデータベースにはtrackというmysqlテーブルがあります。

$server = "host"; 
$username = "user"; 
$password = "pass"; 
$database = "database"; 

$connId = mysql_connect($server,$username,$password) or die("Cannot connect to  server"); 
$selectDb = mysql_select_db($database,$connId) or die("Cannot connect to database"); 


$tracking_page_name="example"; 
$ref=$_SERVER['HTTP_REFERER']; 
$agent=$_SERVER['HTTP_USER_AGENT']; 
$ip=$_SERVER['REMOTE_ADDR']; 
$host_name = gethostbyaddr($_SERVER['REMOTE_ADDR']); 
$strSQL = "INSERT INTO track (tm, ref, agent, ip, tracking_page_name, host_name)   VALUES(curdate(),'$ref','$agent','$ip','$tracking_page_name','$host_name')"; 
$test=mysql_query($strSQL); 

基本的には、このスクリプトが収集するすべてのデータを自分のデータベースに入れたいと思います。しかし、私が何を入力しても、変数をテキストに変更しても、何もデータベースに書き込まれません。私は別のスクリプトを使ってデータベースから読み込むことはできますが、これを取得してDBに情報を追加することはできません。私はちょうど見つけることができないタイプミスはありますか?

私はこれはに含まれますページを訪れた誰についての情報が欲しい

EDIT:私は「HOST_NAME」というフィールドを埋めるためにしようとしていたが、私のデータベースには、別の名前を持っていました。ここに示されているオリジナルのスクリプトはエラーを表示せず、自分のフィールドがすべて整っているかどうかを確認するためにチェックを実行しませんでした。それがエラーでした。

+0

mysql deprecated use myslqi preapared statement – JYoThI

+0

私は何を置き換えていいですか? –

+0

クエリをエコーし​​ます。接続の問題よりもクエリが値を与える場合は、問題が発生した場合はmysqliを使用してください。 –

答えて

0

多くの可能性:

  1. ユーザーuserは読み取り権限をが、データベースやテーブルのパーミッションを書き込みしていない場合は、OPSは成功したが、OPSが失敗する書き込みをします読んで。
  2. これがMyISAMテーブルの場合、テーブルは別のプロセスによってロックされる可能性があります。操作は動作しますが、操作を記述します読むたぶん、あなたが書き込みしようとしているテーブルやフィールドが存在していないではない
  3. でしょうか

変更...

$test=mysql_query($strSQL); 

にスペルミスれます。 ..

if(!$test=mysql_query($strSQL)) die(mysql_error()); 

操作が(docs)失敗した理由それはあなたが表示されます。

また、起動している場合は、MySQL機能を使用しないでください。彼らはPHPから削除されているので、今後自分自身でもっと多くの作業をするだけです。代わりにMySQLiまたはPDO_MySQLを使用してください(docs)。

最後に、は、ブラウザから取得したテキストをSQLクエリに挿入するだけです。 $_SERVER['HTTP_REFERER']$_SERVER['HTTP_USER_AGENT']の値は、ユーザが望む任意のクエリ(テーブルの削除、データの抽出など)を実行させる文字列を含む、ユーザが何かを操作することができます。

$strSQL = "INSERT INTO track (tm, ref, agent, ip, tracking_page_name, host_name)   VALUES(curdate(),'$ref','$agent','$ip','$tracking_page_name','$host_name')" 

とSQLコンソール上でそれを実行します。代わりに

+0

ありがとうございました。出来た。そこには「ホスト名」フィールドはありませんでした。 –

+0

Cool。他のアドバイスを心に残してください。誰もがあなたに同じことを伝えていることに注意してください。 – BeetleJuice

0

は、この行をエコーについてプリペアドステートメントパラメータ化クエリを学びし、それらを使用しています。エラーを調べて、値が渡されていることを確認してください。

関連する問題