<?php
$roll = $_POST['roll'];
$score = $_POST['a'];
$test = $_SESSION['test'];
$class = $_SESSION['class'];
print_r($roll);
print_r($score);
global $pdo;
require('connect.php');
$stmt=$pdo->prepare("update atten set $test=? where roll=?");
foreach( $roll as $rollno)
{
$stmt->bindparam(2,$rollno);
foreach( $score as $key)
{
$stmt->bindparam(1,$score);
$stmt->execute();
}
}
if($stmt==false)
{
die("error".print_r($stmt->errorinfo()));
}
?>
此处$roll
是数组值,$score
也是数组值。这里
所有卷的最后一次更新值为例
$roll=1,2,3,4
和$score(10,20,30)
我不知道,但这里有30个值更新所有卷号。
请帮帮我..谢谢..
答案 0 :(得分:0)
目前,您正在针对所有广告系列保存每一个分数,因此最后一个分数将始终设置为您的分数。
错误在于你使用了两个foreach循环,但是你只需要一个,你只需要将滚动和分数相互匹配。
Iff你绝对肯定数组长度相同并且索引方式相同(具有相同的键 - 你可以使用array_values PHP函数来确保)你可以使用for循环
for($i = 0; $i < count($roll); $i++){
$stmt->bindparam(1, $roll[$i]);
$stmt->bindparam(2, $score[$i]);
$stmt->execute();
}
PHP函数array_combine在这里也可能有用,因为你可以这样做:
array_combine($roll, $score);
然后像往常一样使用foreach循环。
编辑:根据要求,使用array_combine示例:
<?php
$roll = $_POST['roll'];
$score = $_POST['a'];
$test = $_SESSION['test'];
$class = $_SESSION['class'];
print_r($roll);
print_r($score);
global $pdo;
require('connect.php');
$stmt=$pdo->prepare("update atten set $test=? where roll=?");
if(count($roll) !== count($score))
die('Arrays are not the same length!');
$rollsToScores = array_combine($roll, $score);
foreach($rollsToScores as $roll => $score){
$result = $stmt->execute(array($score, $roll));
if($result === false){
die("error".print_r($stmt->errorinfo()));
break;
}
}
?>
答案 1 :(得分:0)
您正在内循环绑定参数$array
中传递$stmt->bindparam(1,$score);
。
我认为
$stmt->bindparam(1,$score);
应该是: -
$stmt->bindparam(1,$key);
修改后的代码块: -
foreach( $roll as $rollno)
{
$stmt->bindparam(2,$rollno);
foreach( $score as $key)
{
$stmt->bindparam(1,$key);
$stmt->execute();
}
}