简体   繁体   中英

Deleting a row with Php & MySQL

I am new to php and SQL and just toying around with a project for my own understanding of accessing, updating and deleting data from my Database.

I have managed to show the selected data, create a button to delete a specific Id but really needing some assistance with deleting the selected row or record instead of hard coding in the ID in my delete php script.

Here is an example of my script:

<?php

    $sql = "SELECT id, firstname, lastname, joinDate FROM customers";
    $result = $conn->query($sql);

    if ($result->num_rows > 0) {
        // output data of each row

        while($row =  $result->fetch_assoc()) {
            echo 
                "<div class='trow'>" . 
                $row["id"]. ": " . 
                $row["firstname"] . " " . 
                $row["lastname"]. " " . 
                $row["joinDate"]. " " . 
                "<span class='deleteMember'>
                    <form action='deleteMember.php' method='POST'>
                        <button type='submit'>Delete</button>
                    </form>
                </span>" . " " . 
                "<span class='editMember'><a href='#'>Edit</a></span>" . 
                "<br></div>";
        }

    } else {
        echo "0 results";
    }

    $conn->close();

?>

Here is the delete.php

<?php

    // sql to delete a record
    $sql = "DELETE FROM customers WHERE id='6' ";

    if ($conn->query($sql) === TRUE) {
       header("Location: index.php");
    } else {
        echo "Error deleting record: " . $conn->error;
    }

    $conn->close();

?>

what I would like it to do is, delete the row from which you hit the delete button from and not just delete the row I have specified in the delete.php script. I understand HOW it should work by posting the id but not sure how to do it.

in place of your form use this

<a href="deleteMember.php?id=<?php echo $row['id'];?>">DELETE</a>

and in your delete query must be like below

$sql = "DELETE FROM customers WHERE id='".$_GET['id']."' ";

Do like this

<?php

    // sql to delete a record
    $sql = "DELETE FROM customers WHERE id='".$_GET['id']."' ";

    if ($conn->query($sql) === TRUE) {
       header("Location: index.php");
    } else {
        echo "Error deleting record: " . $conn->error;
    }

    $conn->close();

?>

<?php

    $sql = "SELECT id, firstname, lastname, joinDate FROM customers";
    $result = $conn->query($sql);

    if ($result->num_rows > 0) {
        // output data of each row

        while($row =  $result->fetch_assoc()) {
            echo 
                "<div class='trow'>" . 
                $row["id"]. ": " . 
                $row["firstname"] . " " . 
                $row["lastname"]. " " . 
                $row["joinDate"]. " " . 
                "<span><a href='deleteMember.php?id=".$row['id']."'>Delete</a></span>" . 
                "<span class='editMember'><a href='#'>Edit</a></span>" . 
                "<br></div>";
        }

    } else {
        echo "0 results";
    }

    $conn->close();
?>

No need to add extra form element for Delete or Edit purpose. Try this way to pass the id of row for Eelete or Edit operation

while($row =  $result->fetch_assoc()) 
       {
            $id=$row['id'];// capture your row id & pass to your delete & edit
            echo 
             "<div class='trow'>" . 
                 $row["id"]. ": " . 
                 $row["firstname"] . " " . 
                 $row["lastname"]. " " . 
                 $row["joinDate"]. " " . 
                 "<span class='deleteMember'>
                    <a href='deleteMember.php?id=<?=$id;?>'>Delete</a>
                 </span>" . " " . 
                 "<span class='editMember'>
                     <a href='editMember.php?id=<?=$id;?>'>Edit</a>
                 </span>" . 
                 "<br>
           </div>";
        }

EDIT: Then catch the id on your relevant page for your operation.

//deleteMember.php

<?php
    $id=$_GET['id'];
    // sql to delete a record
    $sql = "DELETE FROM customers WHERE id='".$id."'";

    if ($conn->query($sql) === TRUE) {
       header("Location: index.php");
    } else {
        echo "Error deleting record: " . $conn->error;
    }

    $conn->close();

?>

Note: Please Use Prepared Statements of PDO or MYSQLi instead to avoid SQL Injection and manual escaping.

or stay in your post form with:

 while($row =  $result->fetch_assoc()) {
            echo 
                "<div class='trow'>" . 
                $row["id"]. ": " . 
                $row["firstname"] . " " . 
                $row["lastname"]. " " . 
                $row["joinDate"]. " " . 
                "<span class='deleteMember'>
                    <form action='deleteMember.php' method='POST'>
                        <input type='hidden' name='myid' value='".$row['id']."' />
                        <button type='submit'>Delete</button>
                    </form>
                </span>" . " " . 
                "<span class='editMember'><a href='#'>Edit</a></span>" . 
                "<br></div>";
        }

And in your delete.php :

<?php
    $id=(int) $_POST['myid'];

    // sql to delete a record
    $sql = "DELETE FROM customers WHERE id=".$id;

    if ($conn->query($sql) === TRUE) {
       header("Location: index.php");
    } else {
        echo "Error deleting record: " . $conn->error;
    }

    $conn->close();

?>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM