2013-11-28 47 views
0

我一直在尝试使用php从表中删除特定的行。我遵循了一个在线指南,在其中使用每行旁边的删除按钮创建一个包含数据的表。在删除php中的特定行时遇到问题

当单击删除按钮时,应该使用主键“id”删除该行。相反,它会通过“if”语句并回应“错误”。

使用回声var_dump($ _GET)我相信它是通过ID通过但WHERE子句不知何故没有收到ID。

如果我删除WHERE子句,它可以工作,但当然会删除表中的所有数据

PHPDelete

<?php 

$host="localhost"; // host name 
$username="root"; // database username 
$password="root"; // database password 
$db_name="school"; // database name 
$tbl_name="Student"; // table name 



mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 


$sql="SELECT * FROM $tbl_name"; 
$result=mysql_query($sql); 
?> 
<!--creating the table --> 
<table width="400" border="0" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC"> 
<tr> 
<td colspan="5" bgcolor="#FFFFFF"><strong>Delete data</strong> </td> 
</tr> 

<tr> 
<td align="center" bgcolor="#FFFFFF"><strong>id</strong></td> 
<td align="center" bgcolor="#FFFFFF"><strong>Name</strong></td> 
<td align="center" bgcolor="#FFFFFF"><strong>Age</strong></td> 
<td align="center" bgcolor="#FFFFFF"><strong>Username</strong></td> 
<td align="center" bgcolor="#FFFFFF">&nbsp;</td> 
</tr> 

<?php 
while($rows=mysql_fetch_array($result)){ 
?> 

<tr> 
<td bgcolor="#FFFFFF"><? echo $rows['id']; ?></td> 
<td bgcolor="#FFFFFF"><? echo $rows['Name']; ?></td> 
<td bgcolor="#FFFFFF"><? echo $rows['Age']; ?></td> 
<td bgcolor="#FFFFFF"><? echo $rows['Username']; ?></td> 
<td bgcolor="#FFFFFF"><a href='phpDelete2.php?id=$id'>delete</a></td> 


</tr> 

<?php 




// close while loop 
} 

?> 

</table> 

<?php 
// close connection; 
mysql_close(); 
?> 

和phpDelete2

<?php 


$host="localhost"; // host name 
$username="root"; // database username 
$password="root"; // database password 
$db_name="school"; // database name 
$tbl_name="Student"; // table name 

// Connect to server and select databse. 
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select database"); 

// get value of id that sent from address bar 


$id = $_GET['id']; 

// Delete data in mysql from row that has this id 



$sql="DELETE FROM $tbl_name"; 

$result=mysql_query($sql); 

// if successfully deleted 
if($result){ 
echo "Deleted Successfully"; 
echo "<BR>"; 
echo "<a href='index.php'>Back to main page</a>"; 
} 

else { 
echo "error"; 
} 
?> 

<?php 
// close connection 
mysql_close(); 
?> 
+0

精确您的麻烦线和更新后。目前,在这个问题中有很多不必要的信息 –

+0

仅供参考,mysql_functions自php 5.5.x起弃用!您应该切换到mysqli。 http://php.net/manual/en/migration55.deprecated.php –

+1

欢迎来到堆栈溢出! [**请不要在新代码中使用'mysql_ *'函数**](http://bit.ly/phpmsql)。他们不再被维护[并被正式弃用](https://wiki.php.net/rfc/mysql_deprecation)。看到[**红框**](http://j.mp/Te9zIL)?学习[*准备的语句*](http://j.mp/T9hLWi),并使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [这篇文章](http://j.mp/QEx8IB)将帮助你决定哪个。如果你选择PDO,[这里是一个很好的教程](http://j.mp/PoWehJ)。 –

回答

0

你从来没有真正困扰回显您的ID值:

<td bgcolor="#FFFFFF"><a href='phpDelete2.php?id=$id'>delete</a></td> 

应该

<td bgcolor="#FFFFFF"><a href='phpDelete2.php?id=<?php echo $id ?>'>delete</a></td> 
               ^^^^^^^^^^^^^^^^^ 

同时,NEVER把作为删除操作是危险的东西放到一个简单的链接。考虑一下如果你的浏览器决定“预加载”所有链接页面会发生什么?突然你删除了你在页面上列出的所有东西。

您的DELETE查询也不会使用您尝试传入的ID,并且只会删除表中的所有内容。它应该是

DELETE FROM yourtable WHERE id = ID_VALUE_GOES_HERE 

注意的SQL injection attacks,以及...

相关问题