h1ghfive
h1ghfive

Reputation: 47

Handle two different forms in a single page

So I want to handle two forms on one single page, and I've got some problems to do it; I've got a module named 'contact', here is the indexSucces.php

<div id="registerForm">
    <form action="<?php echo url_for('contact'); ?>" method="post" id="loginForm">                  


        <?php foreach ($loginForm as $widget): ?>                                               
            <?php if(!$widget->isHidden()) { ?>             
                    <?php echo $widget->renderRow(); ?>
             <?php } else { ?>
                <?php echo $widget->render() ?>
             <?php } ?>
        <?php endforeach; ?>       
        <br/><input type="submit" id="loginSubmit" class="btn primary" value="<?php echo __('Envoyer'); ?>" />
    </form>
</div>


<div id="registerForm">
    <form action="<?php echo url_for('contact'); ?>" method="post" id="registerForm">                  


        <?php foreach ($registerForm as $widget): ?>                                                
            <?php if(!$widget->isHidden()) { ?>             
                    <?php echo $widget->renderRow(); ?>
             <?php } else { ?>
                <?php echo $widget->render() ?>
             <?php } ?>
        <?php endforeach; ?>       
        <br/><input type="submit" id="registerSubmit" class="btn primary" value="<?php echo __('Envoyer'); ?>" />
    </form>
</div>

Is it possible to handle that in a single action page ? I need to know the way on how to it, I'm stuck since yesterday. For exemple, when I want to submit the first form, it wants to submit the second form with.

Someone can provide me an exemple ? I can post my sh** action page if you want to see how I tried to handle that.

Thanks in advance !

EDIT:

I made this code according to your advice :

public function executeIndex(sfWebRequest $request)
{

$this->loginForm = new loginForm(); 
$this->registerForm = new registerForm();  

$this->processForm($request, $this->loginForm, $this->registerForm);



}  

public function processForm(sfWebRequest $request, sfForm $loginForm, sfForm $registerForm)
{
  if($request->hasParameter('login'))
  {
      if($request->isMethod('post'))
      {
          $loginForm->bind($request->getParameter($loginForm->getName()));
          if($loginForm->isValid())
          {
              $this->redirect('payement');
          }
      }
  } elseif ($request->hasParameter('register'))
  {
      if($request->isMethod('post'))
      {
          $registerForm->bind($request->getParameter($registerForm->getName()));
          if($registerForm->isValid())
          {
              $this->redirect('payement');
          }
      }
  }   
}

The registerForm is submitting correctly, I can see the errors I've made in the form etc, and if it's correct, it is correctly redirected. But when I submit the loginForm, here is the error :

Argument 1 passed to sfForm::bind() must be an array, string given : on this line

 $loginForm->bind($request->getParameter($loginForm->getName()));

Why ?

Upvotes: 2

Views: 1623

Answers (1)

Maerlyn
Maerlyn

Reputation: 34107

Yes, you can.

Add a name attribute to your buttons (i.e. login and register), and modify your action to:

if ($request->hasParameter("login")) {
  // handle login
}
elseif ($request->hasParameter("register")) {
  // handle register
}

Upvotes: 1

Related Questions