2011-04-26 98 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']) {