Как обновить таблицу настроек только через Key => Value

0

У меня есть таблица настроек, построенная следующим образом (для простоты я здесь коротко код):

 ID |   key  |  value  |  category
-----------------------------------------
1   |  key_a | value_a |  geolocal
2   |  key_b | value_b |  geolocal
3   |  key_c | value_c |  geolocal
4   |  key_d | value_d |  opengraph
5   |  key_e | value_e |  opengraph

Я прочитал эту таблицу через страницу php/html с целью, чтобы иметь возможность обновлять вышеуказанные настройки

<?
require_once $_SERVER['DOCUMENT_ROOT'].'include/setup.php';

if (!empty($_POST['submit']) and $_POST['submit'] == "UPDATE") {
    ...
    ... I EXPLAIN THIS CODE, WHICH SHOULD WORK ONLY WHEN "SUBMIT" IS CLICKED, BELOW.
    ...

}

$query = "SELECT * FROM setup";
$sth = sql->prepare($query);
$sth->execute;

while($row = $sth->fetch(PDO::FETCH_ASSOC)){
    ${$row[$param]} = $row[$value];
?>
...
...
...
<div id="tabs-1">
    <form method="POST">
        <div class="tab">
            <p><label for="key_a">KEY 1</label><input name="key_a" value="<? echo $key_a; ?>" size="50"/></p>
            <p><label for="key_b">KEY 2</label><input name="key_b" value="<? echo $key_b; ?>" size="50"/></p>
            <p><label for="key_c">KEY 3</label><input name="key_c" value="<? echo $key_c; ?>" size="50"/></p>
            <p><label for="key_d">KEY 4</label><input name="key_d" value="<? echo $key_d; ?>" size="50"/></p>
        </div>
        <input type="submit" name="submit" value="UPDATE"><input type="reset" value="RESET">
    </form>
</div>
...
...
...
<?
} // END While
?>

key_a, key_b и т.д. - всего лишь примеры. В реальности называются:

app_secret
artist_name
token_page_access
etc etc ...

Таким образом, когда я обновляю значения, я должен создать следующие запросы для каждой записи (код, упомянутый выше):

$query="UPDATE setup SET value = $_POST['key_a'] WHERE key = key_a";
$query="UPDATE setup SET value = $_POST['key_b'] WHERE key = key_b";
$query="UPDATE setup SET value = $_POST['key_c'] WHERE key = key_c";
$query="UPDATE setup SET value = $_POST['key_d'] WHERE key = key_d";

Как я уже сказал, у меня есть не только 4 значения на этих таблицах, но и почти 150.

Есть ли способ упростить запрос UPDATE, чтобы код был упрощен и более эффективен?

  • 0
    используйте массивы как в форме, так и в php, затем зациклите их для построения подготовленного запроса.
  • 0
    какой API используется для подключения здесь?
Показать ещё 1 комментарий
Теги:
pdo

1 ответ

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

Учитывая текущий сценарий, вы должны пройти через суперглобальный массив $_POST для выполнения операций UPDATE, например:

if (!empty($_POST['submit']) and $_POST['submit'] == "UPDATE") {
    $query = "UPDATE 'setup' SET 'value' = :value WHERE 'key' = :key";
    $sth = $sql->prepare($query);
    foreach($_POST as $key => $value){
        if($key != 'submit'){
            $sth->execute(array(':value'=>$_POST[$key], ':key'=>$key));
        }
    }
}

Sidenote: key - зарезервированное слово, а value - это ключевое слово в MySQL. Вы всегда должны инкапсулировать имена таблиц и столбцов обратными окнами, чтобы быть в безопасности. Ключевые слова и зарезервированные слова в MySQL

  • 0
    После того, как я забыл поменять «ключ» с настоящим именем на столе: D он работал ОТЛИЧНО ... спасибо миллион :)
  • 0
    Rajdeep; они используют зарезервированное слово mysql здесь; key Я думаю, вы знаете, что с этим делать ;-) ответы должны быть обновлены, ИМХО.
Показать ещё 6 комментариев

Ещё вопросы

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