473,399 Members | 3,038 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,399 software developers and data experts.

Avoid 'GET' method

Is there a way to make a text link post to a form without passing all
the parameters in the url? The urls tend to get very long and messy. I
often wonder if there is a limit to how long they can get?

Jul 18 '05 #1
24 2813
somebody wrote:
Is there a way to make a text link post
no, you can't make a link *do* anything.
The urls tend to get very long and messy.
How come your addresses are so long?

What are you trying to do?
I often wonder if there is a limit to how long they can get?


no limit imposed by any public specification - in fact the
relevant one, RFC2616, even says it sets no limit - but
perhaps obviously there are implementation-specific limits.

--
Jock
Jul 18 '05 #3
>> Is there a way to make a text link post

no, you can't make a link *do* anything.


Yes, you can, but it's debatable as to whether it's a good idea.
For example, you might have a link labelled 'Delete' next to
a listing for a user on the editusers.php page:
http://my.domain.com/admin/editusers...te&userid=7362
and clicking on it deletes the user in question. (Obviously some kind
of authentication is in use for this, and maybe it takes you to a
confirmation page).

I'd be interested in someone's idea for a solution to the general
problem: you have a table with possibly hundreds or thousands of
lines in it. You want to have several clickable things on *each
line* that do stuff to the item (say, a DNS record) in question
(edit, delete, disable, enable, whatever). I've been using GET
with links that have a mode variable and some kind of id variable.
Disadvantages: running linkchecker on this destroys the database,
given that it effectively clicks on every delete button.

I've considered using PUT with forms with hidden fields instead.
Disadvantages: (a) the submit buttons tend to be too darn big,
making viewing enough of the table at one time impossible, and (b)
browsers tend to run out of memory much faster with a thousand forms
rather than a thousand links, and (c) a page with lots of forms is
a lot longer in HTML than a page with lots of links, making load
times noticible.

