我为旧的 Joomla 网站制作了数据库更新查询,它看起来像下面的代码。当然这只是一个例子。真实查询包含50 name_x
。我想做的是让它“更小”。换句话说,如何使用for
或while
为name_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();}
答案 0 :(得分:0)
对于初学者来说,这是一种非常不安全的方式来更新数据库中的信息,其次是html页面名称所有输入字段name="name[]"
所以它们作为一个数组发送,你可以简单地循环使用foreach($_POST["name"] as $array)
答案 1 :(得分: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();