Forum Moderators: coopster

Message Too Old, No Replies

Delete row doesn't work correctly

         

Kleidi

11:18 pm on Mar 4, 2010 (gmt 0)

10+ Year Member



Hello to everyone!

I have a problem with a delete function. I have a script that lists all database container and a little script that offer the possibility to delete the row of that db. When i click on the delete link of a row, the delete function should get the id of the row that i want to delete and delete it.
The script looks like this:

- Main page:
<?php
session_start();

if(!isset($_SESSION['loggedin'])) {
header('Location: '.$domain.'index.php?error=1');
exit();
}
?>
<html>
<head>
<script type="text/javascript">
var form_id;
function confirm_delete(go_url)
{
var answer = confirm("Jeni te sigurte per fshirjen e ketij evenimenti?");
if (answer)
{
location=go_url;
}
}
</script>
</head>

<body>
<?php
include '/includet/variabla.php';
include (BPATH_ADM . 'includet/dbconfig.php');
include (BPATH_ADM . 'includet/dblidhja.php');
$query="SELECT * FROM `ndeshje` ORDER BY `ndeshje`.`ora`,`data`";
$result=mysql_query($query);
$num=mysql_numrows($result);

mysql_close();
?>
<br /><br /><center><div class="ndeshjeshfaq">
<table width="598" border="0" align="center" class="ndeshjekoka">
<tr>
<td width="25" class="ndshfaqid">ID</td>
<td width="35" class="ndshfaqsporti">Sporti</td>
<td width="265" class="ndshfaqndeshja">Ndeshja</td>
<td width="50" class="ndshfaqmenyra">Menyra</td>
<td width="50" class="ndshfaqora">Ora</td>
<td width="90" class="ndshfaqdata">Data</td>
<td width="110" class="ndshfaqmod">X - Mod</td>
</tr>
</table></center>


<?php
$i=0;
while ($i < $num) {

$id=mysql_result($result,$i,"ID");
$ndeshja=mysql_result($result,$i,"ndeshja");
$ora=mysql_result($result,$i,"ora");
$data=mysql_result($result,$i,"data");
$menyra=mysql_result($result,$i,"menyra");
$sporti=mysql_result($result,$i,"sporti");
?>
<center>
<table width="598" border="0" class="ndeshjetabela">
<tr>
<td width="25" class="ndshfaqid"><?php echo $id; ?></td>
<td width="35" class="ndshfaqsporti"><img src="..<?php echo $sporti; ?>" width="13"></td>
<td width="265" class="ndshfaqndeshja"><?php echo $ndeshja; ?></td>
<td width="50" class="ndshfaqmenyra"><?php echo $menyra; ?></td>
<td width="50" class="ndshfaqora"><?php echo $ora; ?></td>
<td width="90" class="ndshfaqdata"><?php echo $data; ?></td>
<?php
include (BPATH_ADM . 'includet/dbconfig.php');
include (BPATH_ADM . 'includet/dblidhja.php');
$query="SELECT * FROM `ndeshje` ORDER BY `ndeshje`.`ID`";
$result=mysql_query($query);
while ($row = mysql_fetch_array($result)){
$id = $row['ID'];

}
?>
<td width="110" class="ndshfaqmod"><a href="#" onClick="confirm_delete('modulet/ndeshje/fshij.php?fshij=true&id=<?php echo $id;?>');">Fshije</a> - <a href="link-for-edit-entry.php">Mod</a></td>
</tr>
</table></center>

</div>
<?php
$i++;
}
?>
</body>
</html>


- Delete page:

<html>
<body>
<?php
include '/includet/variabla.php';
include (BPATH_ADM . 'includet/dbconfig.php');
include (BPATH_ADM . 'includet/dblidhja.php');
$sql = "delete from ndeshje WHERE ID = '$_GET[id]'";
$result = mysql_query($sql);

//print $sql;

if (!$result) {
echo "<div align ='center' class='error'>Fshirja e ndeshjes deshtoi!";
echo "<br>";
echo "<br>";
echo '<form><input type="button" class="buton" value="Kthehu Mbrapa"
ONCLICK="history.go(-1)"></form>';
} else {
echo "<div align ='center' class='header2'>Ndeshja u fshi me sukses!";
echo "<br>";
echo "<br>";
echo '<form><input type="button" class="buton" value="Kthehu Mbrapa"
ONCLICK="history.go(-1)"></form>';
}
?>
</body>
</html>


But the problem is, that when i click on the link of the row that i want to delete, the delete scripts delete another row, the last one, ex:

I have three rows ordered by time,date:

id time date name
2 20:10 04.03.2010 name 2
1 20:20 04.03.2010 name 1
3 20:30 04.03.2010 name 3

When i click on id 2 for delete, the script deletes the last row, id 3 in my example. I dunno what i'm doing wrong :-[

Can you help me, Please?

Thank you in advance!

Readie

11:23 pm on Mar 4, 2010 (gmt 0)

WebmasterWorld Senior Member 10+ Year Member



$sql = "delete from ndeshje WHERE ID = '$_GET[id]'";


Whilest this probably won't fix your problem, this should be changed to

$sql = "delete from ndeshje WHERE id='" . mysql_real_escape_string($_GET['id']) . "'";


Now, with regards to your problem - Check your delete links - does the delete link go to example.com/whatever.php?id=2 when you want to delete row 2?

Kleidi

11:35 pm on Mar 4, 2010 (gmt 0)

10+ Year Member



That the problem, the link goes to the last id on the list. In my example, if i want to delete id 2, the link goes do whatever.php?id=3 , the last id on the list :(

For what you suggested, i changed it to something else:


$sqlid = $_GET['id'];
$sqlid = mysql_real_escape_string($sqlid);
$sql = "delete from ndeshje WHERE id = '$sqlid' LIMIT 1";

Is this a good method?
Thx again!

Readie

12:00 am on Mar 5, 2010 (gmt 0)

WebmasterWorld Senior Member 10+ Year Member



$sqlid = $_GET['id'];
$sqlid = mysql_real_escape_string($sqlid);


It's a perfectly acceptable syntax, but could be merged as:

$sqlid = mysql_real_escape_string($_GET['id']);


Now that you've identified the problem, it should be a fairly simple matter of rectifying it.

As a btw, it's probably worth doing the following for your deleting:

<script type="text/javascript">
<!--

function delconfirmation() {
var delanswer = confirm("Delete message?")
if (delanswer) {
return true;
} else {
return false;
}
}

//-->
</script>

<form method="get" action="/whatever.php" onsubmit="delconfirmation()">
<input type="hidden" name="id" value="3" />
<input type="submit" value="Delete" />
</form>

Which will throw up a confirmation dialogue for deleting the row.

I *THINK* (but have not tested) this would also work as:

<a href="whatever.php?id=3" onclick="delconfirmation()">Delete</a>