dsideal2015 2014-10-20 01:28
浏览 44
已采纳

array_push覆盖以前创建的对象PHP

I am trying to create an array of objects which I can then display, the objects being created when a form has been submitted.

The first object gets successfully added, but when I add another object, it simply overwrites the last created object. Can anyone see where I am going wrong?

<?php require_once $_SERVER['DOCUMENT_ROOT'].'/includes/classes/Goal.php'; ?>
<?php require_once $_SERVER['DOCUMENT_ROOT'].'/global/head.php'; ?>
<?php require_once $_SERVER['DOCUMENT_ROOT'].'/config/init.php'; ?>

<?php

$input['title'] = "";
$input['deadline'] = "";
$input['description'] = "";

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

if (isset($_POST['submit'])) {

$_SESSION['goalCount'] ++;

$input['title'] = htmlentities($_POST ['title'],ENT_QUOTES);
$input['deadline'] = htmlentities($_POST ['deadline'],ENT_QUOTES);
$input['description'] = htmlentities($_POST ['description'],ENT_QUOTES);
convertDate($input['deadline']);


${'goal'. $_SESSION['goalCount']} = new Goal($input['title'], $input['description'], $_SESSION['username'], $input['deadline']);
array_push($_SESSION['goals'], ${'goal'. $_SESSION['goalCount']});

?>



<div class="top">
    <p>h</p>
</div>

<div class="container">
    <div class="sixteen columns topbar">
        <?php require $_SERVER['DOCUMENT_ROOT'].'/global/header.php'; ?><!-- Content Begins -->
        <div class="content">

        <h1> OO Test Page - Batch add goals</h1><hr/>

        <div class="six columns">

        <form action="" method="post">
            <fieldset>
                <div>
                <h4>Title</h4>
                    <span id='title-result'></span>
                    <label for="title"></label><br />
                    <input type="text" id="title" name="title" placeholder="e.g. Graduate" value="" required  aria-required="true">

                </div>
                <div>
                <h4>Description</h4>
                <span id='description-result'></span>
                    <label for="description"></label>


                    <textarea type="description" id="description" placeholder="e.g. with first-class honours" name="description" value="" required aria-required="true"></textarea>
                </div>
                <div>
                <h4>Deadline</h4>
                <span id='description-result'></span>
                    <label for="deadline"></label>
                    <input rows="2"type="date" id="datepick" placeholder="" name="deadline" value="" required aria-required="true"/>

                </div>

                <div class="submit">
                    <input type="submit" name="submit" value="Add">
                </div>
            </fieldset>
        </form></div>


    <div class="ten columns">
    <?php


    foreach ($_SESSION['goals'] as $goal) 
    {
        echo '<div class="goal"><h4>'. $goal->title .'</h4>'. $goal->desc .'</h4><p>'. $goalCount .'</p></div>';
    }

    echo Goal::$counter;
    var_dump($_SESSION['goals'])

    ?>
    </div>
</div>

            <!-- Content Ends -->
        <?php require $_SERVER['DOCUMENT_ROOT'].'/global/footer.php'; ?>
    </div>
</div>
</body>
</html>
  • 写回答

1条回答 默认 最新

  • dongxiejie9387 2014-10-20 04:01
    关注

    Simply initialize that session variables that you need. And no need to use variable variables and using it as a counter to push inside. Just normally push those object inside the session.

    Example:

    <?php require_once $_SERVER['DOCUMENT_ROOT'].'/includes/classes/Goal.php'; ?>
    <?php require_once $_SERVER['DOCUMENT_ROOT'].'/global/head.php'; ?>
    <?php require_once $_SERVER['DOCUMENT_ROOT'].'/config/init.php'; ?>
    <?php
    
    if(!isset($_SESSION['goals'], $_SESSION['goalCount'])) {
        $_SESSION['goals'] = array();
        $_SESSION['goalCount'] = 0;
    }
    
    if (isset($_POST['submit'])) {
    
        $_SESSION['goalCount'] += 1;
    
        $input['title'] = htmlentities($_POST ['title'],ENT_QUOTES);
        $input['deadline'] = htmlentities($_POST ['deadline'],ENT_QUOTES);
        $input['description'] = htmlentities($_POST['description'],ENT_QUOTES);
        convertDate($input['deadline']);
    
        $goal = new Goal($input['title'], $input['description'], $_SESSION['username'], $input['deadline']);
        $_SESSION['goals'][] = $goal;
                       // ^ add another dimension
    
    } // missing closing curly brace
    
    ?>
    
    <div class="top">
        <p>h</p>
    </div>
    
    <div class="container">
        <div class="sixteen columns topbar">
            <?php require $_SERVER['DOCUMENT_ROOT'].'/global/header.php'; ?><!-- Content Begins -->
            <div class="content">
                <h1> OO Test Page - Batch add goals</h1><hr/>
                <div class="six columns">
                    <form action="" method="POST">
                        <fieldset>
                            <div>
                            <h4>Title</h4>
                                <span id='title-result'></span>
                                <label for="title"></label><br />
                                <input type="text" id="title" name="title" placeholder="e.g. Graduate" value="" required  aria-required="true">
    
                            </div>
                            <div>
                            <h4>Description</h4>
                            <span id='description-result'></span>
                                <label for="description"></label>
    
    
                                <textarea type="description" id="description" placeholder="e.g. with first-class honours" name="description" value="" required aria-required="true"></textarea>
                            </div>
                            <div>
                            <h4>Deadline</h4>
                            <span id='description-result'></span>
                                <label for="deadline"></label>
                                <input rows="2"type="date" id="datepick" placeholder="" name="deadline" value="" required aria-required="true"/>
    
                            </div>
    
                            <div class="submit">
                                <input type="submit" name="submit" value="Add">
                            </div>
                        </fieldset>
                    </form>
                </div>
            </div>
    
    
        <div class="ten columns">
        <?php
        foreach ($_SESSION['goals'] as $goal) {
            echo '<div class="goal"><h4>'. $goal->title .'</h4>'. $goal->desc .'</h4><p>'. $goalCount .'</p></div>';
        }
        ?>
        </div>
    
                <!-- Content Ends -->
            <?php require $_SERVER['DOCUMENT_ROOT'].'/global/footer.php'; ?>
        </div>
    </div>
    

    Sidenote: Always turn on error reporting.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 对于这个复杂问题的解释说明
  • ¥50 三种调度算法报错 采用的你的方案
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败