在isset()之后向数组中添加值


Add values to an array after isset()

我试图在后续试验后向数组中添加元素,但到目前为止,只有一个值被添加到数组中。我在谷歌上搜索了stackoverflow,我似乎只得到了一半的信息,除非我实施错了。

大约有40个文件,需要一个接一个地提交,然后将每个试验的值存储在数据库中。

到目前为止,这就是我所做的。

$_SESSION['task2'] = array();
//Submit Trial 1
if (isset($_POST['submit_task_01'])) {
$trial1_ac_sec = cleanInput($_POST['clockInputTask_01ac']);
$trial1_est_sec = cleanInput($_POST['clockInputTask_01']);
$trial1_ac = round(($trial1_ac_sec * 42.67), 2);
$trial1_est = round(($trial1_est_sec * 42.67), 2);
$trial1_judgErr = $trial1_ac - $trial1_est;
$trial_1error = round($trial1_judgErr, 2);
array_push($_SESSION['task2'],$trial_1error);
header("location: Trial_2.php");
 }
 //Submit Trial 2
 if (isset($_POST['submit_task_02'])) {
$trial2_ac_sec = cleanInput($_POST['clockInputTask_02ac']);
$trial2_est_sec = cleanInput($_POST['clockInputTask_02']);
$trial2_ac = round(($trial2_ac_sec * 42.67), 2);
$trial2_est = round(($trial2_est_sec * 42.67), 2);
$trial2_judgErr = $trial2_ac - $trial2_est;
$trial_2error = round($trial2_judgErr, 2);
array_push($_SESSION['task2'],$trial_2error);
header("location: newEmptyPHPWebPage.php");
}
... and so on.. up until 40

我只是想知道我做错了什么,我知道每次isset()都会重新加载页面,而以前的数据将不可用,所以从这个意义上说,我想我应该为会话创建一个数组,然后在会话中推送数据,但这似乎不起作用。

如果有人对我能做什么有任何想法,我将不胜感激。谢谢。

您在代码顶部键入:

$_SESSION['task2'] = array();

您应该使用:

if (!isset($_SESSION['task2'])) {
    $_SESSION['task2'] = array();
}

否则,每次加载页面时都要清理它!

据我所见,这里有巨大的自动化潜力。与其写40个这样的块,你可以简单地做一个for循环,然后从那里开始。知道40个值中的哪一个被添加到数组中也很有趣(我必须在这里问它,因为出于某种原因,StackOverflow不允许我发布评论

    // If no Session found, start it.
    if (!isset($_SESSION)) {
        session_start();
    }
if(!isset($_SESSION['task2']) {
    $_SESSION['task2'] = array();
}
    // For 40 times
    for ($i = 0; $i < 40; $i++) {
        // If i is smaller then ten, prepend 0
        if ($i < 10) {
            $task = '0' . $i;
        } else {
            $task = $i;
        }
        // if current task is set
        if (isset($_POST['submit_task_' . $task])) {
            $trial_ac_sec = cleanInput($_POST['clockInputTask_' . $task . 'ac']);
            $trial_est_sec = cleanInput($_POST['clockInputTask_' . $task]);
            $trial_ac = round(($trial_ac_sec * 42.67), 2);
            $trial_est = round(($trial_est_sec * 42.67), 2);
            $trial_judgErr = $trial_ac - $trial_est;
            $trial_error = round($trial_judgErr, 2);
            array_push($_SESSION['task2'], $trial_error);
            getCorrectPage($i);
        }
    }
    function getCorrectPage($task) {
        // Look what's in task, go to the case that matches
        switch ($task) {
            case 1 :
                header("location: Trial_2.php");
                break;
            case 2 :
                header("location: newEmptyPHPWebPage.php");
                break;
            case 3 :
                header("location: Trial_3.php");
                break;
            // AND SO FORTH...
            default :
                echo 'No Correct Page for task ' . $task;
                break;
        }
    }

Tim?我想指出的一点是,尽管您的问题已经得到了解决,但它可能会为您节省大量的复制/粘贴工作。

代码重复是程序员非常热衷于避免的事情,看起来你会复制粘贴40次,尽管从我在你的代码示例中看到的两次来看,它们几乎完全相同?

我无法理解其余的,但我只想指出,这可以以一种干净的方式完成。

干杯和gl