提交表单时,所有行都采用一个值

I am newbie in PHP and with this less knowledge of PHP i developed a form to update the rows of MySQL table. But the problem is that if i edit one row in index.php file and submit it then that row value comes to all rows of the table.

I want to change the edited inputs and the rest inputs should be unchanged.

Please note that first row budget value will be added when second row budget value and will be inserted in total input and will save to database

This is how it looks

this is the index.php file

<?php
$con=mysqli_connect("127.0.0.1","root","","ji001");
$result = mysqli_query($con,"SELECT * FROM finance")
or die("Error: ".mysqli_error($con));

while($row = mysqli_fetch_array($result))
{   $Budget = $row['Budget'];
     $Availed_in_Regions = $row['Availed_in_Regions'];


echo "<form style='width:780px' action='update2.php' method='post' class='form-group'>
id<input type='text' name='Budget' value='".$row['ID']."'>
Budget<input type='text'  name='Budget' value='".$row['Budget']."'>
Availed in Regions <input type='text' name='Availed_in_Regions' value='".$row['Availed_in_Regions']."'>
<input type='Submit'>
</form>";
}
?>

This is the update2.php file

   <?php
    mysql_connect('127.0.0.1', 'root', '') or die(mysql_error());
    mysql_select_db("ji001") or die(mysql_error());

    $ud_Budget = mysql_real_escape_string($_POST["Budget"]);
    $ud_Availed_in_Regions = mysql_real_escape_string($_POST["Availed_in_Regions"]);

    $query="UPDATE finance SET Budget = '$ud_Budget', Availed_in_Regions = '$ud_Availed_in_Regions'";


mysql_query($query)or die(mysql_error());
if(mysql_affected_rows()>=1){
    echo "<p>Record Updated<p>";
}else{
    echo "<p>Not Updated<p>";
}

?>

Firstly, your form having typo id and name having same name for the name attribute i.e. name='Budget'

index.php

echo "<form style='width:780px' action='update2.php' method='post' class='form-group'>";

while($row = mysqli_fetch_array($result))
{  

  $Budget = $row['Budget'];
  $Availed_in_Regions = $row['Availed_in_Regions'];

 echo "id<input type='text' name='id[]' value='".$row['ID']."'>

  Budget<input type='text'  name='Budget[]' value='".$row['Budget']."'>

  Availed in Regions <input type='text' name='Availed_in_Regions[]' value='".$row['Availed_in_Regions']."'>";

}

echo "<input type='Submit' value='Submit'></form>";

and you need to change your update query from

update2.php

$ud_id = $_POST["id"];
$ud_Budget = array_map('mysql_real_escape_string', $_POST['Budget']);
$ud_Availed_in_Regions = array_map('mysql_real_escape_string',$_POST["Availed_in_Regions"]);

foreach($ud_id as $key => $value){
    $query = "UPDATE finance SET Budget = '$ud_Budget[$key]', Availed_in_Regions = '$ud_Availed_in_Regions[$key]' where ID = $value";
    mysql_query($query)or die(mysql_error());
   if(mysql_affected_rows()>=1){
      echo "<p>Record Updated<p>";
   }else{
      echo "<p>Not Updated<p>";
   }
}

Here I have added where condition which is required to identify which row you need to update and

NOTICE : You were mixing two API within index.php you were using mysqli_ and within update2.php its mysql

You are not using a where clause in the $query query. it should be something like this

$query="UPDATE finance SET Budget = '$ud_Budget', Availed_in_Regions = '$ud_Availed_in_Regions' WHERE id = '$id'";

You should also pass this id in the form, also change the name of the input field containing the id...

Because you actually SELECT every row in your table.

UPDATE finance SET Budget = '$ud_Budget', Availed_in_Regions = '$ud_Availed_in_Regions';

There is no WHERE clause (link) in your query you have to use it if you wanna update a row in your table.

Pass $id to your update2.php and use this query instead:

UPDATE finance SET Budget = '$ud_Budget', Availed_in_Regions = '$ud_Availed_in_Regions' WHERE id = '$id';