2016-08-14 5 views
0

このコードは、フォーム入力値が空でないかどうかをチェックし、そうであれば、関連する行(Id)の関連するMySql列を更新します。SQLのprepared statementとstr_replace()の組み合わせは安全ですか?

str_replace()は準備済みの文で(列をループするために)操作すると脆弱になりますか?

このコードは安全ですか?より良い選択肢がありますか?

// get submitted form values 
$ids = $_POST['ids_edit_mult'];  
$exhibition_he = $_POST['exhibition_he_edit_mult']; 
$subjects_en = $_POST['subjects_en_edit_mult']; 
$subjects_he = $_POST['subjects_he_edit_mult']; 
$keywords_en = $_POST['keywords_en_edit_mult']; 
$keywords_he = $_POST['keywords_he_edit_mult']; 
$year = $_POST['year_edit_mult']; 
$sold = $_POST['sold_edit_mult']; 

$columns_array = array("exhibition_he", "subjects_en", "subjects_he", "keywords_en", "keywords_he", "year", "sold"); 
$values_array = array($exhibition_he, $subjects_en, $subjects_he, $keywords_en, $keywords_he, $year, $sold); 
$ids_array = explode(", ", $ids); 

for ($i1=0; $i1 < count($values_array); $i1++) { 
if ($values_array[$i1] != "") { 
    for ($i2=0; $i2 < count($ids_array); $i2++) { 

     // prepare statement for editing row values ($stmt1) 
     $sql_string = "UPDATE paintings_catalog SET column=? WHERE id=?"; 
     $sql = str_replace("column", $columns_array[$i1], $sql_string); 
     $stmt1 = $conn->prepare($sql); 

     // bind submitted row values 
     $stmt1->bind_param("si", $values_array[$i1], $ids_array[$i2]); 

     // edit row values 
     $stmt1->execute(); 
     } 
    } 
} 

答えて

0

あなたの値が安全である場合は、それが安全でないよりも置き換えられるユーザの値であれば安全です。あなたの場合、あなたはあなたがそれらを変更する方法がないことを意味する事前定義された値に置き換えています。

短い回答 - あなたの場合SAFE

関連する問題