Php 尝试自动/循环保存函数

Php 尝试自动/循环保存函数,php,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"

编辑:页面之间的区别是简单的$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或循环之类的东西

有什么建议吗

谢谢


荷马。

您基本上可以将5个表单页面上的表单“操作”设置为相同的“保存”页面。但您必须了解每个保存页面所做的可能与其他页面不同的事情,并进行概括。例如,在脚本末尾,您将重定向到特定页面(page2.php)。如果“保存#1”应该转到另一个页面,您必须(从您的表单)向此脚本传递足够的信息,以确定重定向应该转到哪里。

参考上面提出的问题和始终存在的警告,我的答案可能不完美

我建议创建一个“save.php”文件,将这些答案存储到数据库中。要区分发送此文件答案的页面,请添加一个名为“page”(或类似内容)的附加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 );

你忘了提一件小事。保存页面之间的差异@Col Shrap-提供了这些差异,本质上它们是问题,因此每个保存页面上都有不同的$q。@Matt-谢谢Matt-是的,我知道我可以概括,这就是我想要做的-为所有/任何表单页面创建一个单独的保存页面。我知道像重定向这样的事情需要成为一个变量——包括在内——这就是如何自动化我正在努力解决的其他事情。
$redirectPage = 'page'.( int_val( $_POST['page'] )+1 ).'.php';
header( 'Location: '.$redirectPage.'?r='.$rguid );