2014-10-20 79 views
0

我想創建一個對象數組,然後我可以顯示,表單被提交時創建的對象。array_push覆蓋以前創建的對象PHP

第一個對象被成功添加,但是當我添加另一個對象時,它會簡單地覆蓋最後創建的對象。任何人都可以看到我要去哪裏嗎?

<?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> 
+0

你最初是否將'$ _SESSION ['goals']'定義爲數組? – Cheery 2014-10-20 01:34:05

+0

爲什麼不能正常推送它,並將該計數添加到該數組中。 – Ghost 2014-10-20 01:34:55

+0

是的在頂部。正如$ _SESSION ['goals'];嘗試不覆蓋它 – 2014-10-20 01:35:23

回答

1

簡單地初始化您需要的會話變​​量。並且不需要使用變量變量並將其用作內部的計數器。通常在會話內部推送這些對象。

實施例:

<?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> 

旁註:始終打開錯誤報告。

+0

它現在在數組中生成更多的元素並捕獲信息,但不會顯示數組中的後續對象,並且錯誤表示__PHP__Incomplete_Class_Name/Object =>目標 – 2014-10-20 04:31:36

+0

@ Phillip-Marsden您是否在保存具有方法等的對象?確保你的類是在聲明'session_start()之前聲明的' – Ghost 2014-10-20 04:35:01

+0

是的它有幾個方法,但我只使用構造函數來設置基本信息我已經確保在我的類被請求後會話開始被調用 – 2014-10-20 05:02:13