|
Posted by totalstranger on 09/26/05 07:44
On or about 9/25/2005 4:03 PM, it came to pass that phpuser32423 wrote:
> Hi everyone
>
> Is it by any chance possible to use mysql and php to auto create the
> content for drop-down lists on forms by retrieving the values from a
> database? The reason i ask is that on a site i am making i am asking
> users to select from list (e.g. nationality) however i would like to
> avoid typing out every possible value of which there are about 40
> (which change). I would much prefer to keep a seperate table in my
> database for the site.
>
> Kind regards
>
> Mcyi2mr3
>
You did not say it but this code assumes you are using MySql Enum or Set
fields.
The following php script I wrote will take an Enum or Set field from a
table,creates a Select box or Check Boxes, and could be easily expanded
to have a Select Multiple or whatever you need. It will optionally sort
the field names and set selected elements from the corresponding
database data field. I'm fairly new at PHP and cobbled this together
from various other scripts I found on the net for use on my website. I
am certain someone can find ways to do it better, more elegantly or find
fault with the code, but this works for me. However if you do find a
serious fault please post it in this group.
Apologies for the messy indentation it's caused by the very poor
interaction of my text editor and e-mail program.
$table = Table name
$field = Enum or Set field in $table
$type = select or whatever (defaults to check box)
$data = field value (optional the data from field in table)
$sort = yes or no (sort options ascending)
$title = optional; null first field for a select
<?php
function DrawFromDB($table,$field,$type,$data="",$sort="yes",$title="")
{
//connect to DB;
$query=mysql_query("SHOW COLUMNS FROM ".$table." LIKE
'".$field."'") or die (mysql_error());
if(mysql_num_rows($query)>0)
{
$row=mysql_fetch_row($query);
$options=explode("','",preg_replace("/(enum|set)\('(.+?)'\)/","\\2",$row[1]));
if ($sort =="yes")
sort ($options);
$ARay = explode(",",$data);
}
switch ($type)
{
case "select":
$text="\n\n<select name='". $field ."'>\n";
if ($title > "")
$text.="<option value=\"\">" . $title . "</option>\n";
for ($i=0;$i<count($options);$i++)
{
$selected = NULL;
if ($data == $options[$i])
$selected ="SELECTED ";
$text.="<option " . $selected .
"value=\"".$options[$i]."\">".ucfirst($options[$i])."</option>\n";
}
$text.="</select>\n\n";
break;
default:
$text="\n";
for ($i=0;$i<count($options);$i++)
{
$checked=NULL;
for ($j=0;$j<count($ARay);$j++)
{
if ($ARay[$j] == $options[$i])
$checked=" CHECKED ";
}
$text.="<INPUT TYPE='checkbox'" . $checked . " NAME='" . $field."[]'
VALUE='". $options[$i] . "'>".ucfirst($options[$i])." \n";
}
$text.="\n";
break;
}
return $text;
}
?>
[Back to original message]
|