Gordon L. Burditt
Jul 18 '05 #4
Have you tried using hidden fields in a single form? You can use
JavaScript's onclick method to set your hidden fields based on the link you
click, and then to submit the form using formname.submit(); - your form can
the use the POST method. You can use the onsubmit=return confirm('are you
sure you want to delete'); to make sure a link checker never gets to delete
anything... it's also a good idea to have a JavaScript confirmation for your
users as they may not want to delete. Remember, of course, that this does
not stop anyone from deleting records with malicious intent - they can
submit a form from any other web site that is identical to yours - so you
will need an additional verification (login with cookies/session, etc).

ECRIA
http://www.ecria.com
Jul 18 '05 #5
Gordon Burditt wrote:
[John Dunlop wrote:]
no, you can't make a link *do* anything.


Yes, you can,


yes, the resource the link identifies can do something, but
the link itself can't. that's what I meant; sorry for any
confusion.

--
Jock
Jul 18 '05 #6
>Have you tried using hidden fields in a single form?

I don't see how to do that, as the value of the hidden field has to
identify which record is to be affected.
You can use
JavaScript's onclick method to set your hidden fields based on the link you
click, and then to submit the form using formname.submit(); - your form can
the use the POST method. You can use the onsubmit=return confirm('are you
sure you want to delete'); to make sure a link checker never gets to delete
anything... it's also a good idea to have a JavaScript confirmation for your
users as they may not want to delete.
JavaScript is Turned Off(tm) until someone comes up with a browser
that can have JavaScript selectively enabled by as sophisticated a
filter as Firefox has for cookies (enable for JavaScript from
specific hosts ONLY). And even then I'd have a hard time getting
it accepted by the admins in question. It manages to lock up
browsers too often, and having to remember to turn it off after
"temporarily" enabling it is a problem. Admins sometimes have to
investigate SPAM complaints, and this may lead them to follow links
in SPAM with malicious JavaScript (the most obnoxious that aren't
coupled with viruses are the ones that open two windows when you
close one).

Forms like this are for use by people who are supposed to know what
they are doing. Altering raw DNS records is not for the casual
user. Also, re-entering a single accidentally-deleted DNS record
does not require a lot of typing to re-enter. And there is a history
log of changes.

Other uses of pages like this are for personal applications like a
To Do list, which only one person will be using, me. One click to
mark something done. No confirmation. But the record isn't deleted,
so undoing the change is possible (but not as convenient). I have
yet to need to do that yet.
Remember, of course, that this does
not stop anyone from deleting records with malicious intent - they can
submit a form from any other web site that is identical to yours - so you
will need an additional verification (login with cookies/session, etc).


There's already .htaccess requiring passwords *AND* a very limited
set of IP addresses that it can be used from on the whole virtualhost.
The malicious intent problem is basically solved by firing anyone
found to be doing anything malicious, and keeping good backups.

Gordon L. Burditt
Jul 18 '05 #7

<el*************@yahoo.com> wrote in message
news:11**********************@g47g2000cwa.googlegr oups.com...
Is there a way to make a text link post to a form without passing all
the parameters in the url? The urls tend to get very long and messy. I
often wonder if there is a limit to how long they can get?


How about setting all those variable in an array:

$theArray = array();
$theArray['item1'] = "item1 value";
etc.
$_SESSION['theArray'] = $theArray;

Then in the receiving page:
$theArray = $_SESSION['theArray'] ;
and then use
$theArray['item1'], etc.

If they weren't set then the value is NULL.

BTW, this works for me.

Shelly
Jul 18 '05 #8
el*************@yahoo.com wrote:
: Is there a way to make a text link post to a form without passing all
: the parameters in the url? The urls tend to get very long and messy. I
: often wonder if there is a limit to how long they can get?

One possible technique

Use sessions.

Create a session for a user.

When you generate the table with all the links, save the details of each
link as part of the session, and index the details via an id, and use that
id in the link instead of the details.

<a href="mysite.com/myscript.php?the-id=A57">click here</a>


--

This space not for rent.
Jul 18 '05 #9
go***********@burditt.org (Gordon Burditt) wrote:
I'd be interested in someone's idea for a solution to the general
problem: you have a table with possibly hundreds or thousands of
lines in it.


$button_n = 0;

function Button($text, $action)
{
global $button_n;
echo "<input type=submit name=button_", $button_n, " value=$text>";
echo "<input type=hidden name=action_", $button_n, " value=",
base64encode( serialize( $action ) ), ">";
/* optional: add an hidden field with the MAC of the serialized
$action, to be checked later on submit */
$button_n++;
}

/* Generate the form: */

for( every row of the table ){
echo "<form ...>";
echo "...the record...";
Button("Edit", array( "op" => EDIT, "record" => 1234 ));
Button("Remove", array( "op" => REMOVE, "record" => 1234 ));
/* ...and so on for every button */
echo "</form>";
}

.....

/* Handle the POST: */

$n = examine $_POST looking for the number of the parameter
named "^button_[0-9]+$";
$action = unserialize( base64decode( $_POST['action_' . $n] ) );
-- do the action given by $action

Hint: all those hidden fields may conveniently be stored in the user session.
Hint 2: the "$action" may contain the name and the arguments of a function
to call, so that with Button() we set a "call-back". In this case, better
to use the session, or the MAC is mandatory to prevent tampering.

Regards,
___
/_|_\ Umberto Salsi
\/_\/ www.icosaedro.it

Jul 19 '05 #10
First, always use the POST method to update the database.

Second, do not put a separate set of buttons against each entry, use a
single set for the whole page. Put a checkbox against each entry so that the
user may select one or more entries, then when a button is pressed it
performs that action against those selected entries. Take a look at
http://www.tonymarston.co.uk/sample/person_list.php for an example.

This is part of my sample application
(http://www.tonymarston.net/php-mysql...plication.html) which you can
download to run locally.

--
Tony Marston

http://www.tonymarston.net

"Gordon Burditt" <go***********@burditt.org> wrote in message
news:11*************@corp.supernews.com...
Is there a way to make a text link post


no, you can't make a link *do* anything.


Yes, you can, but it's debatable as to whether it's a good idea.
For example, you might have a link labelled 'Delete' next to
a listing for a user on the editusers.php page:
http://my.domain.com/admin/editusers...te&userid=7362
and clicking on it deletes the user in question. (Obviously some kind
of authentication is in use for this, and maybe it takes you to a
confirmation page).

I'd be interested in someone's idea for a solution to the general
problem: you have a table with possibly hundreds or thousands of
lines in it. You want to have several clickable things on *each
line* that do stuff to the item (say, a DNS record) in question
(edit, delete, disable, enable, whatever). I've been using GET
with links that have a mode variable and some kind of id variable.
Disadvantages: running linkchecker on this destroys the database,
given that it effectively clicks on every delete button.

I've considered using PUT with forms with hidden fields instead.
Disadvantages: (a) the submit buttons tend to be too darn big,
making viewing enough of the table at one time impossible, and (b)
browsers tend to run out of memory much faster with a thousand forms
rather than a thousand links, and (c) a page with lots of forms is
a lot longer in HTML than a page with lots of links, making load
times noticible.

Gordon L. Burditt

Jul 21 '05 #11
Following on from Malcolm Dew-Jones's message. . .
el*************@yahoo.com wrote:
: Is there a way to make a text link post to a form without passing all
: the parameters in the url? The urls tend to get very long and messy. I
: often wonder if there is a limit to how long they can get?

One possible technique

Use sessions.

Create a session for a user.

When you generate the table with all the links, save the details of each
link as part of the session, and index the details via an id, and use that
id in the link instead of the details.

<a href="mysite.com/myscript.php?the-id=A57">click here</a>

And if your record ids are 1,2,3 ... 45,46,47 etc then you need to
protect that id from being known or accessible or usable from the
'hidden' information. [Even if you use large random numbers for record
IDs this only protects against peeking at another customer's record etc
(and then not perfectly) and it means that for example
"?CN=123456789&ACTION=DENY" is an invitation to use the same CN with
other actions.]

So, one method is to create a record in the session (array) of
parameters and dynamically generated random number. The link now looks
lime "?LNK=152482763" with 152482763 referencing something in the
session. The next time the exact same link is generated (same customer,
same action say) there will be a completely different random number.

This works for page-to-page links and also URLs embedded into emails.
(In the latter case store the info in a table. - I have a class that
encapsulates this nicely with extra functions for things like expiry and
deleting all options when one is chosen - I suppose I ought to start
publishing some of my useful classes.)
--
PETER FOX Not the same since the e-commerce business came to a .
pe******@eminent.demon.co.uk.not.this.bit.no.html
2 Tees Close, Witham, Essex.
Gravity beer in Essex <http://www.eminent.demon.co.uk>
Jul 21 '05 #12
Bob
Tony,
Those are beautiful pages.
I did not think you could do that with php.
Now I have some serious reading to do on XSL.
Thanks.

Jul 21 '05 #13
>First, always use the POST method to update the database.
It would be nice if that were practical.
Second, do not put a separate set of buttons against each entry, use a
single set for the whole page.
This is WAY too clumsy a user interface for what I want.
Do you have stock in a medical corporation that treats carpal
mouse syndrome?

On your page I can only see 10 records at a time, and there's a
lot of space between them. I'd like to see at least 30. Without
scrolling (on a 1024x768 display). But I don't mind scrolling if
there's hundreds of records. The different sort orders available
usually put the records I'm interested in at the top.
Put a checkbox against each entry so that the
user may select one or more entries, then when a button is pressed it
performs that action against those selected entries. Take a look at
http://www.tonymarston.co.uk/sample/person_list.php for an example.


Selecting more than one record at a time is rarely useful for
my purposes. The idea is to enter updates as needed, not save
up a whole batch of them and enter them every few days.

Gordon L. Burditt
Jul 21 '05 #14

"Gordon Burditt" <go***********@burditt.org> wrote in message
news:11*************@corp.supernews.com...
First, always use the POST method to update the database. It would be nice if that were practical.


Tell me why it is NOT practical?
Second, do not put a separate set of buttons against each entry, use a
single set for the whole page.


This is WAY too clumsy a user interface for what I want.
Do you have stock in a medical corporation that treats carpal
mouse syndrome?


It is not clumsy. I have been using a similar interface on desktop
applications for 20 years and no user has ever complained.
On your page I can only see 10 records at a time, and there's a
lot of space between them. I'd like to see at least 30.
That's what the "show 10 | show 25 | show 50 | show 100" hyperlinks are for,
to allow you to set your own page size.
Without
scrolling (on a 1024x768 display).
You cannot guarantee that everyone has a screen resolution of 1024x768
But I don't mind scrolling if
there's hundreds of records. The different sort orders available
usually put the records I'm interested in at the top.


The column headings are hyperlinks which, when pressed, will cause the data
to be sorted on that column. I mean ALL the data, not just the data in the
current page.
Put a checkbox against each entry so that the
user may select one or more entries, then when a button is pressed it
performs that action against those selected entries. Take a look at
http://www.tonymarston.co.uk/sample/person_list.php for an example.


Selecting more than one record at a time is rarely useful for
my purposes. The idea is to enter updates as needed, not save
up a whole batch of them and enter them every few days.


It may not be useful for your purposes, but other people find it VERY
useful. It is not about storing updates for several days and then applying
them in a batch.

In your method I suppose you can only select one record at a time in the
LIST screen before you can navigate down to a DETAIL screen. If you then
want to move onto another record you have to exit the DETAIL, return to the
LIST screen, make another selection, then activate the DETAIL screen again.
Using my method you can select all the records in the LIST screen (that's
what the "select all" hyperlink is for, by the way) then activate the chosen
DETAIL screen. This shows you the first record that you selected, but gives
you scrolling options so that you can scroll forwards and backwards through
all the records you selected WITHOUT having to return to the LIST screen.

How do you like THEM apples?

--
Tony Marston

http://www.tonymarston.net

Jul 21 '05 #15

"Bob" <cl****@qualitythink.com> wrote in message
news:11**********************@g43g2000cwa.googlegr oups.com...
Tony,
Those are beautiful pages.
I did not think you could do that with php.
Now I have some serious reading to do on XSL.
Thanks.


Those pages are straightforward HTML which PHP was designed to generate, so
why should PHP not be able to generate them? The same pages can be generated
in ANY language. It's not rocket science.

The page design follows what I achieved in a desktop programming language
for the previous 10 years. All I have done is adapt them for a stateless
environment.

--
Tony Marston

http://www.tonymarston.net

Jul 21 '05 #16
Bob
Let me amplify my statement, I did not conceive of this being possible
in a "stateless" environment.

Jul 21 '05 #17

"Bob" <cl****@qualitythink.com> wrote in message
news:11**********************@g43g2000cwa.googlegr oups.com...
Let me amplify my statement, I did not conceive of this being possible
in a "stateless" environment.


PHP's session handling functions (see
http://www.php.net/manual/en/ref.session.php) help a great deal. This makes
it easy to pass data between one page request and another within the same
session. It would not be so easy trying to do it with cookies or hidden HTML
fields.

--
Tony Marston

http://www.tonymarston.net

Jul 21 '05 #18
>> >First, always use the POST method to update the database.
It would be nice if that were practical.
Tell me why it is NOT practical?


(a) too many forms slow browser to a crawl and/or run it out of memory.
(b) the amount of HTML required has a noticible effect on load time.
Second, do not put a separate set of buttons against each entry, use a
single set for the whole page.


This is WAY too clumsy a user interface for what I want.
Do you have stock in a medical corporation that treats carpal
mouse syndrome?


It is not clumsy. I have been using a similar interface on desktop
applications for 20 years and no user has ever complained.


*I* am the primary user of this interface, and *I* am complaining.

This is not a typical user interface: it's for admins, and you can
expect that admins will have privileges and know-how to do anything
the page can do with manually-typed-in SQL. If mass changes are
required, it will probably be easier and safer to use manually-typed-in
SQL. The page is supposed to be for quick entry of simple changes.
If it's not more convenient to use the page than manually-typed-in
SQL, it's useless.

I certainly wouldn't design something like this for the world at
large to use. And that's not who's going to be using it.
On your page I can only see 10 records at a time, and there's a
lot of space between them. I'd like to see at least 30.


That's what the "show 10 | show 25 | show 50 | show 100" hyperlinks are for,
to allow you to set your own page size.


But you still can't see that many on the screen at one time.
Checkboxes or submit buttons take up too much vertical space, out
of proportion to the actual size of the box or button on the screen,
and I haven't found a way around that even by making the type size
tiny. To make the interface usable, I want to be able to SEE lots
of records at a time.
Without
scrolling (on a 1024x768 display).


You cannot guarantee that everyone has a screen resolution of 1024x768


I can guarantee that anyone who doesn't is not authorized to use
the application. :-) I'll tolerate scrolling if the screen is
smaller, although there aren't that many smaller screens around any
more.
But I don't mind scrolling if
there's hundreds of records. The different sort orders available
usually put the records I'm interested in at the top.


The column headings are hyperlinks which, when pressed, will cause the data
to be sorted on that column. I mean ALL the data, not just the data in the
current page.


Ok, this is much like the pages I have, except I don't try to paginate
them, just put everything on one page. Also, there's a search function
to display a subset of the data.
Put a checkbox against each entry so that the
user may select one or more entries, then when a button is pressed it
performs that action against those selected entries. Take a look at
http://www.tonymarston.co.uk/sample/person_list.php for an example.
Selecting more than one record at a time is rarely useful for
my purposes. The idea is to enter updates as needed, not save
up a whole batch of them and enter them every few days.


It may not be useful for your purposes, but other people find it VERY
useful.


Other people aren't authorized to use this application. User
interface design is not a one-size-fits-all thing: it should be
done with the users who are going to use it, which is not always
the entire world.
It is not about storing updates for several days and then applying
them in a batch.

In your method I suppose you can only select one record at a time in the
LIST screen before you can navigate down to a DETAIL screen. If you then
I want to be able to change the status of a record *WITHOUT* going
to a detail screen. If I want a detail screen, that's what the
EDIT button is for, which allows changing a lot more fields but is
used less often.
want to move onto another record you have to exit the DETAIL, return to the
LIST screen, make another selection, then activate the DETAIL screen again.
Using my method you can select all the records in the LIST screen (that's
what the "select all" hyperlink is for, by the way) then activate the chosen
DETAIL screen. This shows you the first record that you selected, but gives
you scrolling options so that you can scroll forwards and backwards through
all the records you selected WITHOUT having to return to the LIST screen.

How do you like THEM apples?


Manually-typed-in SQL is looking better all the time ...

Gordon L. Burditt
Jul 21 '05 #19

"Gordon Burditt" <go***********@burditt.org> wrote in message
news:11*************@corp.supernews.com...
>First, always use the POST method to update the database.
It would be nice if that were practical.
Tell me why it is NOT practical?


(a) too many forms slow browser to a crawl and/or run it out of memory.
(b) the amount of HTML required has a noticible effect on load time.


There are no studies which show that the POST method is slower than the GET
method, or puts a heavier load on the server, so I don't believe you.
Second, do not put a separate set of buttons against each entry, use a
single set for the whole page.

This is WAY too clumsy a user interface for what I want.
Do you have stock in a medical corporation that treats carpal
mouse syndrome?


It is not clumsy. I have been using a similar interface on desktop
applications for 20 years and no user has ever complained.


*I* am the primary user of this interface, and *I* am complaining.


I prefer the opinion of all my users over the past 10 years over that of a
lone individual.
This is not a typical user interface: it's for admins, and you can
expect that admins will have privileges and know-how to do anything
the page can do with manually-typed-in SQL. If mass changes are
required, it will probably be easier and safer to use manually-typed-in
SQL. The page is supposed to be for quick entry of simple changes.
If it's not more convenient to use the page than manually-typed-in
SQL, it's useless.

I certainly wouldn't design something like this for the world at
large to use. And that's not who's going to be using it.
On your page I can only see 10 records at a time, and there's a
lot of space between them. I'd like to see at least 30.
That's what the "show 10 | show 25 | show 50 | show 100" hyperlinks are
for,
to allow you to set your own page size.


But you still can't see that many on the screen at one time.


If you click "show 50" it changes the page size to 50 lines. Did you
actually try it?
Checkboxes or submit buttons take up too much vertical space, out
of proportion to the actual size of the box or button on the screen,
I think that one checkbox per line and one set of navigation links per page
is FAR superior to a separate set of navigation links per line. But that's
just my opinion (and the opinion of all my users over the past 10 years.).
and I haven't found a way around that even by making the type size
tiny. To make the interface usable, I want to be able to SEE lots
of records at a time.
That's what the "show 10 | show 25 | show 50 | show 100" hyperlinks are for.
Without
scrolling (on a 1024x768 display).


You cannot guarantee that everyone has a screen resolution of 1024x768


I can guarantee that anyone who doesn't is not authorized to use
the application. :-)


So it's not an internet application then?
I'll tolerate scrolling if the screen is
smaller, although there aren't that many smaller screens around any
more.
But I don't mind scrolling if
there's hundreds of records. The different sort orders available
usually put the records I'm interested in at the top.


The column headings are hyperlinks which, when pressed, will cause the
data
to be sorted on that column. I mean ALL the data, not just the data in the
current page.


Ok, this is much like the pages I have, except I don't try to paginate
them, just put everything on one page. Also, there's a search function
to display a subset of the data.


There's also a search function in my screen. Just press the SEARCH button
and up it pops.
Put a checkbox against each entry so that the
user may select one or more entries, then when a button is pressed it
performs that action against those selected entries. Take a look at
http://www.tonymarston.co.uk/sample/person_list.php for an example.

Selecting more than one record at a time is rarely useful for
my purposes. The idea is to enter updates as needed, not save
up a whole batch of them and enter them every few days.


It may not be useful for your purposes, but other people find it VERY
useful.


Other people aren't authorized to use this application. User
interface design is not a one-size-fits-all thing: it should be
done with the users who are going to use it, which is not always
the entire world.
It is not about storing updates for several days and then applying
them in a batch.

In your method I suppose you can only select one record at a time in the
LIST screen before you can navigate down to a DETAIL screen. If you then


I want to be able to change the status of a record *WITHOUT* going
to a detail screen. If I want a detail screen, that's what the
EDIT button is for, which allows changing a lot more fields but is
used less often.


Surely a LIST screen is for listing data while an UPDATE screen is for
updating data?
want to move onto another record you have to exit the DETAIL, return to
the
LIST screen, make another selection, then activate the DETAIL screen
again.
Using my method you can select all the records in the LIST screen (that's
what the "select all" hyperlink is for, by the way) then activate the
chosen
DETAIL screen. This shows you the first record that you selected, but
gives
you scrolling options so that you can scroll forwards and backwards
through
all the records you selected WITHOUT having to return to the LIST screen.

How do you like THEM apples?


Manually-typed-in SQL is looking better all the time ...

Gordon L. Burditt


If your users are happy to manually type in the SQL to update the database
then why bother trying to write your own user interface at all? Just give
them phpMyAdmin and have done with it.

--
Tony Marston

http://www.tonymarston.net

Jul 22 '05 #20
>>>> >First, always use the POST method to update the database.
It would be nice if that were practical.

Tell me why it is NOT practical?
(a) too many forms slow browser to a crawl and/or run it out of memory.
(b) the amount of HTML required has a noticible effect on load time.


There are no studies which show that the POST method is slower than the GET
method, or puts a heavier load on the server, so I don't believe you.


Count the characters in the HTML (these take time to transmit over the net):

Link method:

<a href="zone.php?id=5&mode=delete">Delete</a>

vs. form method:

<form action="zone.php"><input type="hidden" name="id" value="5"><input type="mode" value="delete"><input type="submit" value="delete"></form>

Can you shrink the form method to use less than 50% more characters
than the link method?

More HTML takes more time to send over the net. Multiply that by
hundreds of lines of data and multiple buttons per line. Lots of
forms seem to slow down the *BROWSER* much more than lots of links.
I didn't say anything about server load, except the bigger the HTML,
the more it takes to send it. IE6 seems to get much slower for
1000 forms vs. 1000 links. Firefox and Mozilla don't slow down as
much, but they still slow down. I suspect it takes more memory to
deal with forms than links and the browser starts paging. In any
case, I don't get to redesign the browsers. Even with an open-source
browser, that takes too much effort.
>Second, do not put a separate set of buttons against each entry, use a
>single set for the whole page.

This is WAY too clumsy a user interface for what I want.
Do you have stock in a medical corporation that treats carpal
mouse syndrome?

It is not clumsy. I have been using a similar interface on desktop
applications for 20 years and no user has ever complained.
*I* am the primary user of this interface, and *I* am complaining.


I prefer the opinion of all my users over the past 10 years over that of a
lone individual.


You prefer the opinion of people who are *NOT* using the application
over the person that is? I pity anyone you're doing web design for
if you won't pay attention to the requirements for the design.
This is not a typical user interface: it's for admins, and you can
expect that admins will have privileges and know-how to do anything
the page can do with manually-typed-in SQL. If mass changes are
required, it will probably be easier and safer to use manually-typed-in
SQL. The page is supposed to be for quick entry of simple changes.
If it's not more convenient to use the page than manually-typed-in
SQL, it's useless.

I certainly wouldn't design something like this for the world at
large to use. And that's not who's going to be using it.
On your page I can only see 10 records at a time, and there's a
lot of space between them. I'd like to see at least 30.

That's what the "show 10 | show 25 | show 50 | show 100" hyperlinks are
for,
to allow you to set your own page size.


But you still can't see that many on the screen at one time.


If you click "show 50" it changes the page size to 50 lines. Did you
actually try it?


I want to see at least 30 lines on the *SCREEN*. Not the *PAGE*.
I want 30 lines on the *SCREEN* simultaneously. Checkboxes and
submit buttons seem to take much more vertical space than they
visually occupy so you can't get that even if you make the font
size way too tiny.
Checkboxes or submit buttons take up too much vertical space, out
of proportion to the actual size of the box or button on the screen,
I think that one checkbox per line and one set of navigation links per page
is FAR superior to a separate set of navigation links per line. But that's
just my opinion (and the opinion of all my users over the past 10 years.).


They aren't "navigation links", they are things you click on that
DO something.
and I haven't found a way around that even by making the type size
tiny. To make the interface usable, I want to be able to SEE lots
of records at a time.


That's what the "show 10 | show 25 | show 50 | show 100" hyperlinks are for.
Without
scrolling (on a 1024x768 display).

You cannot guarantee that everyone has a screen resolution of 1024x768


I can guarantee that anyone who doesn't is not authorized to use
the application. :-)


