2

情報をphpオブジェクトに渡し、そのオブジェクトを配列に追加する基本的なhtmlフォームを作成しようとしています。フォームからオブジェクトに情報を渡し、それを配列に追加してそのオブジェクトを表示するまで機能します。ただし、2 番目のオブジェクトを配列に追加しようとすると、配列に追加するのではなく、配列を新しい単一要素配列に置き換えるだけのようです。これが私のコードです...何かアイデアはありますか?

index.php ファイル:

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Custom Forms</title>
    </head>
    <body>
        <h2>Add Data</h2>
        <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
            First Name:<input type="text" size="12" maxlength="12" name="Fname"><br />
            Last Name:<input type="text" size="12" maxlength="36" name="Lname"><br />
            <button type="submit" name="submit" value="client">Submit</button>
        </form>
        <?php
        include_once 'clientInfo.php';
        include_once 'clientList.php';

        if ($_POST) {
            $clientArray[] = new clientInfo($_POST["Fname"], $_POST["Lname"]);
        }

        if (!empty($clientArray)) {
            $clientList = new clientList($clientArray);
        }
        ?>
        <p><a href="clientList.php">go to client list</a></p>
    </body>
</html>

clintInfo.php ファイル:

<?php
class clientInfo {

    private$Fname;
    private$Lname;

    public function clientInfo($F, $L) {
        $this->Fname = $F;
        $this->Lname = $L;
    }

    public function __toString() {
        return $this->Fname . " " . $this->Lname;
    }
}
?>

clientList.php ファイル:

<?php
class clientList {
    public function clientList($array) {
        foreach($array as $c) {
            echo $c;
        }
    }
}
?>

回答付きの編集された作業コード

index.php ファイル:

<?php
include('clientInfo.php');
session_start();
?>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Custom Forms</title>
    </head>
    <body>
        <h2>Add Data</h2>
        <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
            First Name:<input type="text" size="12" maxlength="12" name="Fname"><br />
            Last Name:<input type="text" size="12" maxlength="36" name="Lname"><br />
            <button type="submit" name="submit" value="client">Submit</button>
        </form>
        <?php
        if ($_POST) {
            $testClient = new clientInfo($_POST["Fname"], $_POST["Lname"]);

            echo $testClient . " was successfully made. <br/>";

            $_SESSION['clients'][] = $testClient;

            echo end($_SESSION['clients']) . " was added.";
        }
        ?>
        <p><a href="clientList.php">go to client list</a></p>
    </body>
</html>

clientList.php ファイル:

<?php
include('clientInfo.php');
session_start();
?>
<!DOCTYPE html>
<html>
    <head>
        <title>
            Accessing session variables
        </title>
    </head>
    <body>
        <h1>
            Content Page
        </h1>
        <?php
        for ($i = 0; $i < sizeof($_SESSION['clients']); $i++) {
            echo $_SESSION['clients'][$i] . " was added. <br/>";
        }
        ?>
        <p><a href="index.php">return to add data</a></p>
    </body>
</html>

オブジェクト ファイル clientInfo.php は同じままでした。オブジェクトは多次元の $_SESSION 配列に格納され、for ループで呼び出される必要がありました。foreach ループを機能させる方法を他の誰かが知っていない限り、foreach ループは機能しません。ちなみに、$testClient 変数はスキップして作成し、同時に $_SESSION に配置することもできますが、temp 変数を使用すると、トラブルシューティングが容易になり、それを機能させる方法を確認することが容易になりました。Joshから提供された回答を使用して、作業コードを投稿すると思いました!

4

1 に答える 1

3

配列オブジェクトに永続性を追加する必要があります。

PHP の$_SESSIONを参照してください。

リクエスト間でメモリまたはディスクに保存しないと、連続したロードで存在できない可能性があります。そのリンクには、起​​動して実行するための優れたチュートリアルがあります。

または、より大きなニーズのために、データベースに物を保存することもできます。

于 2012-08-17T17:10:00.873 に答える