Я изо всех сил пытаюсь найти хороший способ обновить один столбец моего wcx_options
Таблица.
Новые данные нормально отправляются на контроллер, но моя функция не работает вообще.
Я предполагал, что смогу перебрать каждый столбец путем обновления option_id значениями из массива.
База данных:
Я обновляю option_value
колонка с новой информацией через jQuery AJAX Call
к контроллеру, который затем вызывает функцию из backend class
,
Пока у меня есть следующий код:
if(isset($_POST['selector'])) {
if($_POST['selector'] == 'general') {
if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest' && isset($_POST['token'])
&& $_POST['token'] === $_SESSION['token']){
$site_name = $_POST['sitename'];
$site_url = $_POST['siteurl'];
$site_logo = $_POST['sitelogo'];
$site_tagline = $_POST['sitetagline'];
$site_description = $_POST['sitedescription'];
$site_admin = $_POST['siteadmin'];
$admin_email = $_POST['adminemail'];
$contact_info = $_POST['contactinfo'];
$site_disclaimer = $_POST['sitedisclaimer'];
$TimeZone = $_POST['TimeZone'];
$options = array($site_name, $site_url, $site_logo, $site_tagline, $site_description, $site_admin, $admin_email,$contact_info, $site_disclaimer, $TimeZone);
// Send the new data as an array to the update function
$backend->updateGeneralSettings($options);
}
else {
$_SESSION['status'] = '<div class="error">There was a Problem Updating the General Settings</div>';
}
}
}
Это то, что я до сих пор с точки зрения функции (это не работает):
public function updateGeneralSettings($options) {
$i = 1;
foreach($options as $option_value) {
$where = array('option_id' => $i);
$this->queryIt("UPDATE wcx_options SET option_value='$option_value' WHERE option_id='$where'");
$i++;
}
if($this->execute()) {
$_SESSION['success'] = 'Updated General Settings Successfully';
}
}
С учетом данной структуры DB я бы предложил организовать ваши данные в виде вспомогательного массива, используя имена полей db, например:
$option = array(
'site_name' => $_POST['sitename'],
'site_url' => $_POST['siteurl'],
// etc.
'timeZone' => $_POST['TimeZone']
);
И чем использовать ключи в вашем запросе:
public function updateGeneralSettings($options) {
foreach($options as $key => $value) {
$this->queryIt("UPDATE wcx_options SET option_value='$value' WHERE option_name='$key'");
if($this->execute()) {
$_SESSION['success'] = 'Updated General Settings Successfully';
}
}
}
(Тем не менее, вы уверены, что не хотите, чтобы все параметры были в одном ряду?)
Измените свой запрос, вы пытаетесь использовать массив как where
состояние. В используемом вами синтаксисе это не сработает. Просто используйте счетчик как where
условие вместо определения $where
переменная. Попробуй это:
public function updateGeneralSettings($options) {
$i = 1;
foreach($options as $option_value) {
$this->queryIt("UPDATE wcx_options SET option_value='$option_value' WHERE option_id='$i'");
$i++;
}
if($this->execute()) {
$_SESSION['success'] = 'Updated General Settings Successfully';
}
}