0

私は小さなアプリケーションに取り組んでいますが、問題がありますcontrollers_viewpvcontroller。レポートを表示しようとしています。ユーザーは年と月を決めることができ、それらを送信した後、レポートはフォームの下の同じページに表示されます。

これが私のコントローラーです:

require_once ('library/Zend/Controller/Action.php');

class controllers_viewpvController extends Zend_Controller_Action {

public function init()
{

}

public function viewpvAction()
{
    require_once 'models/PastPV.php';

    $data = $this->getRequest()->getParams();
    $year = $data['year'];
    $month = $data['month'];
    $pv = new PastPV();
    $return = $pv->viewPV($year, $month); // this function is working fine.
    $this->view->assign('values',$return);

}

public function getpvAction()
{


}

}

これが私のviewpv.phtml

<body>

<h1 id="h2"> Review</h1>

<br><div><center><form action="../Viewpv/viewpv" method="post" >

<h3>Payment Vouchers for : <select name="month">
            <option value="null">(Month)</option>
    <option value="01">January</option>
    <option value="02">February</option>
    <option value="03">March</option>
    <option value="04">April</option>
    <option value="05">May</option>
    </select>

<select name="year">
<option value="null">(Year)</option>
<option value="2010">2010</option>
<option value="2011">2011</option>
<option value="2012">2012</option>                                                                              
</select></h3>
<br><br>
<input type="submit" value="View">

</form></center>
</div></body>

<!--the codes to display the form are below-->

<?php 
$return = $this->values;
if(!empty($return))
$tbl = '<table><tr><td>Document No</td></tr>';
while($data = $return->fetchRow()){       //here I think 'fetchRow()' may cause a problem.
                                              //but that is not my question.
$tbl.='<tr><td>'.$data['docNo'].'</td></tr>';
}
$tbl.='</table>';
echo $tbl;
?>

ページを読み込もうとすると、次のphpエラーが発生します。

Undefined index: year
Undefined index: month

また、Zend_Db_Statement_Exception、を提供しNo parameters were boundます。私が感じているのは、これを行う正しい方法が見つからないということです。

これを手伝ってください。これを達成するためのより良い方法があれば、私に知らせてください。

4

1 に答える 1

1

フォームが表示したいレポートと同じページにある場合は、POSTデータを確認する必要があります。これは、Zendのリクエストオブジェクトを使用して行うことができます。

if($this->getRequest()->isPost())
{
  //Process the form and get things you need to display the report
}

現在、そのページに直接アクセスしているように見える場合は、アクションにまだ送信されていないインデックスを検索しようとしています。

したがって、これは失敗してエラーが発生します。

$year = $data['year'];
$month = $data['month'];

次に、その情報に対してDBルックアップを実行しているため、DBエラーが発生します。私がリストした「if」ステートメントを追加すれば、問題ないはずです。

ZendフォームリクエストオブジェクトのZendドキュメントを読む必要があります。Zend Formは、あなたの生活をとても楽にしてくれます。ビューに「表示」することだけを行うこともお勧めします。ビューでDBルックアップを実行することはお勧めしません。

于 2012-07-19T18:12:09.717 に答える