Cyberpks
Cyberpks

Reputation: 1421

Performing different actions on dynamically generated buttons. PHP

I am working on a PHP Gallery application, and need some help here. Actually I have a page where images from a specific directory are displayed directly. With each one of the images displayed there is a dynamically generated submit button that will be used to delete respective images separately.

Every image has its own submit button, that will be used to delete that image. Being new to php I need some method that can be called to delete only that image from the actual or physical directory.

There is a similarity between image and button that I have coded it such that every image and its respective button has names such as "img_1" and its button is "del_1".

<form id="albumGallery" name="albumGallery" method="POST">
<?php

   $dir =  htmlspecialchars($_GET["p"]) . "/";
    $imgs = array();

    if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false) {
        if (!is_dir($file) && preg_match("/\.(bmp|jpe?g|gif|png)$/", $file)) {
            array_push($imgs, $file);
        }
    }

    closedir($dh);
} else {
    die('cannot open ' . $dir);
}
$i=0;
echo "<div id='images'>";
foreach ($imgs as $idx=>$img) {
    //$class = ($idx == count($imgs) - 1 ? ' class="last"' : '');
    echo '<table style="float: left; border: 1px solid #EFEFEF; border-radius: 5px; padding: 5px; margin: 5px;"><tr><td><a href="'. $dir . $img .'" rel="example_group" ><img src="' . $dir . $img . '" alt="' . $img . '" id="'. "img_" . $i .'"/>
    </a></td></tr><tr><td><input type="submit" class="ctrlDelete" value="" id="'. "del_" . $i .'"/></td></tr></table>';
    $i++;
}
  echo "</div>";
  ?></form>

So, I need to make a method so that each button deletes its respective image and the form is posted back to self.

Upvotes: 0

Views: 204

Answers (3)

Cyberpks
Cyberpks

Reputation: 1421

@Edward Ruchevits Thanks for your help :D,

I did not use the header(); method but used the javascript's settimeout(); to redirect my page. Here is my code...

<script type="text/javascript">
setTimeout("window.location = '<?php echo $_SERVER['HTTP_REFERER'] ?>'", 1);
</script>

<?php

$path =  htmlspecialchars($_GET["p"]);

unlink($path);
?>

Upvotes: 1

Meezaan-ud-Din
Meezaan-ud-Din

Reputation: 1263

I suggest adding the form tag inside your foreach loop and post each of those forms to self. Each form can simply include a hidden field with the image ID. Then each time the page loads, you can simply check the $_POST variable for the image and delete that before serving up your page.

Alternately, you might consider using checkboxes next to the images - then one form and one submit button can action multiple deletions in one - far more efficient in my opinion.

Hope this helps!

Upvotes: 0

Edward Ruchevits
Edward Ruchevits

Reputation: 6696

For your issue, it is better to use anchors. You can style them as pseudo-buttons, if you want. Then just generate links like delete.php?id=23, which will execute the appropriate deletion script with $_GET argument passed.

Below is the very simple implementation:

<table>

    <tr>
        <td>Title</td>
        <td>Image</td>
        <td>Actions</td>
    <tr>

    <?php

    foreach ($table as $row)
    {
        echo "<tr>";
        echo "<td>".$row['title']."</td>";
        echo "<td>".$row['image']."</td>";
        echo "<td>";
        echo "<a href='delete.php?id=".$row['id']."'>Delete</a>";
        echo "<a href='edit.php?id=".$row['id']."'>Edit</a>";
        echo "</td>";
        echo "</tr>";
    }

    ?>

</table>

delete.php and edit.php should contain the following code at the very end:

<?php

header("Location: http://www.example.com/");

?>

Upvotes: 2

Related Questions