在while循环中使用$变量动态更新值

时间:2014-03-24 20:08:00

标签: php database

我想我有一个非常好的问题。我在每个循环内部产生了一个带有2个输入单选按钮的循环。当您按下其中一个单选按钮时,我的函数ChangeIt会更改数据库中的值。这就是我被困住的地方:我为每一行都有一个ID列,我希望找到该ID并将其放入我的ChangeIt函数中,放入我的语句中(最后,我必须放置一个动态ID)。 My Loop显示分隔div中的每一行。我在我的while循环中放了一个变量$ id,所以我想,也许,把我的函数ChangeIt放在我的函数Admin()中?这可能吗? THX!

有什么想法吗?

PHP on index.php

if(isset($_POST['confirmation'])){
$conf = $_POST['confirmation'];
    if($conf == 'Accepter'){
        $object = new User;
        $object->ChangeIt($conf,$id);
    } else if($conf == 'Refuser'){
        $object = new User;
        $object->ChangeIt($conf,$id);
    }   
}

PHP

public function Admin(){
        $st = $this->db->prepare("SELECT * FROM form");
        $st->execute();
        while($r = $st->fetch()){
            $id = $r['ID'];
            echo '<hr>';
            echo 'Username : ' .$r['username'].' <br>';
            echo 'Adresse : ' .$r['Adresse'].' <br>';
            echo 'Met : ' .$r['Met'].' <br>';
            echo 'Age : ' .$r['Age'].' <br>';
            echo 'Statut : ' .$r['Statut'].' <br>';
            echo '<form action="compte.php" method="post">';
            echo '<input type="radio" name="confirmation" value="Accepter"> Accepter';
            echo '<input type="radio" name="confirmation" value="Refuser"> Refuser<br>';
            echo '<input type="submit" name="submit" value="Confirmer">';
            echo '</form>';
            echo '<hr>';
        }
    }
public function ChangeIt($ans,$id){
        $st = $this->db->prepare("UPDATE `test`.`form` SET `Statut` = '$ans' WHERE `form`.`ID` = '$id'");
        $st->execute();
    }

1 个答案:

答案 0 :(得分:1)

以关联数组格式发送GET / POST数据非常容易。将您的输入名称更改为confirmation[id goes here...]

echo '<input type="radio" name="confirmation['.$id.']" value="Accepter"> Accepter';
echo '<input type="radio" name="confirmation['.$id.']" value="Refuser"> Refuser<br>';

如果您愿意,可以在表单中添加表单标记<form>...</form>并提交按钮<input type="submit"...

在内部循环中,您的$_POST将如下所示:

Array('123' => 'Accepter')

使用表单外部循环,$_POST将如下所示:

Array('123' => 'Accepter', '124' => 'Refuser', '125' => 'Refuser', ...)

因此您需要更改更新代码:

$conf_arr = $_POST['confirmation'];
foreach($conf_arr as $id => $conf) {
    if($conf == 'Accepter'){
        $object = new User;
        $object->ChangeIt($conf,$id);
    } else if($conf == 'Refuser'){
        $object = new User;
        $object->ChangeIt($conf,$id);
    }   
}

请注意,您需要转义SQL值以防止SQL Injection