2012-04-16 9 views
0

URLパラメータのリストからデータベースを処理する配列を作成しようとしています。基本的に私はさまざまなことをするいくつかの機能を持っています。 (挿入、更新など)ので、具体的に何をしようとしているかによっては、データベース内のすべての列が常に必要でない場合があります。配列の文字列をビルドして、PHPの空値またはNULL値を省略します。

は、だから私は渡されてしまうかもしれませんこれらの5つの潜在的なパラメータを持っていると言う:私はすべて5 coulmnsは、値のいくつかの並べ替えを必要とする新しい行を挿入していた場合は、idは、GR、BL、YW、

を再度。私がblカラムを更新しているとしたら、idとblのパラメータだけを渡します。

は、だから私は(ない実際のコードだけ例)クエリ文字列を構築するためにこれをやっている:

foreach($_GET as $key => $value) { 
$key = strtolower($key); 
if (preg_match($acceptedGETS,$key)) $$key = $value; 
} 

$table_col = array (
    'p_id' => $_GET['id'], 
    'p_gr' => $_GET['gr'], 
    'p_bl' => $_GET['bl'], 
    'p_yw' => $_GET['yw'], 
    'p_re' => $_GET['re']); 

$vstring = implode(',' , $table_col); 

今、これは、すべての変数のキーが値(またはしないNULL)を持っている限り、完璧に動作します。私の質問は、どのように配列から文字列を構築できますが、渡された値を取得しないキーを除外することです。今のキーに値が不足している場合、私は、例えばこれを取得:

URL:http://www.mysite.com/myscript.php?id=4&re=9は私になる​​だろう:私はちょうど4,9

を取得する必要があります

4 ,,,, 9

ありがとう!

+0

*を使用して、別の方法であります準備されたステートメントを使用していない場合は、それらをクエリに追加します。 – rid

+0

こんにちは、実際のコードはmysql_real_escape_string()を使用しています。 – Chris

答えて

0

を試してみて、それが空またはnull値を取り除くでしょう。ここで

+0

タイトル固定 - キーは値であったはずです。思考タイピングのタイトルを失った列車。 – Chris

+0

とデータの検証と注入された値を取り除くのはどうですか? – Nazariy

+0

質問は、データ検証とSQLインジェクションに関するものではありませんでした。それは配列から空の値を取り除くことでした。 – Rob

0

は使用$get = array_filter($_GET)

$vstring = ""; 
$acceptedGETS = array("id", "gr", "bl", "yw", "re"); 
$values = array(); 
foreach ($_GET as $key => $value) 
{ 
    $k = strtolower($key); 
    if (!in_array($k, $acceptedGETS)) 
     continue; 
    $values[$k] = $value; 
} 
$vstring = implode(",", $values); 
-1

は常に*追加する前に、[ `mysql_real_escape_stringの()`](http://www.php.net/mysql_real_escape_string)を使用して文字列をエスケープするだけfilter_input_arrayとフィルターのセット

$args = array(
    'id' => FILTER_VALIDATE_INT,//if it is an integer 
    'gr' => FILTER_SANITIZE_STRIPPED,//in case it is a string 
    'bl' => FILTER_SANITIZE_STRIPPED, 
    'yw' => FILTER_SANITIZE_STRIPPED, 
    're' => FILTER_SANITIZE_STRIPPED, 
); 

//Filter array values to avoid bad data if nothing found NULL returned 
$myInputs = filter_input_array(INPUT_GET, $args); 

//if it is an array join it with coma 
if(is_array($myInputs)) 
    $myInputs = implode(',', $myInputs); 
関連する問題