0

以下のような名前フィールドを持つフォームがあります

<label class="control-label" for="name">Your Name *</label>
<div class="controls">
<input type="text" class="input-xlarge" name="name" id="name" maxlength="10">
</div>

フォームの送信時に、次のようにコントローラーのフィールドを (サーバー側で) 検証しようとしています。

function save(){               

      $name = JRequest::getVar('name', 'POST');

      $session =& JFactory::getSession();

      if(!$name || strlen($name = trim($name)) == 0){
         $session->set('errorname', 'Please enter your name!');
         $error= true;
      }
         $session->set('valuename', $name);

      if(!$error){

         $model = & $this->getModel('jobs');

         $model->saveJob(JRequest::get('POST'));

         $redirectTo = JRoute::_('index.php?option='.JRequest::getVar('option').'&task=display');
         $this->setRedirect(str_replace("&amp;", "&",$redirectTo), 'Saved');
      }
      else {                          
         $redirectTo = JRoute::_('index.php?option='.JRequest::getVar('option').'&Itemid='.JRequest::getVar('Itemid'));
         $this->setRedirect(str_replace("&amp;", "&",$redirectTo), "The form is not complete!" );                 
       }    

    }

次に、フォームページの上で、セッションオブジェクトエラー名の値を以下のように取得しようとしました:

$session =& JFactory::getSession(); 
$session->get('errorname');

これはテスト目的のためだけに行っています。そのため、フィールドに入力せずにフォームを送信すると、セッション オブジェクトはエラーを返すはずです (メッセージPlease enter your name! )。しかし、なぜ何も返されないのだろうか。

何かが足りないかどうかわからないので、アドバイスをお願いします!

4

1 に答える 1

0

if 条件 true の部分が実行されていないことが原因である可能性があります。

if(!$name || strlen($name = trim($name)) == 0){
         echo 'works';die;
      }

上記のようにコードを置き換えて、if 条件 true の部分に入るかどうかを確認します。それ以外は、すべて正しく行っています。if 条件が評価されている場合、die;コマンドが使用されているため、右側のページの実行が停止します。これは、コードにエラーがないことを確認する良い方法です。

このリンクを読んでください。それはあなたにいくつかの使用法を与えるでしょうJFactory::getSession()

于 2012-12-21T09:10:16.350 に答える