So it's not an internet application then?


It does operate over the internet (admins can use it from home).
It most certainly is not intended for general use by the public.
I'll tolerate scrolling if the screen is
smaller, although there aren't that many smaller screens around any
more.
But I don't mind scrolling if
there's hundreds of records. The different sort orders available
usually put the records I'm interested in at the top.

The column headings are hyperlinks which, when pressed, will cause the
data
to be sorted on that column. I mean ALL the data, not just the data in the
current page.


Ok, this is much like the pages I have, except I don't try to paginate
them, just put everything on one page. Also, there's a search function
to display a subset of the data.


There's also a search function in my screen. Just press the SEARCH button
and up it pops.

>Put a checkbox against each entry so that the
>user may select one or more entries, then when a button is pressed it
>performs that action against those selected entries. Take a look at
>http://www.tonymarston.co.uk/sample/person_list.php for an example.

Selecting more than one record at a time is rarely useful for
my purposes. The idea is to enter updates as needed, not save
up a whole batch of them and enter them every few days.

It may not be useful for your purposes, but other people find it VERY
useful.


Other people aren't authorized to use this application. User
interface design is not a one-size-fits-all thing: it should be
done with the users who are going to use it, which is not always
the entire world.
It is not about storing updates for several days and then applying
them in a batch.

