2012-04-29 17 views
-2

この似たような質問にはかなりの記事がありますが、私はPHPとMySQLの組み合わせのための私のコードの明確な答えを得ることができません。フォームを提出した後、私はいつもエラーメッセージを受け取りました。間違いなくそれは構文に関連しています。興味深いことに、mysqlは私のブラウザ(firefox)ではなく、私のapacheを苦情しなかった。PHPのMySQLの未知の列 'アドレス一覧'のフィールドリスト

$add_master_sql = "INSERT INTO master_name (date_added, date_modified, f_name, l_name) 
VALUES (now(), now(), '".$_POST["f_name"]."', '".$_POST["l_name"]."')"; 
$add_master_res = mysqli_query($mysqli, $add_master_sql) or die(mysqli_error($mysqli)); 

と私のMYSQLのコードは次のとおりです。

CREATE TABLE master_name (
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    date_added DATETIME, 
    date_modified DATETIME, 
    f_name VARCHAR (75), 
    l_name VARCHAR (75) 
); 

何かが引用に関連する可能性があるが、私は二重の罰金で試合をチェック。誰でもこのことから私を助けることができますか?

+7

Hello SQLインジェクション。 – sevenseacat

+0

あなたが持っているエラーメッセージを投稿できますか?それは間違いなく助けになるでしょう。 – chalet16

+0

エラー/警告メッセージは次のとおりです: 'フィールドリスト'の「アドレス」フィールドが不明 – Ivan

答えて

3

さらに重要なのは、pdoの準備クエリを使用してSQL注入を回避することです。

<?php 
// configuration 
$dbtype  = "sqlite"; 
$dbhost    = "localhost"; 
$dbname  = "test"; 
$dbuser  = "root"; 
$dbpass  = "admin"; 

// database connection 
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass); 

// new data 
$dateAdded = getdate(); 
$dateModified = getdate(); 
$f_name = $_POST["f_name"]; 
$l_name = $_POST["l_name"]; 

// query 
$sql = "INSERT INTO master_name (date_added, date_modified, f_name, l_name) VALUES (:f_name, :l_name, :dateAdded, :dateModified)"; 
$q = $conn->prepare($sql); 
$q->execute(array(':dateAdded'=>$dateAdded , 
        ':dateModified'=>$dateModified, 
        ':f_name'=>$f_name, 
        ':l_name'=>$l_name));  

?> 
+3

+1はPDOを使用するための提案です。しかし、あなたは4列、2つの値を持っています...また、私の経験では、PDOは複数の場所で同じバインド変数を再利用することはできません。 – DCoder

+0

ちょうど更新、素晴らしい目: – Grunf

+0

OMG、シンプルな挿入のためのコードの大画面。あなたのPDOはコードを膨らませます。 $ f_name変数を代入する際のポイントは何ですか? –

-1

Unknown column 'address' in 'field list'

「フィールドリスト」内の列「アドレス」を使用しているクエリを探します。
ここに投稿したユーザーは、このエラーを発行したユーザーではありません。
ページ
にごdie(mysqli_error($mysqli));ため ​​

にすべてのクエリを変更し、エラーが発生した特定の場所を参照してください 。

mysqli_real_escape_stringを使用して(およびSQLインジェクションから他のすべての変数を保護する)引用符付きの文字列としてエスケープするか、プリペアドステートメントとして挿入する必要があります。

あなたの本があなたにそのことを教えてくれないならば、それを燃やしてください!

+0

あなたの努力のためにハーフアップしていただきありがとうございますが、このようなサイトでは役に立たないです。 –

+1

$ add_address_sql = "INSERT INTOアドレス(master_id、date_added、date_modified、住所、市町村、州、郵便番号、タイプ) VALUES( '')$ $ _ POST ["address"]。 "、 '" $ _ POST ["city"]。 "'、 '"。$ _ POST ["state $ _ POST ["zipcode"]。 "'、'"。$ _ POST ["add_type"]。 "')"; $ add_address_res = mysqli_query($ mysqli、$ add_address_sql)またはtrigger_error(mysqli_error($ mysqli)); \t [エラー] PHPの注意:73行目の/var/www/addentry.phpの 'フィールドリスト'の 'address'列が不明です。referer:http://localhost/addentry.php 本を焼くことができませんライブラリから。 PHPを起動してください。学ぶたくさん! – Ivan

+0

ありがとう!今、この例題はうまくいき、私が期待しているものを出力します。エラーメッセージを除いて、すべてがうまくいくように見える(まだブラウザではなくApacheのerror.logにある):73行目のrevarr:httpの/var/www/addentry.phpの 'field list'の 'address'列が不明://localhost/addentry.php。それ以上に働かなければならない。朝の午前3時、寝る必要があります。みんなありがとう! – Ivan

関連する問題