Determining Database Field Lengths
Here's the scenario: You've set up your database and now you're building your web page to display the information. You have a text field that stores a city name. In the database you've specified the maximum length to 50 characters. In HTML, you add on your maxlength
attribute and specify it as 50. An easier way would be to have it automatically "know" what the length was.
In ASP, you can do this using the DefinedSize
property of the field. For example, <input type="text" name="myfield" value="<%=rs("fieldname")%>" maxlength="<%=rs("fieldname").DefinedSize%>" >
You can do the same thing in PHP but it's a little more complicated. Here's an example: $length = mysql_field_len($rs, 0);
The problem here is that you can only pull out one field length at a time and only using an index. The index being the order that the field names are specified in the SELECT
. Therefore, it might be easier to loop through and copy all the field names and their lengths into an associative array.
Conversation
That's an interesting technique. I like to make my database fields a little larger than the maxlength, in case any quotes or other characters need to be escaped for one reason or another. You could always pull the field size out, subtract some number (say 10 characters) from it, and print that as your field size.
I was surprised that escaping would have any effect on field length so I did a quick test and confirmed that it doesn't. At least it doesn't in MySQL 4.1.9 or MS SQL Server 2000. I'd suspect all database servers to be similar.
Therefore '123456789''' would be 10 characters long and not 11.
You'll have to check if the text field is not too long after submitting the form. Everyone can easily remove maxlenghts.
In no way should this post be construed as a way of avoiding proper form validation. But as in the maxlength example, you could use the DefinedSize property or the mysql_field_len function to assist in form validation.
I suppose you could also issue a 'DESCRIBE' query and then parse the results in the Field and Type columns. Although that's kind of hackish.