简体   繁体   English

更新迭代中的每一行-逻辑结构辅助

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM