Как обработать большой PHP MySQL $ _POST ОБНОВЛЕНИЕ / ВСТАВИТЬ

0

Я пытаюсь сделать что-то подобное, поэтому мне не нужно набирать все мои записи. Кажется, я не могу заставить это работать.

edit: добавлены некоторые изменения.

foreach($_POST as $key => $value) 
{
    $key = "'".mysql_real_escape_string($key)."'";  
    $value = "'".mysql_real_escape_string($value)."'";
    $qstring = "UPDATE load_test SET ".$key."=".$value." WHERE Id = '".$_POST['id']."'";  
        mysql_query($qstring);
}  
  • 0
    парень, у тебя действительно проблемы с принятым кодом.
Теги:

2 ответа

0
Лучший ответ
foreach($_POST as $k=>$v){
        @$select.=" `".mysql_real_escape_string($k)."` = '".mysql_real_escape_string($v)."',";
}
$select = rtrim($select,',');
$select = "UPDATE load_test SET".$select." WHERE id=".$_POST['id'];
mysql_query($select) or die(mysql_error());;

попробуйте это намного быстрее, чем предыдущий, который вы хотите, чтобы выполнить более 1 запрос и другое, что я думаю, что он достаточно безопасен, чтобы избежать ключа, поскольку попытка обновления столбца, который не существует, не приведет вас никуда, и попытка выполнить эскалацию впрыска защитит вас от этого, вы должны убедиться, что идентификатор числовое значение

  • 0
    мне также нужно сделать что-то вроде $ key = $ value в ОБНОВЛЕНИИ, я только что заметил это. он не будет знать, где разместить значение $ в таблице
  • 0
    да, вероятно, если ключ совпадает с именем столбца
Показать ещё 7 комментариев
3

То, что вы пытаетесь сделать здесь, невероятно, опасно небезопасно.

// List the fields that may be updated here
$expectedFields = array('fielda', 'fieldb');

// Updated values to be stored here
$updates = array();

// Generate the update strings
foreach ($_POST as $key => $value) {
    if (in_array($key, $expectedFields)) {
        $updates[] = "`$key` = '".mysql_real_escape_string($key)."'";
    }
}  

// Do all updates at once
$qstring = "UPDATE load_test SET " . join(', ', $updates) . " WHERE Id = '" . mysql_real_escape_string($_POST['id']) . "'";  
mysql_query($qstring);

Это улучшает несколько вещей

  • Все обновления происходят в одном запросе, а не в одном поле
  • Поля проверяются (и дезинфицируются, поскольку они принимаются только в том случае, если они находятся в допустимом списке)
  • Идентификатор также дезинфицирован
  • 0
    нет, это не сработает, это не так, как вы обновляете строку
  • 0
    Есть ли безопасный способ сделать это? Или лучший способ ввода всех необходимых имен полей и сообщений. иногда мне приходится обновлять примерно 20 полей, и убедиться, что значение сообщения и имя поля находятся в нужном месте, так как обновление может сбить с толку.
Показать ещё 6 комментариев

Ещё вопросы

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