[英]Updating each row on iteration - logical structure assitance
I need assitance to figure out this problem. 我需要协助来解决这个问题。 I tried to simplify thing as possible. 我试图简化事情。 There aren't any errors, it's just a matter of accessing that I can't afford to figure out. 没有任何错误,只是我无法负担的访问问题。
Imagine : 想象一下:
<?php
for($i=0;$i<3;$i++){
?>
Member:
<input type="text" name="<?php echo trim("member_".$i);?>" />
<br/>
<?php
} ?>
The above codes generates : 上面的代码生成:
<input name="member_1">
<input name="member_2">
<input name="member_3">
and now assuming, the data in table 现在假设表中的数据
org_ID (Foreign Key) member
A 1
A 2
A 3
Now come to update function : 现在来更新功能:
public function updateTo($tableName, $org_D,$member) {
try {
$stm = "update " . $tableName . " SET member = :member WHERE org_D= :org_D";
$eksekutor = $this->koneksi->prepare($stm);
$eksekutor->bindValue(":org_D", $org_D, PDO::PARAM_STR);
$eksekutor->bindValue(":member ", $member, PDO::PARAM_STR);
$eksekutor->execute();
$done = true;
} catch (PDOException $e) {
$done = false;
}
return $done;
}
and finally the update operation : 最后是更新操作:
If I do this ( which is wrong since it keeps updating all row for each iteration ): 如果我这样做 ( 这是错误的,因为它会不断更新每次迭代的所有行 ):
for($i=0;$i<3;$i++) {
$member = $_POST["member_$i"];
$update = $kad->updateTo("table_name", $org_D, $member);
}
I need help, I can't afford to figure out how to achive this update operation: 我需要帮助,我无力弄清楚如何实现此更新操作:
$_POST["member_1"]; ------ UPDATE TO-------> row "member" contains 1
$_POST["member_2"]; ------ UPDATE TO-------> row "member" contains 2
$_POST["member_3"]; ------ UPDATE TO-------> row "member" contains 3
since in update operation I've to decide value for each WHERE=
因为在更新操作中,我必须为每个WHERE=
决定值
Currently your sending the same UPDATE statement to you database in each iteration. 当前,您在每次迭代中都向数据库发送相同的UPDATE语句。 If you want to update a single member per iteration you'll have to add that to your WHERE clause. 如果要在每次迭代中更新单个成员,则必须将其添加到WHERE子句中。
Maybe you have something more to reference a member than given in your example. 也许您所引用的成员比示例中给出的要多。 Otherwise you'll have to add the previous member-value to your where clause. 否则,您必须将先前的成员值添加到where子句中。
public function updateTo($tableName, $org_D, $prevMember, $newMember) {
...
$stm = "update " . $tableName . " SET member= :newMember WHERE org_D=:org_D AND member = :prevMember";
$eksekutor = $this->koneksi->prepare($stm);
$eksekutor->bindValue(":org_D", $org_D, PDO::PARAM_STR);
$eksekutor->bindValue(":newMember", $newMember, PDO::PARAM_STR);
$eksekutor->bindValue(":prevMember", $prevMember, PDO::PARAM_STR);
...
}
The problem is because of your WHERE
condition. 问题是由于您的WHERE
条件。 See here, 看这里,
...WHERE org_D= :org_D";
Since you're passing A
, your org_D
, as an argument to the method, it's updating all three rows in each iteration of for
loop. 由于您要传递A
,即org_D
,作为方法的参数,因此它将在for
循环的每次迭代中更新所有三行。 You need to pass the current member's id to the updateTo()
method as well. 您还需要将当前成员的ID传递给updateTo()
方法。
So, first change your for
loop in the following fashion, 因此,首先以以下方式更改for
循环,
for($i=0;$i<3;$i++) {
$member = $_POST["member_$i"];
$update = $kad->updateTo("table_name", $i+1, $org_D, $member);
}
And then change the updateTo()
method in the following way, 然后以以下方式更改updateTo()
方法,
public function updateTo($tableName, $oldMemberId, $org_D, $newMemberId) {
try {
$stm = "update " . $tableName . " SET member = :newMemberId WHERE member = :oldMemberId AND org_D= :org_D";
$eksekutor = $this->koneksi->prepare($stm);
$eksekutor->bindValue(":newMemberId ", $newMemberId, PDO::PARAM_STR);
$eksekutor->bindValue(":oldMemberId ", $oldMemberId, PDO::PARAM_STR);
$eksekutor->bindValue(":org_D", $org_D, PDO::PARAM_STR);
$eksekutor->execute();
$done = true;
} catch (PDOException $e) {
$done = false;
}
return $done;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.