In your method I suppose you can only select one record at a time in the
LIST screen before you can navigate down to a DETAIL screen. If you then


I want to be able to change the status of a record *WITHOUT* going
to a detail screen. If I want a detail screen, that's what the
EDIT button is for, which allows changing a lot more fields but is
used less often.


Surely a LIST screen is for listing data while an UPDATE screen is for
updating data?


A <whatever you want to call it> screen is for listing data *and*
making quick one-click updates to the status of things. That's
what's needed.
want to move onto another record you have to exit the DETAIL, return to
the
LIST screen, make another selection, then activate the DETAIL screen
again.
Using my method you can select all the records in the LIST screen (that's
what the "select all" hyperlink is for, by the way) then activate the
chosen
DETAIL screen. This shows you the first record that you selected, but
gives
you scrolling options so that you can scroll forwards and backwards
through
all the records you selected WITHOUT having to return to the LIST screen.

How do you like THEM apples?


Manually-typed-in SQL is looking better all the time ...

Gordon L. Burditt


If your users are happy to manually type in the SQL to update the database
then why bother trying to write your own user interface at all? Just give
them phpMyAdmin and have done with it.


A well-written (NOT according to your standards, though) page would
allow users to make a set of simple changes (but which comprise a
very large percentage of the changes actually needed in practice)
faster than typing manual SQL. Change the status of something:
call up the page (likely to be bookmarked), then one click to make
the change. You seem to insist that because it's not a suitable
interface for the general public (and I agree, it's not), it
can't/shouldn't be done at all.

Gordon L. Burditt
Jul 22 '05 #21

"Gordon Burditt" <go***********@burditt.org> wrote in message
news:11*************@corp.supernews.com...
> >First, always use the POST method to update the database.
> It would be nice if that were practical.

Tell me why it is NOT practical?

(a) too many forms slow browser to a crawl and/or run it out of memory.
(b) the amount of HTML required has a noticible effect on load time.
There are no studies which show that the POST method is slower than the
GET
method, or puts a heavier load on the server, so I don't believe you.


Count the characters in the HTML (these take time to transmit over the
net):

Link method:

<a href="zone.php?id=5&mode=delete">Delete</a>

vs. form method:

<form action="zone.php"><input type="hidden" name="id" value="5"><input
type="mode" value="delete"><input type="submit" value="delete"></form>

Can you shrink the form method to use less than 50% more characters
than the link method?


Your style of coding is very inefficient. In my pages, using the POST
method, I have no more than this:

<input class="submit" type="submit" name="task#person_del.php"
value="Delete" />

The advantage of my method is that I do not pass primary keys in URLs as a
security measure.
More HTML takes more time to send over the net. Multiply that by
hundreds of lines of data and multiple buttons per line. Lots of
forms seem to slow down the *BROWSER* much more than lots of links.
I didn't say anything about server load, except the bigger the HTML,
the more it takes to send it. IE6 seems to get much slower for
1000 forms vs. 1000 links. Firefox and Mozilla don't slow down as
much, but they still slow down. I suspect it takes more memory to
deal with forms than links and the browser starts paging. In any
case, I don't get to redesign the browsers. Even with an open-source
browser, that takes too much effort.
>>Second, do not put a separate set of buttons against each entry, use a
>>single set for the whole page.
>
> This is WAY too clumsy a user interface for what I want.
> Do you have stock in a medical corporation that treats carpal
> mouse syndrome?

It is not clumsy. I have been using a similar interface on desktop
applications for 20 years and no user has ever complained.

*I* am the primary user of this interface, and *I* am complaining.
I prefer the opinion of all my users over the past 10 years over that of a
lone individual.


You prefer the opinion of people who are *NOT* using the application
over the person that is? I pity anyone you're doing web design for
if you won't pay attention to the requirements for the design.


The people who have used the applications that I have been writing over the
past 10 years have not complained. I ignore the opinions of those who do not
use my software.
This is not a typical user interface: it's for admins, and you can
expect that admins will have privileges and know-how to do anything
the page can do with manually-typed-in SQL. If mass changes are
required, it will probably be easier and safer to use manually-typed-in
SQL. The page is supposed to be for quick entry of simple changes.
If it's not more convenient to use the page than manually-typed-in
SQL, it's useless.

I certainly wouldn't design something like this for the world at
large to use. And that's not who's going to be using it.

> On your page I can only see 10 records at a time, and there's a
> lot of space between them. I'd like to see at least 30.

That's what the "show 10 | show 25 | show 50 | show 100" hyperlinks are
for,
to allow you to set your own page size.

But you still can't see that many on the screen at one time.


If you click "show 50" it changes the page size to 50 lines. Did you
actually try it?


I want to see at least 30 lines on the *SCREEN*. Not the *PAGE*.
I want 30 lines on the *SCREEN* simultaneously.


Whenever I have been asked by a lone individual to fill the screen with as
much data as possible in order to prevent the need to jump to another screen
all the other users reject it for being too "busy". They prefer the data
being presented in reasonably sized chunks rather than great masses.

Thank goodness I will never have to use one of your applications.
Checkboxes and
submit buttons seem to take much more vertical space than they
visually occupy so you can't get that even if you make the font
size way too tiny.
Checkboxes or submit buttons take up too much vertical space, out
of proportion to the actual size of the box or button on the screen,


I think that one checkbox per line and one set of navigation links per
page
is FAR superior to a separate set of navigation links per line. But that's
just my opinion (and the opinion of all my users over the past 10 years.).


They aren't "navigation links", they are things you click on that
DO something.


Then you don't understand the meaning of the term "navigation link". It is a
method of navigating to another script in order to perform a different
action. The current script also passes down any context so that the new
script knows which record to act on.
and I haven't found a way around that even by making the type size
tiny. To make the interface usable, I want to be able to SEE lots
of records at a time.


That's what the "show 10 | show 25 | show 50 | show 100" hyperlinks are
for.
> Without
> scrolling (on a 1024x768 display).

You cannot guarantee that everyone has a screen resolution of 1024x768

I can guarantee that anyone who doesn't is not authorized to use
the application. :-)


