PHP foreach循环两次将最后一个元素插入两次

时间:2019-12-11 14:30:32

标签: php pdo foreach

我正在尝试使用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); 

1 个答案:

答案 0 :(得分:1)

检查您的tbl_Photo表是否没有多个相同的行。

尝试使列Property_IdPhoto_Id唯一在一起。
这样一来,您就无法两次拥有相同的组合。

ALTER TABLE tbl_propertyphoto ADD CONSTRAINT UQ_Property_Photo UNIQUE(Property_Id, Photo_Id)
相关问题