我正在尝试使用foreach循环将值插入数据库。
一切正常,但是数组的最后一个元素被插入了两次。
我知道即使在foreach循环之后,对$photo
和最后一个数组元素的引用仍然保留。
我正在尝试使用unset($photo)
销毁它,但这似乎并没有工作时,我仍然在数据库的最后一个元素中两次插入。
有人可以向我解释吗?
// value of $photos
<?php
$stmt = $conn->prepare(
"SELECT p.*, pt.propertyType
FROM tbl_property p
JOIN tbl_propertyType pt USING (PropertyType_Id)
ORDER BY Price;"
);
$stmt->execute();
?>
<form id = "prop-form" action="../scripts/photo-property.php" method = "POST" enctype="multipart/form-data">
<select name="property">
<?php while($row = $stmt->fetch()){ ?>
<option value="<?php echo $row['Property_Id'];?>"><?php echo $row['propertyType'] . ', ' . 'Price: ' . $row['Price'] . ', ' . $row['BuildingNameStreetNo']
. ', ' . $row['Street'] . ', ' . $row['Town'] . ', ' . $row['Condition']
. ', ' . $row['RoomNo'] . ' Rooms'; ?></option>
<?php } ?>
</select>
<?php $sql = $conn->prepare("SELECT * FROM tbl_Photo");
$sql->execute();
while($row = $sql->fetch()){
echo '<img class="propimg" src=../photos/'. $row['Photo'] . '><br/>';
echo '<input type="checkbox" name="photos[]" value="'. $row['Photo_Id'] . '">';
}
?>
</form>
-------------
// DIFFERENT FILE
// assign the array values from the form
$photos = $_POST['photos'];
// for each photo, bind the param and execute the query
$sql = $conn->prepare("INSERT INTO tbl_propertyphoto (Property_Id, Photo_Id) VALUES (:prop, :photo)");
foreach($photos as $photo) {
$sql->bindParam(':prop', $_POST['property']);
$sql->bindValue(':photo', $photo);
$sql->execute();
}
unset($photo);
答案 0 :(得分:1)
检查您的tbl_Photo
表是否没有多个相同的行。
尝试使列Property_Id
和Photo_Id
唯一在一起。
这样一来,您就无法两次拥有相同的组合。
ALTER TABLE tbl_propertyphoto ADD CONSTRAINT UQ_Property_Photo UNIQUE(Property_Id, Photo_Id)