使用隐藏字段更新数据库中的数据

时间:2016-04-30 04:34:20

标签: php html5 forms crud

所以我有一个包含从数据库中检索的数据的html表。在每一行中都有一个"编辑"按钮。它看起来像这样:

private Document doc;
private ArrayList<String> list = new ArrayList<>();

@Override
protected void onCreat(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_data_mining);

    Thread downloadThread = new Thread() {
        public void run() {
            try {
                doc = Jsoup.connect("http://thewebsite.html").get();

                Elements table = doc.select("table"); 
                Elements rows = table.select("tr");

                for (int i = 0; i < rows.size(); i++) { 
                    org.jsoup.nodes.Element row =  rows.get(i);
                    Elements cols = row.select("td");

                    list.add(cols.get(i).text());
                }

                runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            setListAdapter();
                        }
                    }
                );
            }
            catch (IOException e) {
                e.printStackTrace();
            }
        }
    };
    downloadThread.start();
}

private void setListAdapter() {
    ArrayAdapter<String> adapter = new ArrayAdapter<>(this, R.layout.datalayout, list);
    ListView view = (ListView) findViewById(R.id.dataListView);
    view.setAdapter(adapter);
}

然后在控制器/编辑页面中,我将再次访问数据库:

<td><form action="controller/edit" method="post">
    <input type="hidden" name="id" value="<?php echo $id ?>">
    <input type="submit" value="edit">
</form></td>

这一切都很好。但是,我正在避免第二次访问数据库以提高性能。我想做这样的事情:

select * from table where id=$_POST['id']

这样来自行的所有数据都在表单中,因此当表单提交到控制器/编辑时,我不需要再次访问数据库。这种做法好吗?或者这是不好的做法吗?

2 个答案:

答案 0 :(得分:1)

你提到的第二个看起来似乎是一个捷径,但它可能是脆弱的。

隐藏的字段很容易被篡改。例如,用户可以操纵隐藏字段的值并将值更改为随机数,如975646456456456.

在这种情况下,您的数据库插入不正确,因为可能没有与id 975646456456456对应的匹配记录。

所以,我认为你应该使用第一个并检查数据库是否存在,并获取其记录。

答案 1 :(得分:-1)

尝试使用.replace(/\n/g, "\r\n")提交。例如提交表单:

jquery.button