So it's not an internet application then?


It does operate over the internet (admins can use it from home).
It most certainly is not intended for general use by the public.
I'll tolerate scrolling if the screen is
smaller, although there aren't that many smaller screens around any
more.
There are still plenty of people using screens at 800 x 600.
But I don't mind scrolling if
> there's hundreds of records. The different sort orders available
> usually put the records I'm interested in at the top.

The column headings are hyperlinks which, when pressed, will cause the
data
to be sorted on that column. I mean ALL the data, not just the data in
the
current page.

Ok, this is much like the pages I have, except I don't try to paginate
them, just put everything on one page. Also, there's a search function
to display a subset of the data.


There's also a search function in my screen. Just press the SEARCH button
and up it pops.

>>Put a checkbox against each entry so that the
>>user may select one or more entries, then when a button is pressed it
>>performs that action against those selected entries. Take a look at
>>http://www.tonymarston.co.uk/sample/person_list.php for an example.
>
> Selecting more than one record at a time is rarely useful for
> my purposes. The idea is to enter updates as needed, not save
> up a whole batch of them and enter them every few days.

It may not be useful for your purposes, but other people find it VERY
useful.

Other people aren't authorized to use this application. User
interface design is not a one-size-fits-all thing: it should be
done with the users who are going to use it, which is not always
the entire world.

