Php 为动态数据库创建更新查询
我正在尝试更新mysql数据库中的一行。为此,我将使用以下简单查询:Php 为动态数据库创建更新查询,php,mysql,forms,post,Php,Mysql,Forms,Post,我正在尝试更新mysql数据库中的一行。为此,我将使用以下简单查询: "UPDATE `contactinfo` SET `Company` = 'Google', WHERE `id` = '1';" foreach($_POST['field'] as $field_name => $field_value) { $sql_str[] = "{$field_name} = '{$field_value}'"; } 问题是数据库是动态的,用户可以随时添加列。所以
"UPDATE `contactinfo` SET `Company` = 'Google', WHERE `id` = '1';"
foreach($_POST['field'] as $field_name => $field_value) {
$sql_str[] = "{$field_name} = '{$field_value}'";
}
问题是数据库是动态的,用户可以随时添加列。所以我不知道这些栏目的名称。要查找名称并创建表单以发布到实际执行mysql工作的页面,请使用以下代码:
<?php
$result = mysql_query("select * from contactinfo WHERE `id` = '".$rid."';");
if (!$result) {
die('Query failed: ' . mysql_error());
}
$i = 0;
while ($i < mysql_num_fields($result)) {
$meta = mysql_fetch_field($result, $i);
if (!$meta) {
echo "ERROR";
}
$name = $meta->name;
$r = mysql_fetch_array(mysql_query("select * from contactinfo WHERE `id` = '".$rid."';"));
$content = $r[$name];
if($name != 'id') {
echo "<tr><td align='center'><div align='left'>Edit ".$name."</div></td></tr>";
echo "<tr><td align='center'><input type='text' value='" . $content . "' /></td></tr>";
}
$i++;
}
mysql_free_result($result);
?>
您可以在数据库中添加一个带有位标志的列,如果用户是新用户或旧用户,该标志将反映它。
这样,您就可以更新用户,告诉他们是新的还是旧的
希望这能有所帮助。最简单的方法是以数据库中字段名称的正确形式命名字段。
假设你有这个表格
<form action="">
<input name="field[firstname]">
<input name="field[lastname]">
<input name="field[address]">
</form>
这只是通过来自post的“field”数组,并将适当的更新文本放入另一个数组中。
那就做一个
mysql_query("UPDATE contactinfo SET ".implode(',', $sql_str)." WHERE `id` = '".$rid."';")
将其放入数据库。您最好调查一下是否有可以使用的ORM框架
无论如何,最简单的方法就是在INPUT
字段中传递字段名
$content = AddSlashes($content); // You may need HTMLEntities() here
$field = <<<FIELD
<input type="text" value="$content" />
FIELD;
…这就是dragons ORM框架。我试图编写一个while循环来获取POST,并为它们提供所有相关变量,但失败了,因为我不知道在$\u POST['name']@Ian34中使用什么-记住$\u POST只是一个关联数组,所以您可以获取所有键(字段名)即使你不知道它们是什么。像这样foreach($\u POST as$key=>$value)
Wow,这非常有效。我决不会那样做的。谢谢我建议您使用一个框架,它可能会让您更容易:)。有一些好的会对你有很大帮助。
if ('id' == $meta->name or 'pk' == $meta->name or (0 === strpos($meta->name, 'pk_')))
{
// This is a primary key field
$html .= <<<PKFIELD
<input type="hidden" name="{$meta->name}" value="{$contents}" />
PKFIELD;
continue;
}
if (0 === strpos($meta->name, 'hf_'))
{
// hidden field, ignored (can't be changed)
continue;
}
if (0 === strpos($meta->name, 'ro_'))
{
// read-only field, shown but without even the name
$html .= <<<ROFIELD
<input type="text" readonly="readonly" class="readonly" value="{$contents}" />
ROFIELD;
continue;
}
$fieldtpls = array(
'pk_' => '<input type="hidden" name="{NAME}" value="{VALUE}" />',
'ta_' => '<textarea name="{NAME}">{VALUE}</textarea>',
'ro_' => '<input type="text" value="{VALUE}" readonly="readonly" />',
);
table field type rw parameters
users name text yes
users id hidden no
users role text no
users notes area yes class:"widearea"