0

I have created a multipage form which collects data input by the user before and is then sent by email.

I have created a table that the user has to fill in an ammount for each item. They user doesn't have to fill everything in only the items that apply.

This is a sample of the table.
It haa a text input which holds the amount and a hidden value that holds the description so they can he eched out next to each other later for example "Item 1: 100"

<table>
    <tr>
        <th>Description</td>
        <th>Amount</td>
        <th>Description</td>
        <th>Amount</td>
    </tr>
    <tr>
        <td>Item 1</td>
        <td><input type="text" name="amount[]">
        <input type="hidden" name="description[]" value="Item 1">
        </td>
        <td>Item 2</td>
        <td><input type="text" name="amount[]">
        <input type="hidden" name="description[]" value="Item 2">
        </td>
    </tr>
    <tr>
        <td>Item 3</td>
        <td><input type="text" name="amount[]">
        <input type="hidden" name="description[]" value="Item 3">
        </td>
        <td>Item 4</td>
          <td><input type="text" name="amount[]">
        <input type="hidden" name="description[]" value="Item 4">
        </td>
    </tr>

I want to loop out this data using a while loop however only one value is being echoed not both.

while(list(, $description) = each($_POST['description']) && list(, $amount) = each($_POST['amount'])){
echo $description ." " . amount . " ";
}
2
Contributors
3
Replies
14
Views
3 Years
Discussion Span
Last Post by diafol
0

I don't get the need for the hidden input.

$num_display = 100;
$output = '';

for($x=0;$x<$num_display;$x+2)
{
    $output .=  '<tr><td>Item '.($x+1).'</td><td><input type="text" name="amount[]" placeholder="Item '.($x+1).'"></td><td>Item '.($x+2).'</td><td><input type="text" name="amount[]" placeholder="Item '.($x+2).'"></td></tr>';
}

echo $output;

Then in your data handling script...

$out ='';
foreach($_POST['amount'] as $index=>$value)
{
    if(trim($value) != ''){
        $out .= 'Item ' . ($index + 1) . ': ' . $value . '<br />';
    }
}
echo $out;

I'm not sure about the counter ($x+2) - it may fail at the end if you choose odd number of $x values. Also, tables are fiddly things to get right. You may find inline <ul> lists better or even form css3 *-column-count from a straight list.

0

I need the hidden value as the Description isn't actually item 1, item 2, item 3 I just used them as an example. I should have made that clear. I would have used a foreach loop if it was just using one post value but I couldn't get it to work with two post values.

0

Your way looks as though you're hardcoding all these descriptions into the table. WHy not store them in an array?

$desc = array('Not really Item 1', 'Not really called item 2 either', 'Dog knows what this is',...);
$num_display = 100;
$output = '';
for($x=0;$x<$num_display;$x+2)
{
    $output .=  '<tr><td>Item '.($x+1).'</td><td><input type="text" name="amount[]" placeholder="'. $desc[($x+1)].'"></td><td>Item '.($x+2).'</td><td><input type="text" name="amount[]" placeholder="'. $desc[($x+2)].'"></td></tr>';
}
echo $output;

Then...

$out ='';
foreach($_POST['amount'] as $index=>$value)
{
    if(trim($value) != ''){
        $out .= $desc[$index] . ': ' . $value . '<br />';
    }
}
echo $out;
This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.