【发布时间】:2017-07-16 11:34:32
【问题描述】:
上下文:
我有一个带有复选框的表单和一个 php 页面来处理数据。我检查了我的数据:一切正常。
为了管理复选框,我做了一个“FOREACH”,根据表单中选中的框,在其中找到了几个带有指令和 sql 查询的“IF”循环。
我尝试循环我的数组以输入适合用户选中的每个框的循环“IF”。
问题:
当我运行脚本时,我检查了 3 或 5 个框,只考虑了最后一个循环“IF”... :(
我检查了表单 HTML 和 PHP 测试 POST:一切正常。
所以我的问题是:
我在哪里搞砸了,以至于 foreach 只会在“IF”循环中传递数组的最后一个元素?
代码如下:
if ( isset($_POST['ModalMultipleColorEdit']) && !empty($_POST['Planning_ID2']) && !empty($_POST['CaseColor2']) && !empty($_POST['CaseWeek2']) )
{
//------- Extract Needed Posted Data
$TargetID = $_POST['Planning_ID2'];
$TargetColor = $_POST['CaseColor2'];
$TargetMonth = $_POST['CaseMonth2'];
//----- GET OLD DATA
$REQ = $DB->query("SELECT * FROM `Planning` WHERE `ID_Planning` = ".$TargetID." ;")
or die(var_dump($REQ->errorInfo()));
$DATA = $REQ->fetch();
// Explore Targeted Weeks Array
foreach( $_POST['CaseWeek2'] as $CheckedWeek )
{
//----------- IF TARGET MONTH IS JANUARY
if ( $TargetMonth == "Janvier" && $CheckedWeek == "(S-1)" )
{
//------- Extract Color String Period
$GetColor = explode("." , $DATA['Planning_M1']);
//------- Change Period Color
$GetColor[0] = $TargetColor;
//------- Build New Color String
$NewCaseMonth = $GetColor[0].".".$GetColor[1].".".$GetColor[2].".".$GetColor[3].".".$GetColor[4];
// ------ UPDATE REQUEST
$REQ2 = $DB->prepare('UPDATE `Planning` SET Planning_M1 = ? WHERE `ID_Planning` = ?');
$REQ2->execute(array($NewCaseMonth, $TargetID)) or die(var_dump($REQ2->errorInfo()));
$REQ2 = NULL;
}
if ( $TargetMonth == "Janvier" && $CheckedWeek == "(S-2)" )
{
//------- Extract Color String Period
$GetColor = explode("." , $DATA['Planning_M1']);
//------- Change Period Color
$GetColor[1] = $TargetColor;
//------- Build New Color String
$NewCaseMonth = $GetColor[0].".".$GetColor[1].".".$GetColor[2].".".$GetColor[3].".".$GetColor[4];
// ------ UPDATE REQUEST
$REQ2 = $DB->prepare('UPDATE `Planning` SET Planning_M1 = ? WHERE `ID_Planning` = ?');
$REQ2->execute(array($NewCaseMonth, $TargetID)) or die(var_dump($REQ2->errorInfo()));
$REQ2 = NULL;
}
if ( $TargetMonth == "Janvier" && $CheckedWeek == "(S-3)" )
{
//------- Extract Color String Period
$GetColor = explode("." , $DATA['Planning_M1']);
//------- Change Period Color
$GetColor[2] = $TargetColor;
//------- Build New Color String
$NewCaseMonth = $GetColor[0].".".$GetColor[1].".".$GetColor[2].".".$GetColor[3].".".$GetColor[4];
// ------ UPDATE REQUEST
$REQ2 = $DB->prepare('UPDATE `Planning` SET Planning_M1 = ? WHERE `ID_Planning` = ?');
$REQ2->execute(array($NewCaseMonth, $TargetID)) or die(var_dump($REQ2->errorInfo()));
$REQ2 = NULL;
}
if ( $TargetMonth == "Janvier" && $CheckedWeek == "(S-4)" )
{
//------- Extract Color String Period
$GetColor = explode("." , $DATA['Planning_M1']);
//------- Change Period Color
$GetColor[3] = $TargetColor;
//------- Build New Color String
$NewCaseMonth = $GetColor[0].".".$GetColor[1].".".$GetColor[2].".".$GetColor[3].".".$GetColor[4];
// ------ UPDATE REQUEST
$REQ2 = $DB->prepare('UPDATE `Planning` SET Planning_M1 = ? WHERE `ID_Planning` = ?');
$REQ2->execute(array($NewCaseMonth, $TargetID)) or die(var_dump($REQ2->errorInfo()));
$REQ2 = NULL;
}
if ( $TargetMonth == "Janvier" && $CheckedWeek == "(S-5)" )
{
//------- Extract Color String Period
$GetColor = explode("." , $DATA['Planning_M1']);
//------- Change Period Color
$GetColor[4] = $TargetColor;
//------- Build New Color String
$NewCaseMonth = $GetColor[0].".".$GetColor[1].".".$GetColor[2].".".$GetColor[3].".".$GetColor[4];
// ------ UPDATE REQUEST
$REQ2 = $DB->prepare('UPDATE `Planning` SET Planning_M1 = ? WHERE `ID_Planning` = ?');
$REQ2->execute(array($NewCaseMonth, $TargetID)) or die(var_dump($REQ2->errorInfo()));
$REQ2 = NULL;
}
}
//------- REDIRECT WHEN SUCCESS AND NO MORE TARGETS
header('Location: PlanningNow.php?Process=Success');
exit();
}
else
{
header('Location: PlanningNow.php?Process=ErrorForm');
exit();
}
提前感谢您的帮助! :)
【问题讨论】:
-
在您的逻辑中看起来像问题。您正在更新最后一个元素,因为每次在循环中,您以前的值都会更新为最新值,所以最后您将获得最后更新的值
-
这就是我的想法......但我不知道如何解决它?有什么建议吗?
-
什么是自增数组?
-
那才叫索引数组
-
是的,我需要做的是在每次迭代中执行查询...你认为我需要创建一个自动递增数组还是索引数组?
标签: php if-statement foreach