Как ПОСТАВИТЬ неотвеченные вопросы о переключателях в виде значений NULL в базу данных MySQL с помощью PHP? - PullRequest
1 голос
/ 05 февраля 2012

Я использую приведенный ниже скрипт для хранения значений для динамически созданных форм в базе данных MySQL.Пользователи могут вернуться к форме после ее сохранения для обновления информации.

Приложение использует элементы формы переключателей, которые отправляются только через POST, если на них дан ответ.Значением по умолчанию в базе данных MySQL является NULL.Поэтому, если на вопрос не дан ответ, он остается NULL, и это здорово.

Однако я также использую jQuery, чтобы разрешить сброс некоторых элементов формы (т. Е. Переключатели можно очистить).

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

<?php 

require_once('../../includes/connect.php');

$org_id = $_SESSION['ORG_ID'];
$user_id = $_SESSION['USER_ID'];

$dbh = get_org_dbh($org_id);

$sql = "UPDATE health_forms SET ";
$values = array();

foreach ($_POST as $field => $value){

    $sql .= "$field=?, ";
    array_push($values, $value);

}

$sql = rtrim($sql,", ");   
$sql .= " WHERE id=?;\n";
array_push($values, $user_id);

try { 

    $sth = $dbh->prepare($sql);
    $sth->execute($values);
}  

header("location: ../index.php?i=completed");

?>

Ответы [ 3 ]

1 голос
/ 05 февраля 2012

Если вы говорите о переписывании ранее сохраненных значений с NULL, у вас есть, но единственный выбор - сначала выбрать всю строку, сравнить ее со значениями POSTED и установить для отсутствующих полей значения NULL.

0 голосов
/ 05 февраля 2012
require_once('../../includes/connect.php');

$org_id = $_SESSION['ORG_ID'];
$user_id = $_SESSION['USER_ID'];

$dbh = get_org_dbh($org_id);

$sql = "UPDATE health_forms SET ";
$values = array();

$table_fields = array('name', 'status', 'etc');

foreach ($table_fields as $field){
    if (isset($_POST[$field])) {
        $sql .= "$field=?, ";
        array_push($values, $_POST[$field]);
    } else {
        $sql .= "$field=NULL, ";
    }

}

$sql = rtrim($sql,", ");   
$sql .= " WHERE id=?;\n";
array_push($values, $user_id);

try { 

    $sth = $dbh->prepare($sql);
    $sth->execute($values);
}

header("location: ../index.php?i=completed");

Определите поля таблицы вашей базы данных в массиве $table_fileds, и вы готовы.

0 голосов
/ 05 февраля 2012

Установите значение по умолчанию NULL для любого столбца, который вы обнуляете, а затем просто пропустите его в своем запросе SQL.Это прекрасно сработало для меня.Вы можете сделать это легко из PHPmyadmin.

...