views:

53

answers:

3

What would be the best way to intercept multiple fields via PHP? Currently I have a login.php file which is pretty simple:

  <form method="POST" action="auth.php">
   Code:<br />
  <input type="text" name="code" />
<input type="submit" id="submit" value="Submit" />
<br />
   Pass:<br />
  <input type="text" name="pass" />
   <input type="submit" id="submit" value="Submit" />
   </form>

Then in the auth.php I get the value via the POST:

      $value = $_POST['code'];

The problem with this is that I would have a quite amount of fields, and every field would have a submit button assigned. Then I would need a if condition for every field name avaible, which I don't want to. What would be the best way to handle this?

Thanks

+1  A: 

Just use a single submit button. There's no reason to have more than one here.

If you have multiple related fields you can use array naming:

Primary email: <input type="text" name="email[]" >
Additional email: <input type="text" name="email[]">

and access from php using

$emails = $_REQUEST['email'];

However, you should not use arrays like this for unrelated parameters just because you're too lazy to use multiple field names. If you do you're just writing terrible, unmaintainable code.

bemace
That dosn't really fix my problem. I would still need a different name for every field. And then a different if condition for every field in the auth.php file.
phpdude
@phpdude - edited. However you may just need to get over it and use multiple field names.
bemace
A: 

You have a bad problem with HTML. In HTML you don't need more than one submit button.

A submit does not submit a field, but a whole form. You don't even need it, as most user-agents will submit a form if you press Enter on a textfield.

Anyway, your fields will have an attribute name, unique within the form, and shall have an id attribute unique within the document.

When they are sent, all data can be accessed in PHP as an array. The superglobal $_POST in your case, or $_GET if that method was used to submit it. There, you do your magic.

ssice
A: 

There's a couple of ways you can simplify this problem. Here's one approach:

$fields = array('field1','field2','field3','field4','field5'); // Add all your field names to an array
$data = array();
foreach ($fields as $field) {
    if (isset($_POST[$field])) {
        $data[$field] = $_POST[$field];
        // If you wanted it assigned to a local variable instead, 
        // you could do it like this, although this pattern is 
        // generally frowned upon:
        ${$field} = $_POST[$field];
    }
}

The danger of assigning it as a local variable is that it can overwrite a variable that already exists. It could potentially overwrite something crucial to the rest of the application. However, because the field names are explicitly defined in the array, you do at least maintain control over this.

You would definitely NOT want to iterate through the $_POST array and assign each array key to a local variable -- doing so would leave you wide open for hackers.

Andy Baird