2011-04-26 101 views
0

希望有人能建議?單個PHP保存頁面

我有3 .PHP頁編號

page1.php中 使page2.php page3.php

目前,我有硬編碼三個存儲.PHP頁面作爲所謂:

save1.php save2.php save3.php

我當前的代碼,保存到一個MySQL數據庫:

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


$proc = mysqli_prepare($link, "INSERT INTO tresults_bh_main (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); 

我手動不得不改變q1,q2,q3等來匹配第1頁,第2頁和第3頁上的q。我想要做的是有一個.PHP保存頁面,可用於所有我的網頁(有道理?)。

我無法理解的是如何編寫.PHP保存頁面,以便它使用變量而不是我對它進行硬編碼。

我有存儲以下信息的陣列:$ QS [ '問題'] - 例如存儲Q1,Q2,Q3,Q4等

如果有人可以幫助,大加讚賞。

荷馬。

+0

你能更多解釋你想要什麼? 這可能是你想要的嗎? http://img853.imageshack.us/img853/8069/unled1fb.png – 2011-04-26 12:01:00

+0

是的 - 這是正確的。 – 2011-04-26 12:08:37

+0

好的。 save1.php和save2.php和save3.php之間的區別在哪裏? 與$ _POST [];'具有相同的變量,相同的數據庫,相同的表,相同的INSERT操作。 – 2011-04-26 12:20:51

回答

1

這不是很漂亮,但應該做你想做的,也許這是你可以從中獲得靈感的東西。

$list_variable = ''; 
$list_values = ''; 
$str = 'iss'; 
$array_data = array(); 

if (isset($_POST)) { 
    $array_data[] = &$respondent_id; 
    $array_data[] = &$ip; 
    $array_data[] = &$browser; 

    foreach ($_POST as $k => $v) { 
     if (!preg_match('/^q\d+$/', $k)) 
      continue; 

     $str .= 'i'; 
     $list_variable .= ", $k"; 
     $list_values .= ", ?"; 
     $array_data[] = &$_POST[$k]; 
    } 

    if ($list_variable != '') { 
     array_unshift($array_data, $str); 

     $proc = mysqli_prepare($link, "INSERT INTO tresults_bh_main (respondent_id, ip, browser $list_variable) VALUES (?, ?, ? $list_values);"); 
     call_user_func_array(array($proc, 'bind_param'), $array_data); 
     //$proc->execute(); 
    } 
} 
+0

而不是正則表達式(preg_match)可以有一個有效的變量名稱數組,並使用in_array – 2011-04-26 13:56:27

+0

感謝Johan,非常感謝。 – 2011-04-28 08:52:04

0

我建議你把'q'作爲隱藏的窗體的一部分,這樣你就可以在mysql動作頁面中收集它並插入它。

詳細的解答:

使用像

<input type='text' name='pageNumber' value='1'> here value will be 1/2/3 depending on your page number. then create a single save.php page and there collect the variable using 

$ _ POST [ 'PAGENUMBER'] ...另一個元素現在希望它的清晰。這是根據我瞭解你的問題。

+1

你能否詳細說明一下? – 2011-04-26 11:24:59

+0

他對你說,和我上面在評論中對你說的一樣。製作不同的變量名稱。 '$ _POST [q1_p1];'這個q1_p1將在代碼的html部分名稱等...您的輸入必須有名稱q1_p1才能獲得工作'$ _POST [q1_p1];':) – 2011-04-26 12:39:34

0

我不確定要理解你的問題,但爲什麼不從循環開始?

function DoSomething($respondent_id, $ip, $browser, $count) 
{ 
    settype($count, 'integer'); 
    if ($count < 1) 
    { 
     throw new Exception('The $count argument cannot be less than one.'); 
    } 

    $queryVariables = ''; 
    $queryParams = array('issiiiiiiii', $respondent_id, $ip, $browser); 

    $q = array(); 

    for ($i = 1; $i <= $count; $i++) 
    { 
     $q[$i] = $_POST['q' . $i]; 
     $queryVariables .= ', q' . $i; 
     $queryParams[] = $q[$i]; 
    } 

    $query = 'insert into tresults_bh_main (respondent_id, ip, browser' . $queryVariables . ') values (' . str_repeat('?, ', $count - 1) . '?);'; 

    $proc = mysqli_prepare($link, $query); 
    execSQL($proc, $queryParams); 
} 

DoSomething($respondent_id, $ip, $browser, 8); 

execSQL哪裏是從PHP文檔的a user contributed note採取的方法。

0

您可以使用多維數組作爲您的後期變量,而不是破解您的POST索引鍵。

所以.....

<input type="text" name="question[page1][q1]" />

通過

$_POST['page1']['q1']

讀這將是比試圖分裂密鑰的更容易。

,如果你需要知道畫什麼頁面從您可以檢查:

if (empty($_POST['page1']) {