Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为动态数据库创建更新查询_Php_Mysql_Forms_Post - Fatal编程技术网

Php 为动态数据库创建更新查询

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}'"; } 问题是数据库是动态的,用户可以随时添加列。所以

我正在尝试更新mysql数据库中的一行。为此,我将使用以下简单查询:

    "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"