0

私が持っているコードは、テーブル「example2」のすべてのアイテムの番号を 1 から付け直そうとしていることを除いて機能します。したがって、たとえば、テーブルに 3 つの要素が入力され、(「url」、「number」) が含まれています。番号は要素を追跡するために使用されるため、番号 2 が削除された場合、最初の要素がまだ 1 で 3 番目の要素が 2 になる場所を調整するために、残りの 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_query2回呼び出し、2回目は未定義の変数で呼び出します$query(デバッグ作業の結果と思います)。

より簡単な解決策は、削除された要素よりも大きいすべての要素から 1 を引くことです。

<?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インジェクションに対して脆弱だったので、入力のエスケープも追加しました。より堅牢なソリューションとして、PDOまたはMySQLiの使用を検討することをお勧めします。

于 2012-09-19T01:41:13.763 に答える