2

その後の試行の後、配列に要素を追加しようとしていますが、これまでのところ、配列に追加される値は 1 つだけです。私はGoogleで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() がページをリロードするたびに、以前のデータが利用できないことがわかっているので、その意味で、セッション用の配列を作成してからセッションでデータをプッシュしますが、うまくいかないようです。

誰かが私に何ができるかについて何かアイデアを持っているなら、私はそれを大いに感謝します. ありがとうございました。

4

3 に答える 3

2

私の知る限り、ここには自動化の大きな可能性があります。これを 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;
        }

    }
于 2012-09-08T22:07:22.933 に答える
2

コードの先頭に次のように入力します。

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

代わりに使用する必要があります:

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

それ以外の場合は、ページをロードするたびにクリーンアップします!

于 2012-09-08T21:51:07.733 に答える
0

ティム?私が指摘したいのは、あなたの問題は解決されましたが、コピー/貼り付けの手間を省くことができるかもしれません.

コードの重複は、プログラマーがそれを避けることに非常に熱心なものです。これを 40 回コピーして貼り付けるようですが、コード例でここで見た 2 回から、それらはほとんど同じですか?

残りはわかりませんが、これはきれいな方法で実行できることを指摘したかっただけです。

乾杯とGL

于 2012-09-08T22:10:25.663 に答える