Php 如何检查表中的两行,确保它们的值在其他行中不重复
假设我有一个名为Php 如何检查表中的两行,确保它们的值在其他行中不重复,php,mysql,Php,Mysql,假设我有一个名为服务的表: 我做了一个表格来更新这个表格: <form action='' method='POST'> <div class='box box-default'> <div class='box-header with-border'> <h3 class='box-title'><span style='color:blue'><span>".$
服务的表:
我做了一个表格来更新这个表格:
<form action='' method='POST'>
<div class='box box-default'>
<div class='box-header with-border'>
<h3 class='box-title'><span style='color:blue'><span>".$home['name_service']."</span></h3>
<div class='box-tools pull-right'>
<button type='button' class='btn btn-box-tool' data-widget='collapse'><i class='fa fa-minus'></i></button>
</div>
</div>
<div class='box-body'>
<div class='row'>
<div class='col-md-6'>
<div class='form-group'>
<label for='ser'>Name of Service:</label>
<input name='sname' type='text' class='form-control' value='".$home['name_service']."'>
</div>
<div class='form-group'>
<label for='ser'>Background Color of Box:</label>
<input name='bgbox' type='text' class='form-control' value='".$home['bg_box']."'>
</div>
<div class='form-group'>
<label for='ser'>Description of Service:</label>
<input name='sdesc' type='text' class='form-control' value='".$home['desc_service']."'>
</div>
<div class='form-group'>
<label for='ser'>Link of Service:</label>
<input name='slink' type='text' class='form-control' value='".$home['link_service']."'>
</div>
</div>
</div>
</div>
<p>
<button name='update' type='submit' class='btn btn-success btn-lg'>Update</button>
<button type='button' class='btn btn-danger btn-lg'>Delete</button>
<input type='checkbox' name='showing'><label for='showing'> Hide from showing</label></br>
</p><hr></hr>
</div>
</form>
下面是我调用的CheckSname2()
方法:
public function CheckSname2($servicename,$backgroundbox,$servicedesc,$servicelink)
{
if(!empty($servicename)&&!empty($backgroundbox)&&!empty($servicedesc)&&!empty($servicelink))
{
$chk1 = $this->_db->prepare("SELECT name_service FROM homepage WHERE name_service = ?");
$chk1->bindParam(1,$servicename);
$chk1->execute();
if($chk1->rowCount() == 1)
{
$notice['service_name'] = "Try different service name";
return $this->notice;
}else{
$chk2 = $this->_db->prepare("SELECT link_service FROM homepage WHERE link_service = ?");
$chk2->bindParam(1,$servicelink);
$chk2->execute();
if($chk2->rowCount() == 1)
{
$notice['service_link'] = "Try different page url";
return $this->notice;
}else{
$this->UpdateService($servicename,$backgroundbox,$servicedesc,$servicelink);
$notice['success_message'] = "New service was successfully added";
return $this->notice;
}
}
}
}
如您所见,基本上我希望用户插入一个在任何其他行都不重复的name\u服务
。如果不是,那么该方法也会检查链接服务。如果这两种方法不重复,它将调用UpdateService()
方法
现在问题来自表单的这两个输入,我从属于用户的表中检索当前数据:
<input name='sname' type='text' class='form-control' value='".$home['name_service']."'>
<input name='slink' type='text' class='form-control' value='".$home['link_service']."'>
例如,如果当前的name\u服务
是banana,而link\u服务
是banana-place,并且用户将banana-place更改为其他任何内容,则不会更新该表,因为CheckSname2()
方法也会从表中检查name\u服务
。由于该值尚未更改,因此返回错误
现在,我希望此方法检查,如果用户键入属于其他用户的任何其他name\u服务
或link\u服务
,是否返回自定义错误消息,否则它必须更新表,即使用户更改了一个字段
注意:UpdateService()
方法只需更新表即可正常工作,因此无需将其包括在内。如果我理解正确,您需要检查名称服务
和链接服务
的组合是否唯一。
对此的一个简单检查是使用一个要求两者都存在的WHERE
子句运行select查询
SELECT table_id FROM table
WHERE name_service = "banana"
AND link_service = "banana_link"
LIMIT 1
如果此查询返回任何结果(rowCount()==0
)。组合是唯一的,您可以继续更新或插入
否则,组合确实存在,您可以简单地发送消息:此组合已经存在。更改名称或链接以便如果我是正确的,两列中只有一列必须是唯一的<代码>香蕉+香蕉链接
不同于香蕉+梨链接
,不同于菠萝+香蕉链接
?还有菠萝+梨链接也可以吗?
SELECT table_id FROM table
WHERE name_service = "banana"
AND link_service = "banana_link"
LIMIT 1