我有一个显示此人个人信息的表单
<form>
<input type="text" name="per_name" id="name_1"/>
<input type="text" name="per_mail" id="email_1"/>
<input type="text" name="per_phone" id="phone_1"/>
</form>
现在,当我提交此表单时,将调用数据库的更新查询,如:
if($_POST['name']!=['name from db']){
$sql = "update table_1 set name=? where int_id=?";
}
通过这种方式,我必须编写三个不同的更新查询。但我希望更新查询应该基于验证提供的值是否与DB中已存在的值不同而生成。
请在这里指导。
答案 0 :(得分:3)
您可以解决此问题的一种方法是在数据库中进行一些更改。
实际上,名称可以重复,但您不能拥有2个不同的人(名称)使用的相同电子邮件地址,所以放一个电子邮件地址列的唯一索引约束。
然后,使用 Replace INTO :
,而不是更新$sql = "REPLACE INTO table_1 (name,email,phone) VALUES ({$_POST['per_name']},{$_POST['per_mail']},{$_POST['per_phone']})";
来自文档:
REPLACE的工作原理与INSERT完全相同,只是如果在一个旧行中 table与PRIMARY KEY或UNIQUE的新行具有相同的值 index,在插入新行之前删除旧行。
在上述情况下,如果用户尝试输入相同的电子邮件ID,则会更新,如果是新的电子邮件ID,则插入< / em>的
答案 1 :(得分:2)
这可以使用一个更新查询在一个查询中完成:
$sql = "update table_1 set name=?, mail=?, phone=? where int_id=?";
不需要3个不同的查询
并且对于验证,您可以使用
$name = $_POST['per_name'];
$mail = $_POST['per_mail'];
$phone = $_POST['per_phone'];
$qry = array();
if($name !== ['value from db'])
$qry[] = 'name=?';
if($mail !== ['value from db'])
$qry[] = 'mail=?';
if($phone !== ['value from db'])
$qry[] = 'phone=?';
if(count($qry) > 0) {
$qry = implode(', ', $qry);
$updateQuery = "update table_1 set " . $qry . " where int_id=?";
// Execute your query here
}