【问题标题】:php POST form query update dynamic variablephp POST表单查询更新动态变量
【发布时间】:2017-04-04 03:06:27
【问题描述】:

我有这个表格

<form method="post" action="process.php">
    Name: <input type="text" name="name" value="">
    <br />
    English: <input type="text" name="english" value="">
    <br />
    French: <input type="text" name="french" value="">
    <br />
    <input type="submit" name="submit" value="Submit">  
</form>

我们在 process.php 上进行查询

$query = "
        UPDATE
        `translations_structure`
        SET
        `updated_on` = '".time()."',
        `english` = '".utf8_encode($english)."',
        `french` = '".utf8_encode($french)."'
        WHERE
        `id` = '".$id."'";

如果我编辑表格语言并添加更多语言,表单将动态修改为让我们说这个例子

<form method="post" action="process.php">
    Name: <input type="text" name="name" value="">
    <br />
    English: <input type="text" name="english" value="">
    <br />
    French: <input type="text" name="french" value="">
    <br />
    Spanish: <input type="text" name="spanish" value="">
    <br />
    German: <input type="text" name="german" value="">
    <br />
    <input type="submit" name="submit" value="Submit">  
</form>

我需要动态编辑的查询

$query = "
        UPDATE
        `translations_structure`
        SET
        `updated_on` = '".time()."',
        `english` = '".utf8_encode($english)."',
        `french` = '".utf8_encode($french)."',
        `spanish` = '".utf8_encode($spanish)."',
        `german` = '".utf8_encode($german)."'
        WHERE
        `id` = '".$id."'";

我不明白的是我如何在查询代码中动态地做到这一点

*表单域的名称与变量 i POST 的名称相同
*并且表中列的名称与 POST 的名称相同

    `english` = '".utf8_encode($english)."',
    `french` = '".utf8_encode($french)."',
    `spanish` = '".utf8_encode($spanish)."',
    `german` = '".utf8_encode($german)."',
    `other_language` = '".utf8_encode($other_language)."',
    `other_language2` = '".utf8_encode($other_language2)."'

上面我已经解释了我是如何进行查询的,但我无法理解如何编写变量

我知道我需要什么有点困难,但也许有人明白我需要什么

谢谢

此行上方是已编辑的消息,因为有人标记此消息已回答





我将首先解释我想要做什么:

我有一个名为“翻译”的表,用于存储语言。例如:英语、法语、西班牙语等
我使用一个表单来更新新值,问题是我想动态地做,不要手动在每个 php 文件上插入这个查询,因为语言表会增长或编辑,我想动态工作而不是编辑每个 php 文件.
变量名称与数据库中的字段名称相同 我设法为表格翻译上的名称制作了一个数组

这就是我到现在为止让它变得动态的东西 问题是我不知道如何在查询 $_POST['english']、$_POST['french'] 等中插入变量

$db = new DB();
$query = $db->query("SELECT * FROM `translations_languages` ORDER BY `name` ASC");
while($row = $query->fetch_assoc()){
    $values[] = "`{$row['name']}` = '{$row['name']}'";
}

    $dynamic_result = "".strtolower(implode(",", $values))."";
    $query = "
    UPDATE
    `translations_structure`
    SET
    `updated_on` = '".time()."',
    $dynamic_result
    WHERE
    `id` = '".$id."'
    ";

echo "$query";

这就是查询的正常外观

$query = "
            UPDATE
            `translations_structure`
            SET
            `updated_on` = '".time()."',
            `english` = '".utf8_encode($english)."',
            `french` = '".utf8_encode($french)."',
            `spanish` = '".utf8_encode($spanish)."'
            WHERE
            `id` = '".$id."'";

我想将这些值添加到查询中

`english` = '".utf8_encode($english)."',
`french` = '".utf8_encode($french)."',
`spanish` = '".utf8_encode($spanish)."'

【问题讨论】:

    标签: php mysql forms variables dynamic


    【解决方案1】:

    您只需要创建一个动态更新数组。像这样的:

    $languagesToUpdate = array();
    
    // this is an example, you should modify as your script:
    
    // create a variable/constant to make sure you update only allowed fields
    $allowedLanguages = array('english' => true, 'french' => true, 'spanish' => true, 'german' => true, 'other_language' => true);
    
    // iterate threw post and check for allowed languages and add to languagesToUpdate the language we need to update with it's value
    foreach ($_POST as $post => $value) {
        if (isset($allowedLanguages[$post]) && $allowedLanguages[$post]) {
            $languagesToUpdate[] = '`' . $post . '` = "' . utf8_encode($value) . '"';
        }
    }
    
    // add additional data like updated_on
    $languagesToUpdate[] = '`updated_on` = ' . time() . '';
    
    //update database
    $db = 'UPDATE `translations_structure` SET '.implode(', ', $languagesToUpdate).' WHERE `id` = '.(int)$id;
    
    // this will produce something like this:
    // UPDATE `translations_structure` SET `english` = "English text", `spanish` = "Spanish text", `updated_on` = 1479720637 WHERE `id` = 1
    

    【讨论】:

    • 谢谢你,Mihai 我还想做一件事。假设我列出了像这样的可用语言
      $db = new DB(); $query = $db->query("SELECT * FROM translations_languages ORDER BY name ASC"); while($row = $query->fetch_assoc()){ $values[] = $row['name']"; }

      我可以使这些值具有真正的键并将它们添加到到一个数组,像这样 $allowedLanguages = array('english' => true, 'french' => true, 'spanish' => true, 'german' => true, 'other_language' => true);
      将是动态的
    • 是的,您可以完全像 $allowedLanguages[$row['name']] = true; 那样添加,而不是像我那样定义它们。
    猜你喜欢
    • 2020-03-30
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    • 2011-05-09
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多