2011-11-24 16 views
0

phpmyadminを使用してrcordsをチェックすると、MySQLデータベースを更新するためのコードがありますが、データベースは更新されません。 plae hlp私。PHPがMySQLデータベースを更新しようとしても何も更新されません

+5

あなたのPHPは、ほぼすべての可能な方法でSQLインジェクションに脆弱です。あなたはあなたのように$ _POSTに来るものを信頼するべきではありません。 – Romain

+2

あなたのクエリは 'WHERE index = '$ id''を持っていますが、あなたのコードには' $ id'が設定されていません。既存のレコードを更新するか、新しいレコードを作成しようとしていますか? – Romain

+0

SQLテーブル構造を参照する必要があります – Julien

答えて

0

を使用して入力したユーザであるすべての入力をエスケープする必要があります。あなたは、同じステートメント内のいくつかの異なる方法でPHP変数を参照しています。クエリ$ manufacturerTableは単なる$ manufacturerTableです。あなたは一重引用符で囲むことができます。そのうちいくつかは$を削除しますが、他のものは削除しません。私はこれをあまりにも頻繁に説教することを知っていますが、準備されたステートメントを実際に使用して調べるべきです。彼らはあなたのクエリで変数を使用することからすべての推測作業を取り、注入ハックによってあなたが犠牲になるのを防ぎます。しかし、ここでの簡単な答えは、クエリで変数を正しく参照していないということです。

-1

場合によっては、変数を直接構文に入れると問題が発生することがあります。クエリに連結を使用しようとしましたか。

$query = "UPDATE ".$manufacturerTable." SET username='vehicleMake', engineType='."$engineType."', engineCC='".$engineCC."', year='".$year."', chasisNo='".$chasisNumber."', numberOfDoors='".$numberofDoors."' ,numberOfDoors='".$numberofDoors."', tireSize='".$tireSize."', price='".$price."' WHERE index =".$id; 

$sql = mysql_query($query); # this should be put in the if else 

インデックスが数字の場合、周囲を囲む必要はありません。プラスはusername = 'vehicleMake'かそれとも変数です。それが変数の場合は、$を追加するか、残りのように連結を使用します。あなたのSQLチェックは以下のようなものでなければなりません。

if (mysql_query($query)) 
{ 
echo 'record has been successfuly'; 
} else { 
die('Error: ' . mysql_error() . ' | ' . $query); 
} 

クエリをエクスポートする理由は、そうあなたはそれが動作を確認するために、手動でそれを試すことができますし、どのようなエラーを取得することができるです。 phpMySQLはその後、回

でmysql_error()を別のエラーを表示することができますプラスあなたはあなたのクエリをよく見てくださいmysql_escape_string()またはmysql_real_escape_stringの()

+0

誰が説明するように投票した誰かが十分な証拠があります。私はPHP/MySQLのバージョンに応じて連結なしで変数を直接追加することに問題がありました –

+0

なぜ落選ですか? @ジェームスウィリアムズ。コードをありがとう。それは働いています – sammyukavi

+0

downvoteしなかったが、 '$ var =" blah $ var blah "'を '$ var =" blah "に変更することを提案しました。 $ var。 「ああ」はまったく無意味です。彼らは$ varで全く同じ結果に終わるでしょう。あなたがやったことは、クエリー文字列がはるかに複雑になり、誤った引用符のために構文エラー(PHP **と** SQLの両方)を生成する可能性がより高くなります。 –