Getting a (non-radio) button's index number from array

Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

Threaded View
If you could assist me with the following situation, I would be very

I have a table of data retrieved from database displayed on screen.
To each row of data, I have added action buttons, such as "Edit",
"Add", and "Comment".  Since I do not know how many rows of data will
be retrieved - and therefore how many buttons I need - I am using
button arrays for each button, like so:
echo "<input type=\"submit\" value=\"Comment\" name=\"Comment[]\" />";

In the php file that processes the input from this form, I have the
following code, which I was under the impression would give me the
index in the Comment array of the button that was fired.
if (isset($_POST['CommentMedicalHistory']))
    $indexOfComment = each($_POST['CommentMedicalHistory']);
    echo "index = ";
Unfortunately, it is returning 0 as the index all the time, even when
I do not click on the Comment button in the first row.
Do you know by any chance how I could get the correct index of the
button that was pressed from the array?

Thank you, once again, for any assistance that you can provide,
Simon Gottesman

Re: Getting a (non-radio) button's index number from array

On Apr 19, 2:13 am, wrote:
Quoted text here. Click to load it

although this approach could work, it might not work as you intend if
the database has changed since the rows were received. your comment
could be associated with the wrong row in the db.
Perhaps what you need is an ID for each row, so that you can associate
the button with that id, create a column and populate it with a unique
ID, you /could/ use an auto_increment column, but will probably find
it easier in the long run if you don't and simply adjust your table
and populate it manually when updating and altering the table.
the job of creating unique names for your inputs is now easy.

watch how much data you retunr though, creating buttons for each
(possibly unused) row means more in the DOM (more in memory) and more
clutter on the page.
Consider using javascript to add to the DOM only what the user wishes
to edit, adding a small form with the 3 or so buttons, which appear
below the row when the user clicks, if you add an iframe too pointing
towards the update script, you have an AJAX style synamic updater
which can be used repeatedly on the same page to update many rows with
no need for a refresh with its database querying overhead. Once again
thoughm if the rows can be edited by more than one user at a time,
make sure the logic checks for changes before overwriting. To do this
you could populate a session serverside with the results from the
database, and check that the values from the session are still the
same as the values from the database, before updating. I know its a
hassle, but will avoid too many users upsetting each other, the good
news is that when a user changes the database while another user is
attempting to do it, you can notify the other user without them
leaving the page, of the new value, and ask whether they wish to still
carry on. Just ignore all this if its never likely to grow to the
point where you care about this. Its just that since you are returning
a lot of data (by the sound of it) it suggested to me that the data
counld be presented to multiple users at once if multple users are
using that part of the app. and although the chances of each user
updating the same row could be seen to be small compared to the set
size, the context is what will drive the need to update, rather than
the simple probability, and so it could be a problem. rabbit rabbit,
perhaps i need sleep!

Re: Getting a (non-radio) button's index number from array wrote:
Quoted text here. Click to load it


Since you can only press one button to submit your form, you will only  
get one button back - and it's index will always be zero.  In the case  
of a submit button, the brackets in 'name="Comment[]"' are superfluous -  
you can't get back more than one button.

What you want is to get the id of the row (you do have a unique ID for  
each row, right?) and use it in your name, i.e.

   " ... name=\"comment[$id]\" ... "

Now you can get the $_POST['comment'] array and check your key to get  
the id of the row.

No javascript or DOM needed.

Of course, there are other ways, but I like this one.

Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.

Re: Getting a (non-radio) button's index number from array

Quoted text here. Click to load it

i suppose it could be added that the [] technique /can/ be very useful
if you are making many comments at once, which is what I assumed.
another eg. When you are /submitting/ a lot of inputs each with unique
values which taken together mean something, for instance a series of
ordered triples, like 3D coordinates.
As Jerry points out, you don't need js if you print out the full DOM
in markup, you are advised to use paging with a LIMIT BY clause in
your sql, to ensure things don't grow unmanageably as the data in the
table grows.

Re: Getting a (non-radio) button's index number from array

shimmyshack wrote:
Quoted text here. Click to load it

He doesn't need the full DOM at all.  Just use the row id as the index  
to the array.

There needs to be some unique way to identify the row in the database.  
Otherwise you can get the wrong row, i.e. if the database has changed as  
you noted.

Whether it's an autoincrement or other type of column, that identifier  
can be used as the index to the array.  Then it's easy to retrieve the  
correct row all the time.

And I agree - he needs to limit the amount of data returned now, not later.

Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.

Re: Getting a (non-radio) button's index number from array

Quoted text here. Click to load it

Thank you both for your replies.
I will try Jerry's approach first, as I was already leaning towards
trying something like that (and I already have an index keeping track
of the number of rows both on the page and in the database).  I think
I might be lucky in this case and not have to deal with the issue
shimmyshack raised, of buttons becoming dissociated from the correct
rows in the database, since, in this application, rows cannot be
deleted - only added or edited.  Also, I think that I won't have to
deal with more than 20 to 40 rows of data at a time- so the issue of
too much data might also be avoided.  Though if it becomes an issue, I
might be able to limit it further.

Re: Getting a (non-radio) button's index number from array

Quoted text here. Click to load it

just to clarify, with regard mentioning DOM, I simply meant that the
total load of markup could become large, vs changing the DOM at run
time in response to user actions, since as we know the only number to
keep track of is the id. I guess like a long thread in google groups,
of course changing at runtime is not appropriate if you need
accessibility in the app.

Site Timeline