通过从Name Array获取值来更新数据

时间:2016-04-07 19:49:26

标签: php mysql arrays

我试图通过使用数组来更新数据。基础是我有一个表格如下:

|| idtest || testfieldA || testfieldB || testfieldC || externalId ||

其中idtest是主键,外部id是与另一个表的主键相关的id,因此行idtest = 1,2和3 coul的数据值可能共享相同的外部id。

因此我的目标是更新其中的数据。我创建的表单元素如下所示:

$sql = "SELECT * FROM test.test WHERE externalId = $callID";
$r = mysqli_query($conn, $sql) or die(mysqli_error($conn));

for ($tcount =1; $rowTest = mysqli_fetch_assoc($rtest); $tcount++){
    $idtest = $rowTicket['idtest'];
    $testfieldA = $rowTicket['testfieldA'];
    $testfieldB = $rowTicket['testfieldB'];
    $testfieldC = $rowTicket['testfieldC'];
    $externalid = $rowTicket['externalId'];
    echo "<div>";
        echo "<input type='hidden' name='idtest' value='$idtest'>";
        echo "<input type='text' name='testfieldA[$tcount]' value='$testfieldA'>";
        echo "<input type='number' step='0.01' min='0' name='testfieldB[$tcount]' value='$testfieldB'>";
        echo "<input type='number' name='testfieldC[$tcount]' value='$testfieldC'>";
        echo "<input type='hidden' name='externalId' value='$externalid'>";
    echo "</div>";
}

将回显带有name = name [e]的表单标记,例如返回编号的初始值。我也没有为idtest做名称= idtest [],因为它每次都是唯一的。

所有这一切都很好,当它被一个将它链接到updatetest.php?callid =#的onclick函数调用时,它回应了我想要的数据。但是,我现在想要更新内容。我正在尝试的系统是调用while循环,如下所示:

$e = 0;
$more = TRUE;
$idtest = $_POST['idtest'];

while($more){
    if(isset($_POST['testfieldA'.$e]) && isset($_POST['testfieldB'.$e]) && isset($_POST['testfieldC'.$e])){
        $test1 = $_POST['testfieldA'.$e];
        $test1 = trim($test1);

        $test2 = $_POST['testfieldB'.$e];
        $test2 = trim($test2);

        $test3 = $_POST['testfieldC'.$e];
        $test3 = trim($test3);

        $sql = "UPDATE test.test SET testfieldA = ?, testfieldB = ?, testfieldC= ? WHERE idtest = ?";
        $stmt = mysqli_prepare($conn, $sql) or die(mysqli_error($conn));
        mysqli_stmt_bind_param($stmt, "sssd", $test1, $test2, $test3, $idtest) or die(mysqli_error($conn));
        mysqli_stmt_execute($stmt) or die(mysqli_error($conn));
        mysqli_stmt_close($stmt);
    } else {
        $more = FALSE;
    }
} 
$e++;

但是,这不会运行。循环每个名称并获取数字的有效方式是什么,只要名称存在,就更新数据?顺便说一句,如果这个问题看起来不清楚,我很难说出来。

1 个答案:

答案 0 :(得分:1)

在HTML表单中以这种方式写入输入:

echo "<input type='text' name='testfield1[]' value='$testfield1'>";

直接进行数组转换提交表单。

然后,处理数据,写下这样的东西:

for( $i = 0; $i < count( $_POST['testfield1'] ); $i++ )
{
    $test1 = trim( $_POST['testfield1'][$i] );
    $test2 = trim( $_POST['testfield2'][$i] );
    (...)
}