我创建了一个 PHP 函数,它将为您在数据库中的任何表创建一个表单。此功能允许您指定表格的名称和您想要在 html 表单中的所有列的列表。如果用户在文本输入中输入内容,一切都很好。如果他们不这样做,那么在尝试检索列名时会发生奇怪的事情。请看下面的功能...
function generateSubmissionFromTable($db, $tablename, $rowstoinclude,$action)
{
$query = 'SHOW COLUMNS from '.$tablename;
$colsresult = mysql_query($query,$db);
$table = array();
while($row = mysql_fetch_array($colsresult))
{
array_push($table,$row[0]);
}
$finalcolumns = array();
foreach($table as $row)
{
foreach($rowstoinclude as $inc)
{
if($row == $inc)
{
array_push($finalcolumns,$row);
}
}
}
echo '<form name="loginy" method="post" action="'.$action.'">';
foreach($finalcolumns as $column)
{
echo 'Please enter the '.$column.'<br/>';
echo '<input type=text name=column['.$column.'] value="blah"/><br/>';
}
echo '<input type="hidden" name="tablename" value="'.$tablename.'" />';
echo '<button type="button" size="4" style="font-size:35px;" onClick="document.loginy.submit()">Submit</button>';
echo '</form>';
}
现在,奇怪的部分来了……我有另一个函数,它将根据自动生成的表单生成查询语句。
function submitDataToTable($post)
{
$query = 'INSERT INTO '.$post['tablename'].'(';
$buf = "";
while($col = current($post['column']))
{
$query = $query.$buf.key($post['column']);
$buf=",";
next($post['column']);
}
$buf = "";
$query = $query.') VALUES (';
foreach($post['column'] as $val)
{
$query = $query.$buf.$val;
$buf = ",";
}
$query = $query.')';
echo 'QUERY='.$query;
}
例如,现在我有一个表,我想输入 3 列(名称、链接、描述),我填写顶部 2 而不是底部,查询生成如下......
QUERY=INSERT INTO LinksWebsites(name,link) VALUES (blah,blah,)
如您所见,查询缺少列(名称,链接,描述),但是如果您看一下帖子,那会很奇怪...
POST =Array ( [column] => Array ( [name] => blah [link] => blah [description] => ) [tablename] => LinksWebsites )
它显示了所有的键,但是我提取键的 PHP 方法没有显示所有的键!(可能与 current($array) 和 key($array) 调用有关?)