0

我已经为一个旧的Joomla站点进行了数据库更新查询,它看起来像下面的代码。当然这只是一个例子。实际查询包含 50 。我想做的是让它“更小”。换句话说,我怎样才能让它使用or而不是一一写?我只是无法弄清楚语法...name_xforwhilename_x

if (isset($_POST['button_save']) or isset($_GET['button_save'])){
    $gmdb = & JFactory::getDBO();
    $update_query = "UPDATE jos_tablename
                        SET id     = '".$_POST["id"]."',
                            name_1 = '".$_POST["name_1"]."',
                            name_2 = '".$_POST["name_2"]."',
                            name_3 = '".$_POST["name_3"]."',
                            name_4 = '".$_POST["name_4"]."',
                            name_5 = '".$_POST["name_5"]."',
                            name_6 = '".$_POST["name_6"]."'
                      WHERE id     = 'something'";
    $gmdb->setQuery($update_query);
    $gmdb->query();}
4

2 回答 2

0

查询只是一个字符串。你可以像其他任何东西一样在循环内构建它。检查以下示例。

请注意,将未转义的 POST 数据添加到查询中是一种非常非常糟糕的做法。

$set_array = array(
    // In real world you must escape POST data!
    "id = '".$_POST["id"]."'" 
);
for ($i = 1; $i < 100500; $i++) {
    // In real world you must escape POST data, check that it exists, etc.
    $set_array[] = "name_".$i." = '".$_POST["name_".$i]."'";
}
$update_query = "UPDATE jos_tablename SET ".join(', ', $set_array)." WHERE id = 'something'";
$gmdb->setQuery($update_query);
$gmdb->query();
于 2013-09-22T10:46:48.083 回答
0

对于初学者来说,这是更新数据库中信息的一种非常不安全的方式,其次是在 html 页面名称上的所有输入字段name="name[]",因此它们作为数组发送,您可以简单地使用foreach($_POST["name"] as $array)

于 2013-09-22T10:10:21.677 回答