2012-03-05 8 views
0

私は入力フィールドを持っていますが、ユーザーが空白のままにしておくと、データベースにnull値を挿入します。

私はこのような値を要求:

$val1 = htmlspecialchars($_REQUEST["val"], ENT_QUOTES); 

をそしてDBにそれらを挿入します。

INSERT INTO `table` (`val1` , `val2` , `val3`) 
VALUES ('$val1', '$val2', '$val3'); 

I 'の周りVAL1、VAL2、val3は削除しようとした - しかし、その後何も挿入されませんが値がない場合はDBに格納します。 、[OK]をDB

答えて

2

にまだ挿入、最初にこの

INSERT tableval1 INTO - '値の周りのない

if (!empty($val1)) { 
$val1 = "'".$val1."'"; 
} else { 
$val1 = NULL;} 

そして:私はまた、このような何かを試してみましたval2,val3) VALUES( 'val1'、 'val2'、 'val3');

は、 "val1"、 "val2"、 "val3"というリテラル値のみを挿入します。あなたはPHP変数を使用していません。

第2に、プリペアドステートメントとパラメータバインディングを使用してクエリを実行し、SQLインジェクションから自分を守ります。たとえば、PDOを使用する場合

$pdo = new PDO(/* DSN, username and password, just read the docs */); 

$stmt = $pdo->prepare('INSERT INTO table (val1, val2, val3) VALUES (?, ?, ?)'); 

$params = array(
    isset($_REQUEST['val1']) ? $_REQUEST['val1'] : null, 
    isset($_REQUEST['val2']) ? $_REQUEST['val2'] : null, 
    isset($_REQUEST['val3']) ? $_REQUEST['val3'] : null 
); 

$stmt->execute($params); 

また、HTMLエンコード値をデータベースに挿入しないでください。 HTMLドキュメントに値を表示するときにエンコードを実行します。

+0

Plus for PDO。間違いなく、PDOは手動で何度も何度も何度も繰り返し書きたくないことをカバーするので、DBハンドラを使用してください。 –

+0

お願いmysql_ *関数ではなく、PDOを使用するために+2を使用できます。あまりにも多くの人が古い機能を使用するのが適切だと思っています。 – webbiedave

+0

私はPDOについてもっと詳しく聞いています。 – 2by

0

私はこれを正しく理解していれば、あなたはこのような何か意味:私は本当にこれがより保護されるべきものの簡易版であることを意味し、このような何かによって

$val1 = null; 
$val2 = null; 
$val3 = null; 

if(isset($_REQUEST['val1'])) 
    $val1 = "'".mysql_real_escape_string(htmlspecialchars($_REQUEST["val1"], ENT_QUOTES, 'utf-8'))."'"; 

if(isset($_REQUEST['val2'])) 
    $val2 = "'".mysql_real_escape_string(htmlspecialchars($_REQUEST["val2"], ENT_QUOTES, 'utf-8'))."'"; 


if(isset($_REQUEST['val3'])) 
    $val3 = "'".mysql_real_escape_string(htmlspecialchars($_REQUEST["val3"], ENT_QUOTES, 'utf-8'))."'"; 


mysql_query("INSERT INTO `table` (`val1`, `val2`, `val3`) 
VALUES ($val1, $val2, $val3)"); 

を。あなたはヌル値を渡す方法を探しているだけなので、ここから取得します。データベースの挿入/クエリでユーザーが送信した値を使用している場合

+0

データベースにHTMLエンコード値を入力しないでください – Phil

+0

HEY!私は彼のコードを入れました。私はなぜ彼がそれをやっているのかわかりません –

+0

この場合、より良い解決策を提案してください。 – Phil

0

常に注意してください - このユーザーは、PHPのコミュニティのほとんどと同じように、現在であれば(私は、PDO引数を認めるが、http://bobby-tables.com/

<?php 

$val1 = 'NULL'; 
$val2 = 'NULL'; 
$val3 = 'NULL'; 

if(isset($_REQUEST['val1']) && !empty($_REQUEST['val1'])) 
    $val1 = "'".mysql_real_escape_string($_REQUEST['val1'])."'"; 

if(isset($_REQUEST['val2']) && !empty($_REQUEST['val2'])) 
    $val1 = "'".mysql_real_escape_string($_REQUEST['val2'])."'"; 

if(isset($_REQUEST['val3']) && !empty($_REQUEST['val3'])) 
    $val1 = "'".mysql_real_escape_string($_REQUEST['val3'])."'"; 


mysql_query("INSERT INTO `table` (`val1`, `val2`, `val3`) 
VALUES ($val1, $val2, $val3)"); 

を参照してください。 mysql_*機能と連携し、私は彼らがそうでなければ行う需要に誰だ?)

+1

OPは彼が使っていることを述べていませんでした。だから、なぜ時代遅れで、アプローチに惑わされているのを提案するのですか?次に魔法の言葉を提案するつもりですか? ;) – webbiedave

+0

OP did ...その後、彼の質問を編集しました。そんなに賢くないでください。 –

+1

@Lucanos編集履歴を見て、一度も ''に言及したDB拡張はありませんでした – Phil

0

あなたの基本的な問題は、それはあなたがNULL一定のSQLを使用する必要がMySQLのにnullを挿入することです。それを引用することは機能しません。つまり、'$val1'NULLと置き換える必要があります。

この小さなつかまりは、まともなORMレイヤと同様に、あなたのために用意されたステートメントです。

(通常、データベースに入れる前に値をHTMLでエスケープする必要はありませんが、それは無関係の問題です)。

関連する問題