简体   繁体   中英

PHP : Data which is of one digit is not deleted, but two digit data gets deleted

I have 2 PHP pages to delete employee data from table. For that, user inserts employee id, and press delete, to delete data from table.

Now, problem is, whenever I inserts id of one digit(2,3,8 etc), id is not deleted. However, if two digit id is inserted (12,19,99 etc), it gets deleted. Please help me to solve where I am wrong.

Here is my code for first PHP page:

<form action="deleteemp.php" method="post" onSubmit="return confirm('Are you sure to delete?')">
  Enter id to delete data<input type="text" name="EmpId" required> 
  <button type="submit" >Delete</button>
</form>

Here is my action PHP page,

<?php

$EmpId = $_POST['EmpId'];

$connection = mysql_connect("localhost", "root", "");
if (!$connection) {
    die("Connection failed " . mysql_error());
}
$db_conn = mysql_select_db("hms", $connection);
if (!$db_conn) {
    die("Connection failed " . mysql_error());
}
$query = "DELETE FROM employee_details WHERE emp_id = " . $EmpId;
$db_result = mysql_query($query, $connection);

if ($db_result) {
    echo "Data Deleted Successfully !";
    echo "<br>";
    echo "<a href='homepage.php'>Back to homepage</a>";
} else {
    echo "Data Not there. Try Again !<br>";
    echo "<a href='deleteemp1.php'>Search again</a>";
}

echo "data not here" is incorrect. mysql_query returns boolean false on FAILURE. An empty result (no matching IDs) is NOT a failure. It's a successful query which happens to have an empty result set.

Your code should be more like

$result = mysql_query($query) or die(mysql_error());
if (mysql_affected_rows($result) == 0) { 
   die("No rows deleted");
}

And note that you are vulnerable to sql injection attacks , and using an obsolete/deprecated DB library.

Try this

$query = "DELETE FROM employee_details WHERE emp_id = '$EmpId'";
$db_result = mysql_query($query, $connection);

if ($db_result)
 {
    echo "Data Deleted Successfully !";
    echo "<br>";
    echo "<a href='homepage.php'>Back to homepage</a>";
} 
else
 {
    echo "Data Not there. Try Again !<br>";
    echo "<a href='deleteemp1.php'>Search again</a>";
}

This seems some exceptional issue, so try typecasting before passing value to SQL query. Try using this for assigning value to $EmpId:

$EmpId = (int) $_POST['EmpId'];

can you try to change below code from

$query = "DELETE FROM employee_details WHERE emp_id = " . $EmpId;

TO

$query = "DELETE FROM employee_details WHERE emp_id =".$EmpId;

Just try. This might work for you

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