Я создал форму с полями, которые имеют те же имена, что и имена полей db.
У меня есть код, который, когда я отправляю форму, я импортирую данные в БД, не записывая конкретные имена полей:
foreach ($_POST AS $field => $value)
$sql[] = $field." = '". $value."'";
$sql = implode(' , ',$sql);
$query = "UPDATE clients SET ".$sql." WHERE (id = ".$clientID.") " ;
проблема в том, что у меня есть некоторые поля, которые я не хочу импортировать в db (потому что они даже не существуют в db). Вы не знаете, как избежать этих полей?
благодаря
Попробуйте поместить элементы, которые вы хотите в массив, и игнорируете те, которые вы не хотите:
$post1 = $_POST[1]; // Elements that you do not want in sql statement
$post2 = $_POST[2];
// Elements you want in the db
$array = ($field3 => $_POST[3], $field4 => $_POST[4], $field5 => $_POST[5]);
foreach ($array AS $field => $value){
$value = mysqli_real_escape_string($conn, $value); // Escape your strings and use mysqli (since mysql is deprecated)
$sql[] = $field." = '". $value."'";
$sql = implode(' , ',$sql);
$query = "UPDATE clients SET ".$sql." WHERE (id = ".$clientID.") " ;
}
Я старался не слишком сильно меняться. Из того, что кажется, ваш код прекрасен, за исключением того, что вы избегаете ваших данных и необходимости разделять поля.
Легким решением может быть добавление префикса к именам полей, которые вы не хотите использовать в своем запросе.
Например
<input type="email" name="*email">
foreach ($_POST AS $field => $value)
if(substr($field,0,1)<>"*")
{
$sql[] = $field." = '". $value."'";
}
Ваш код в его нынешнем виде откроет вам все атаки SQL-инъекций. Я бы предположил, что вы не имеете прямого доступа к супергруппому $ _POST.
У вас может быть что-нибудь, входящее через переменную $ _POST, добавляемую в ваш оператор SQL.
Вы всегда должны учитывать, как вы фильтруете и дезинфицируете все данные, поступающие из неизвестных источников.
Чтобы ответить на ваш вопрос, как часть вашей фильтрации, вы также можете иметь список полей формы, которые вы не хотите импортировать в db.
show columns from %table%
. Если столбец существует - добавить в запрос, это просто