It is not about storing updates for several days and then applying
them in a batch.

In your method I suppose you can only select one record at a time in the
LIST screen before you can navigate down to a DETAIL screen. If you then

I want to be able to change the status of a record *WITHOUT* going
to a detail screen. If I want a detail screen, that's what the
EDIT button is for, which allows changing a lot more fields but is
used less often.


Surely a LIST screen is for listing data while an UPDATE screen is for
updating data?


A <whatever you want to call it> screen is for listing data *and*
making quick one-click updates to the status of things. That's
what's needed.


Not in my designs it isn't. A LIST screen is for listing, an UPDATE screen
is for updating, and an INSERT screen is for inserting.
want to move onto another record you have to exit the DETAIL, return to
the
LIST screen, make another selection, then activate the DETAIL screen
again.
Using my method you can select all the records in the LIST screen
(that's
what the "select all" hyperlink is for, by the way) then activate the
chosen
DETAIL screen. This shows you the first record that you selected, but
gives
you scrolling options so that you can scroll forwards and backwards
through
all the records you selected WITHOUT having to return to the LIST
screen.

How do you like THEM apples?

Manually-typed-in SQL is looking better all the time ...

Gordon L. Burditt


If your users are happy to manually type in the SQL to update the database
then why bother trying to write your own user interface at all? Just give
them phpMyAdmin and have done with it.


