Code Beast
Code Beast

Reputation: 475

How to delete a record from HTML table?

I have this codes so far: This form is generated during a query loop

 while ($row = mysql_fetch_assoc($result)) {
  echo "<tr>";
  echo "<td>" . $row['name'] . "</td>";
  echo "<td>" . $row['age'] . "</td>";
  echo "<td>" . $row['breed'] . "</td>";
  if($row['neuteredOspayed']=="1"){
  echo "<td>" . "neutered" . "</td>";
  }else
  echo "<td>" . "spayed". "</td>";
  echo "<td>" . $row['priceFee'] . "</td>";
  if($row['housebroken']=="1"){
  echo "<td>" . "yes" . "</td>";
  }else
  echo "<td>" . "no". "</td>";
  if($row['goodwithdogs']=="1"){
  echo "<td>" . "yes" . "</td>";
  }else
  echo "<td>" . "no". "</td>";
  if($row['goodwithcats']=="1"){
  echo "<td>" . "yes" . "</td>";
  }else
  echo "<td>" . "no". "</td>";
  echo "<td>" . $row['status'] . "</td>";
  echo "</tr>";
  }
echo "</table>";

Now, is there a way to put a link saying "delete" next to every result? For example next to the status field? Here is what it's looking like: enter image description here

To get this deleted I guess that I need to spot the record somehow. What I need is to take the name of the animal. For example, how can I get the value "Sparky" from the table and assign it to a variable? If I have the name I would be able to make the checks and run a query witch will delete the record.

Upvotes: 0

Views: 911

Answers (8)

Sudan Hari
Sudan Hari

Reputation: 51

//Add this form before the end of the while loop

    <form action="#" method="post">
    <input type="hidden" name="name" value="<?php echo $row['name']?>">
    <input type="submit" name="delete" value="delete">
    </form>

//Add this at the end of the coding

<?php

    if(isset($_POST['delete']))
    {
    //database connection
    $sql="DELETE FROM `table_name` WHERE `name`='{$_POST['name']}'";
    $queryEXE=mysql_query($sql);
    }

?>

Upvotes: 1

GolezTrol
GolezTrol

Reputation: 116100

Use a 'delete' form for each row.

The best way would be to add, for each row, a form with a submit button. Each form has a hidden field containing the id (or name, if you must) of the record to delete. Set the method of the form to 'post'.

Reasons why:

  • A delete link (a href) can be indexed and bookmarked easily. You don't want pets to be deleted everytime Google drops by or a user is browsing through their history.
  • A method='get' form also can cause the url to be bookmarked and/or show up in the history. The method with a form will work without Javascript altogether.

Apart from that,

  • Any solution (both forms and links) can easily be 'upgraded' to a solution with Ajax for a better user experience, but that's always an extra and no core functionality.
  • If you like, you can style the submit button to look like a link.
  • Use the post-redirect-get pattern if you implement this solution.

That is, assuming you want to actually remove the record from the database. If you just want to alter the HTML, a Javascript soliution would make more sense.

Upvotes: 0

Basith
Basith

Reputation: 1075

You have to submit the form and do this action....

<input type="submit" name="submit" value="Delete" />

After submit the form will redirected to some page. In that page you got all the posted values. In that you can delete the record by using the record id otherwise you use the name for appropriate record.

$query = "DELETE FROM table_name WHERE name='$_POST['name']'";

                         (or)

$query = "DELETE FROM table_name WHERE id='$_POST['id']'";

After this execution you have to redirect the URL to that page.

                          (or)

<a href="delete.php?id='.$row['id'].'">Delete</a>

In this file you have to written like this...

$id = $_REQUEST['id'];
$query = "DELETE FROM table_name WHERE id='$id'";

Upvotes: 1

Wearybands
Wearybands

Reputation: 2455

Create another cell in your table and call ajax onclik of that button. Inside your ajax call delete the pecific row

Upvotes: 0

user1610075
user1610075

Reputation: 1641

Php just is for page generation, once you have generated that table you cannot modify it. You could, however, make a new get request, specifying a parameter with the row name to delete, you have to change your server php code to take in account this parameter, though.

The best, according to me, is using javascript: you assign a td id to each row and then you write a simple function in which you delete that row.

Upvotes: 2

cassi.lup
cassi.lup

Reputation: 1261

You add a "elemID" attribute to each of your <tr>s and a new class that would be individual for each row (for example, elem+the id):

<tr elemId="12" class="elem12">...</tr>

Then, for the Delete link, you use AJAX to call the page that deletes the row from your DB, passing the elemID as an argument to this function:

function deleteRow(thisElemID) {
 $.ajax({
  url: yourURL,
  data: {'elemID', thisElemID },
  success: function() {
       $('.elem'+thisElemID).remove();
  }
 });
}

More on $.ajax here.

Upvotes: 0

bcmcfc
bcmcfc

Reputation: 26745

You'd need something like this in your while loop:

echo '<td><a href="path/to/delete.php?name='.$row['name'].'">Delete</a></td>';

Using the table's primary key would be better than the name though - is the name unique in the db? Assuming there is a PK and it's called id:

echo '<td><a href="path/to/delete.php?id='.$row['id'].'">Delete</a></td>';

Upvotes: 2

Josh
Josh

Reputation: 12566

You will have to use Javascript and AJAX.

Basically, you'll want to put a button in a cell, one per row, and when it's clicked, pass the id of the record to be deleted back to a PHP script via AJAX, then remove the record from the database. It should also hide the row when it is clicked.

I'd recommend using jQuery's .ajax(), as raw XHR is painful at best.

There is no way to do this with just PHP, because HTTP is stateless. Once your web page is loaded, the HTML and PHP parts are done, and fixed. You'll HAVE to use Javascript to make consecutive requests.

Alternatively, as bcmcfc points out, you can also just have a hyperlink to a script that will delete a record from your database.

Upvotes: 2

Related Questions