John B
John B

Reputation: 95

Deleting a ROW from MySQL database using MySQLi

I've got a delete.php file with yes/no buttons that call deleteRecord.php to delete the selected row from the database.

The problem seems to be that I'm not passing the variable for the ProjectID through to the deleteRecord file.

Can someone please tell me what's wrong?


delete.php

<?php 
error_reporting(E_ALL|E_STRICT); ini_set('display_errors', true);
require('includes/conn.inc.php');
require('includes/functions.inc.php');
$sProjectID = safeInt($_GET['ProjectID']);
$stmt = $mysqli->prepare("SELECT ProjectID, ProjectName, ProjectImage, LanguageUsed, ApplicationUsed, Description FROM Projects WHERE ProjectID = ?");
$stmt->bind_param('i', $sProjectID);
$stmt->execute(); 
$stmt->bind_result($ProjectID, $ProjectName, $ProjectImage, $LanguageUsed, $ApplicationUsed, $Description);
$stmt->fetch();
$stmt->close();
?>
<!DOCTYPE HTML>
<input name="ProjectID" type="hidden" value="<?php echo
$ProjectID; ?>">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Delete <?php echo $ProjectName; ?></title>
<link href="styles/cms.css" rel="stylesheet" type="text/css">
</head>
<body>
<div id="container">
<header>
<h1>Delete <?php echo $ProjectName; ?></h1>
<?php
require('includes/nav.inc.php');
?><p>Hello </p><?php echo "$sProjectID" ?>
</header>

<form name="form1" method="get" action="process/deleteRecord.php">
<p>Are you sure you wish to delete <?php echo $ProjectName; ?>?</p>
   <p>
    <input type="submit" name="del" id="del" value="Delete">
  </p>
    </form>

<form name="form2" method="" action="listall.php" id="saveForm">
    <input type="submit" name="save" id="save" value="Save">
</form>

<?php
require('includes/footer.inc.php');
?>

</div>
    </body>
    </html>

deleteRecord.php

<?php
error_reporting(E_ALL|E_STRICT); ini_set('display_errors', true);
require('../includes/conn.inc.php');
require('../includes/functions.inc.php');
// sanitize user variables
$sProjectID = safeInt($_POST['ProjectID']);
// prepare SQL
$stmt = $mysqli->prepare("DELETE FROM Projects WHERE ProjectID = ?");
$stmt->bind_param('i', $sProjectID);
$stmt->execute();
$stmt->close();
//header("Location: ../index.php");
// redirect browser
exit;
// make sure no other code executed
?>

Upvotes: 2

Views: 882

Answers (2)

Saty
Saty

Reputation: 22532

You need to write the hidden field inside your form and change your method to POST.

<form name="form1" method="post" action="process/deleteRecord.php">
    <p>Are you sure you wish to delete <?php echo $ProjectName; ?>?</p>
    <p>
        <input name="ProjectID" type="hidden" value="<?php echo
$ProjectID;
?>">
        <input type="submit" name="del" id="del" value="Delete">
    </p>
</form>

As per @VolkerK comment below, put the input element "within" the form element instead of the one before the <html> tag.

Upvotes: 5

Ratan Phayade
Ratan Phayade

Reputation: 86

This uses the GET method for doing the same:

Change in delete.php:

<form name="form1" method="get" action="process/deleteRecord.php?ProjectID=<?= $ProjectID ?>">
    <p>Are you sure you wish to delete <?php echo $ProjectName; ?>?</p>
    <p>
        <input type="submit" name="del" id="del" value="Delete">
    </p>
</form>

Change in deleteRecord.php:

$sProjectID = safeInt($_GET['ProjectID']);

Upvotes: 0

Related Questions