2012-02-05 100 views
1

我正在使用下面的脚本将动态创建的表单的值存储到MySQL数据库中。用户可以在保存后返回到表单以更新信息。如何使用PHP将未答复的单选按钮问题作为NULL值发布到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"); 

?> 

回答

0

将默认值设置为NULL,对于您要取消的任何列,然后在SQL请求中跳过它。这对我来说非常有用。您可以从PHPmyadmin轻松完成此操作。

+0

嗨,亚当,我的数据库中的所有列的默认值已被设置为NULL。对于那些从来没有回答过的问题,这些问题依然为空。 – Michael 2012-02-05 17:56:58

1

如果你正在谈论重写先前保存的值为NULL,你只有选择 - 首先选择整行,将其与POSTED值进行比较,并将缺省字段设置为空值。

0
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阵列在你的数据库表字段,你准备好了。

相关问题