избегать поля формы при отправке 3

0

Я создал форму с полями, которые имеют те же имена, что и имена полей db.

У меня есть код, который, когда я отправляю форму, я импортирую данные в БД, не записывая конкретные имена полей:

foreach ($_POST AS $field => $value)
    $sql[] = $field." = '". $value."'";

$sql = implode(' , ',$sql);

$query = "UPDATE clients SET ".$sql." WHERE (id = ".$clientID.") " ;

проблема в том, что у меня есть некоторые поля, которые я не хочу импортировать в db (потому что они даже не существуют в db). Вы не знаете, как избежать этих полей?

благодаря

  • 0
    show columns from %table% . Если столбец существует - добавить в запрос, это просто
  • 1
    Я настоятельно призываю вас ознакомиться с SQL-инъекцией и обработкой пользовательских данных. Пожалуйста, помните, что все современные браузеры включают проверку HTML-кода и что даже входное имя может быть подделано для атаки на вашу базу данных.
Теги:

3 ответа

0
Лучший ответ

Попробуйте поместить элементы, которые вы хотите в массив, и игнорируете те, которые вы не хотите:

$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.") " ;
}

Я старался не слишком сильно меняться. Из того, что кажется, ваш код прекрасен, за исключением того, что вы избегаете ваших данных и необходимости разделять поля.

0

Легким решением может быть добавление префикса к именам полей, которые вы не хотите использовать в своем запросе.

Например

<input type="email" name="*email">

foreach ($_POST AS $field => $value)
if(substr($field,0,1)<>"*")
{

    $sql[] = $field." = '". $value."'";
}
0

Ваш код в его нынешнем виде откроет вам все атаки SQL-инъекций. Я бы предположил, что вы не имеете прямого доступа к супергруппому $ _POST.

У вас может быть что-нибудь, входящее через переменную $ _POST, добавляемую в ваш оператор SQL.

Вы всегда должны учитывать, как вы фильтруете и дезинфицируете все данные, поступающие из неизвестных источников.

Чтобы ответить на ваш вопрос, как часть вашей фильтрации, вы также можете иметь список полей формы, которые вы не хотите импортировать в db.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню