尝试自动/循环保存功能

时间:2010-04-28 13:07:25

标签: php

编辑:页面之间的差异只是$ 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或loop等。

有什么建议吗?

谢谢,

荷马。

2 个答案:

答案 0 :(得分:0)

您实际上可以将表单上每个表单的“操作”设置为相同的“保存”页面。但是你必须要知道每个保存页面正在做什么可能与其他页面不同,并进行概括。例如,在脚本结束时,您将重定向到特定页面(page2.php)。如果存储#1应该转到另一个页面,则必须从该表单(从表单)传入足够的信息以确定重定向的去向。

答案 1 :(得分: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 );