此代码检查表单输入值是否为空,如果是,则更新相关行(id)的相关MySql列。
在准备好的语句上运行的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 :(得分:0)
如果这是你的价值,你替换它是安全的,如果它的用户价值你正在替换,而不是安全。在您的情况下,您将使用预定义的值替换,这意味着用户无法更改它们。
简短回答 - 针对您的案例 SAFE