我有6个同名输入
<div class="col-sm-4">
<input type="text" name="features[] value="Feature 1">
<input type="hidden" name="feature_id[]" value="1">
</div>
.........
某些输入可能具有一些值,然后其中一些可能为空。
我想更新值,但是如果输入为空,我想插入它
我知道这样做可以变得容易,然后我尝试这样做。在我下面的例子中
我遍历来自$ _POST的数组值,尝试更新值,但是如果行数为0,我正在执行插入查询。问题是当我插入新值时,也会插入非空输入值。
所有$ _POST数据都保存在$featuresData
数组中
这是我的代码
ProperyData.php
public function propertyData() {
$featuresData = [
"Features" => $_POST['features'],
"FeatureId" => $_POST['feature_id']
];
return $data;
)
file.php
$data = new PropertyData();
$featuresArr = $data->propertyData()['featuresData'];
for($i = 0; $i < count($featuresArr['Features']); $i++) {
$update_features = "UPDATE features SET Feature_Title= :Feature WHERE idFeature = :id";
$this->db->query($update_features);
$this->db->bind(':Feature', $featuresArr['Features'][$i]);
$this->db->bind(":id", $featuresArr['FeatureId'][$i]);
$this->db->execute();
if($this->db->rowCount() == 0) {
$insert_features = "INSERT INTO features (Feature_Title, Appartment_ID) VALUES (:Feature, :id)";
$this->db->query($insert_features);
if(!empty($featuresArr['Features'][$i])) {
$this->db->bind(':Feature', $featuresArr['Features'][$i]);
$this->db->bind(":id", $id);
$this->db->execute();
}
}
}
答案 0 :(得分:0)
当您将表单数据存储在$featuresData
数组中并尝试在$featuresArr
上循环时。您应该在上面循环播放。
$featuresData = [
"Features" => $_POST['features'],
"FeatureId" => $_POST['feature_id']
];
更改为:
for($i = 0; $i < count($featuresData['Features']); $i++) {
}
,字段为:
$featuresData['Features'][$i]
$featuresData['FeatureId'][$i]
查看您输入的输入字段名称。
<input type="text" name="features[]" value="Feature 2">
<input type="hidden" name="feature_id[]" value="2">
注意:您将表单数据存储在$featuresData
数组中。您应该在上面循环播放。
对于非空值,您应该在循环插入数据之前设置条件:
if(empty($featuresData['Features'][$i]) && empty($featuresData['FeatureId'][$i])){
// insert data query
}else{
// update data query
}
答案 1 :(得分:0)
我看到两种解决方案。
首先,您可以选择SELECT ...(如果存在),更新,如果不存在,则插入。
第二,也许您可以扭转您的想法,然后尝试INSERT ...在重复键更新上...但是,仅当至少一个值(可能是Appartment_ID吗?)的值是UNIQUE(可能是主键)时,这才有效>
INSERT INTO features (Feature_Title, Appartment_ID) VALUES (:Feature, :id)
ON DUPLICATE KEY UPDATE Feature_Title=values(Feature_Title)
答案 2 :(得分:0)
您可以使用ON DUPLICATE KEY UPDATE
功能,进行以下操作:
$update_features = "INSERT INTO `features` (`idFeature`, `Feature_Title`) VALUES (:id, :Feature) ON DUPLICATE KEY UPDATE `Feature_Title` = :Feature";
$this->db->query ( $update_features);
$this->db->bind ( ":Feature", $featuresData['Features'][$i]);
$this->db->bind ( ":id", $featuresData['FeatureId'][$i]);
$this->db->execute ();
如果您需要更多信息,请参阅MySQL ON DUPLICATE教程。