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


When form submitted then all rows take one value

我是PHP新手,利用对PHP的不太了解,我开发了一个更新MySQL表行的表单。但问题是,如果我编辑index.php文件中的一行并提交它,那么该行的值就会出现在表的所有行中。

我想更改编辑后的输入,其余的输入应该保持不变。

请注意,第一行预算值将在第二行预算值时添加,并将插入总输入中,并保存到数据库

就是这样

这是index.php文件

<?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>";
}
?>

这是update2.php文件

   <?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>";
}
?>

首先,您的表单有拼写错误id,名称属性的名称相同,即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>";

并且您需要从更改您的更新查询

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>";
   }
}

在这里,我添加了where条件,这是识别需要更新的行和所必需的

注意:您在index.php中混合了两个API,您使用的是mysqli_和update2.php中的mysql

在$query查询中没有使用where子句。应该是像这个

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

您还应该在表单中传递此id,并更改包含id的输入字段的名称。…

因为实际上SELECT是表中的每一行。

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

查询中没有WHERE子句(链接),如果要更新表中的一行,则必须使用它。

$id传递给update2.php,然后使用以下查询:

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