A well-written (NOT according to your standards, though) page would
allow users to make a set of simple changes (but which comprise a
very large percentage of the changes actually needed in practice)
faster than typing manual SQL. Change the status of something:
call up the page (likely to be bookmarked), then one click to make
the change. You seem to insist that because it's not a suitable
interface for the general public (and I agree, it's not), it
can't/shouldn't be done at all.

Gordon L. Burditt


You design applications your way, and I will continue to design applications
my way.

--
Tony Marston

http://www.tonymarston.net

Jul 23 '05 #22
I noticed that Message-ID: <db*******************@news.demon.co.uk> from
Tony Marston contained the following:
<input class="submit" type="submit" name="task#person_del.php"
value="Delete" />

The advantage of my method is that I do not pass primary keys in URLs as a
security measure.


What's the worst they could do with the primary key?

--
Geoff Berrow (put thecat out to email)
It's only Usenet, no one dies.
My opinions, not the committee's, mine.
Simple RFDs http://www.ckdog.co.uk/rfdmaker/
Jul 23 '05 #23

"Geoff Berrow" <bl******@ckdog.co.uk> wrote in message
news:qr********************************@4ax.com...
I noticed that Message-ID: <db*******************@news.demon.co.uk> from
Tony Marston contained the following:
<input class="submit" type="submit" name="task#person_del.php"
value="Delete" />

The advantage of my method is that I do not pass primary keys in URLs as a
security measure.


What's the worst they could do with the primary key?


Submit a request using the primary key of a record which they are not
authorised to access. This would be a HUGE security flaw.

--
Tony Marston

http://www.tonymarston.net

Jul 23 '05 #24
Correct me if I am wrong, Gordon, but as I understand it, what you want
is, effectively, a "what you see is what there is" type of editor for a
database, similar to the notion of Excel (where you might have to do a
final save to commit). The idea of having to select a row, then bring
up a form for it, then edit it, then commit it, is way too slow. Too
many mouse clicks, too much waiting (for page loading), too much
distraction as pages change. If so, I concur - in the situation where
a user is allowed wholesale access to the database (or significant
subportion thereof), it would be far more efficient to be able to make
direct edits.

I implemented something like this a year ago (only an alpha version,
but I still use it). However, I do not share your aversion to
javascript usage. What I have done is to return (a portion of) the
database, which I display in an HTML table. Fields are either freely
changeable, grudgingly changeable (computed fields such as Ids) in
gray, or not changeable (derived values). As you change a field (which
is really a textarea or text input element within a TD), onChange
scripts highlight the entry in red, if it has changed. There are
additional considerations such as the maximum number of lines to allow
a field to expand to. At any rate, once a line has been suitably
modified, the user clicks on a small Insert or Append button that
appeared as that record started to be edited (which buttons have an
accessKey set, of course. In the case of Insert, the gray fields don't
get submitted). The values for the line being edited are collected and
posted via an IFrame. The database signals back to the IFrame whether
there was a problem or not, and a <body onload=...> from the IFrame
causes that row to be suitably refreshed. Saves me a huge amount of
time.
However, if you are insistent on staying with no javascript, can't you
do something like the following where you can make that POST button
look like a link with something like:
<form method=post action="showInfo.php" name=myform>
<input type=hidden name='foo' value='bar'>
<button name=tryme value=hitme
style="border:0px solid red;background-color: white"
accessKey='s' type='Submit'><u>S</u>ubmit</button>
</form>
</body>
For showinfo.php I just had
<?php phpinfo(); ?>
Upon rereading your post, I see that you only want to take prescripted
actions. The method I outlined just above does not require hidden
fields, and all the action is encoded (by virtue of identifying the
recordId and action in the single value=... of the <button ...>. Only
one form is necessary, not many. And as shown, by using style sheets
(the generalization of the style="..." line) you can make the button
seem like a gainly link.

Csaba Gabor from Vienna

Jul 23 '05 #25

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

5
by: mic | last post by:
I've spent last hour trying to debug my code, when I found out that instead of executing object's method I accidentaly overridden it with variable (see below example). My stupid! But as the system...
12
by: Stephen Ferg | last post by:
I've just spent several very frustrating hours tracking down a bug in one of my programs. The problem was that I was writing text to a file, and when I was done I coded f.close when I should...
0
by: Erick | last post by:
Hi, Does any one know how to avoid to register of the event log source by the TransactedInstaller object? I have a service which have some code into the main method to self-register base on...
12
by: Steve Jorgensen | last post by:
Since reading values from calculated controls in Access 2000 and 2002 from code has proven unrliable at best, and since I like to avoid running separate queries to calculate sums of subform records...
1
by: Jack Addington | last post by:
1) I have created a visual control that relies on a logic class to do much of its work. 2) The logic class will be assigned on the form through a register method. 3) I have a public property for...
19
by: Charles Law | last post by:
Take a solution with a project hierarchy along the lines of an n-tier system, so that we have a data layer, business layer and presentation layer. The presentation layer is coupled to the business...
0
by: VeeraLakshmi | last post by:
I am doing a project for internet control using Java,PHP and MySql.All sites should go through the proxy server only.We are giving access rights as allow or deny to the sites.If we type the...
15
by: Lloyd Dupont | last post by:
I have some code which looks like that: public CornerStyle RectCornerMode { get { return this.GetValue<CornerStyle>(); } set { this.SetValue<CornerStyle>(value); } }
11
Niheel
by: Niheel | last post by:
http://bytes.com/images/howtos/information_overloaded.jpgPaul Graham wrote an interesting article a few months back about how the internet is leading to information overload for information workers...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.