2012-02-05 15 views
1

私は以下のスクリプトを使用して、動的に作成されたフォームの値をMySQLデータベースに格納しています。ユーザーは、情報を保存するために保存された後にフォームに戻ることができます。PHPを使用して未回答のラジオボタンの質問をNULL値としてMySQLデータベースにPOSTするには?

このアプリケーションでは、ラジオボタンのフォーム要素が使用されています。この要素は、回答があった場合にのみ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に既に設定されています。最初に答えられない質問については、これらはnullのままです。 – Michael

1

については、以前に保存した値をNULLで書き直した場合は、最初に行全体を選択し、POSTED値と比較して不在フィールドをNULLに設定してください。

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配列でデータベーステーブルのフィールドを定義し、あなたは準備が整いました。

関連する問題