0

除了我试图从 1 开始重新编号表“example2”上的所有项目之外,我的代码有效。例如,我在表上输入了 3 个元素,其中包含(“url”,“number”)。number 用于跟踪元素,因此如果删除了数字 2,我需要剩余的两个元素来调整第一个仍然是 1 而第三个变为 2 的位置。这就是我所拥有的:

<?php
 $field1_name = $_POST['Number'];
 $size = 0;
 $con = mysql_connect("localhost", "*****", "*****") or die(mysql_error());
 mysql_select_db("test") or die(mysql_error());
 mysql_query("DELETE FROM example2 WHERE number='$field1_name'") 
 or die(mysql_error()); 
 $result = mysql_query("SELECT COUNT(*) FROM example2");
 $row = mysql_fetch_assoc($result);
 $size = $row['COUNT(*)'];
 $l = 1; while ($l <= $size) { $temp = "${"example2_$l"}"; 
 mysql_query("UPDATE example2                                              
 SET number = '$temp' WHERE number = $l"); mysql_query($query)or 
 die(mysql_error());$temp++; $l++;};

 mysql_close($con);
 ?>
  <script language="javascript" type="text/javascript">
    window.location = 'table.html';
  </script>
4

1 回答 1

0

您的while循环有点令人困惑-您调用mysql_query了两次,第二次使用未定义的变量$query(我假设是调试工作的结果)。

一个更简单的解决方案可能是从所有大于删除元素的元素中减去一个:

<?php

 $con = mysql_connect("localhost", "*****", "*****") or die(mysql_error());

 $field1_name = mysql_real_escape_string($_POST['Number']);

 mysql_select_db("test") or die(mysql_error());
 mysql_query("DELETE FROM example2 WHERE number='$field1_name'") 
    or die(mysql_error()); 

 mysql_query("UPDATE example2 SET number = number - 1 WHERE number > '$field1_name'") 
    or die(mysql_error());

 mysql_close($con);

?>

我还为您的输入添加了一些转义,因为您本来就容易受到 SQL 注入的攻击。您可能需要考虑使用PDOMySQLi作为更强大的解决方案。

于 2012-09-19T01:41:13.763 回答