2010-04-28 71 views
0

編輯:頁面之間的差異是簡單的$ q1,$ q2,$ q3變爲,例如$ q13,$ q14,$ q15 - 它們是表單中的問題。嘗試自動化/循環保存功能

大家好,

我有以下代碼:

$rguid = $_POST["r"]; 
$ip=substr($_SERVER['REMOTE_ADDR'], 0, 50); 
$browser=substr($_SERVER['HTTP_USER_AGENT'], 0, 255); 

$q1 = $_POST["q1"]; 
$q2 = $_POST["q2"]; 
$q3 = $_POST["q3"]; 
$q4 = $_POST["q4"]; 
$q5 = $_POST["q5"]; 
$q6 = $_POST["q6"]; 
$q7 = $_POST["q7"]; 
$q8 = $_POST["q8"]; 

$respondent_id = decode_respondent_guid($rguid); 
$rcount=respondent_status($respondent_id); 

if ($rcount==0) { 

    $proc = mysqli_prepare($link, "INSERT INTO tresults (respondent_id, ip, browser, q1, q2, q3, q4, q5, q6, q7, q8) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"); 
    mysqli_stmt_bind_param($proc, "issiiiiiiii", $respondent_id, $ip, $browser, $q1, $q2, $q3, $q4, $q5, $q6, $q7, $q8); 
    mysqli_stmt_execute($proc); 
    $mysql_error = mysqli_error($link); 
    if ($mysql_error!="") { 
     printf("Unexpected database error: %s\n", $mysql_error); 
     mysqli_stmt_close($proc); 
     mysqli_clean_connection($link); 
     exit(); 
    } else 
    { 
     mysqli_stmt_close($proc); 
     mysqli_clean_connection($link); 
     update_completion_status($respondent_id, 'Started'); 
     header("Location: page2.php?r=".$rguid); 
    } 
} 

此代碼的工作一種享受 - 沒有任何問題。

目前,該代碼出現在與「表單」頁面相關的「保存」頁面上(即,如果我有5個.php頁面,每個頁面上都有一個表單,我需要5個save.php頁面來保存每個頁面頁面數據到數據庫)將數據保存到我的SQL數據庫。我想要的是有一個save.php頁面,可以和我一樣有很多「表單」頁面。因此,而不是手動設置和更改每個保存頁面,它自動化它。

我沒有編碼做到這一點的想法,雖然我懷疑像一個foreach循環或等

有什麼建議?

謝謝,

荷馬。

+0

你忘了提及一件小事。保存頁面 – 2010-04-28 13:21:17

+0

@ Col Shrap之間的區別 - 提供了差異,本質上它們是問題,因此每個保存頁面上都有不同的$ q。 – 2010-04-28 13:25:44

回答

0

您可以將表單的「操作」設置在您的5個表單頁面的每個頁面上,並保存到同一個「保存」頁面。但是你必須意識到每個保存頁面正在做什麼,可能與其他頁面不一樣,並進行概括。例如,在腳本結尾,您將重定向到特定頁面(page2.php)。如果保存#1應該轉到不同的頁面,則必須將足夠的信息傳遞到此腳本(從您的表單中)以確定重定向應該到達的位置。

+0

@Matt - 感謝馬特 - 是的,我知道我可以推廣,這就是我想要做的 - 爲所有/任何表單頁面單獨保存一個頁面。我知道像重定向這樣的東西需要成爲一個變量 - 被覆蓋 - 這是如何自動化我正在努力的其他東西。 – 2010-04-28 13:26:42

0

參考上文提出的問題,並永遠存在的警告,我的答案可能不是完美的......

我建議建立一個單一的「save.php」文件來處理的存儲這些答案進入數據庫。爲了區分發送該文件答案的頁面,簡單地包括稱爲「」頁面(或類似的)的額外POST字段。該字段可以包含在提交的表單中作爲隱藏的字段。

我也會建議增加兩個附加字段名爲「firstQuestion」和「lastQuestion」和含有從該頁面的第一和最後一個問題整數會再進行處理的編碼要容易得多。

於是,「save.php」文件中,你可以有以下幾點:

$fields = array(); 

$firstQ = int_val($_POST['firstQuestion']); 
$lastQ = int_val($_POST['lastQuestion']); 

for($i=$firstQ) ; $i<=$lastQ ; $i++) { 
    $fields[$i] = mysqli_real_escape_string($link , $_POST['q'.$i]); 
} 

$sqlFields = 'q'.implode(', q' , array_keys($fields)); 
$sqlValues = implode(', ' . $fields); 

$sqlQuery = sprintf('INSERT INTO tresults (respondent_id, ip, browser, %s) VALUES (%s, %s, %s, %s);' , 
       $sqlFields , 
       $respondent_id , 
       $ip , 
       $browser , 
       $sqlValues); 
$proc = mysqli_prepare($link, $sqlQuery); 
mysqli_stmt_execute($proc); 

然後,再往下,在那裏你重定向到下一個頁面,你可以簡單地收集$_POST['page']變量,添加一個,然後將其插入到頁面名稱中。

$redirectPage = 'page'.(int_val($_POST['page'])+1).'.php'; 
header('Location: '.$redirectPage.'?r='.$rguid);