Php 仅为foreach循环显示一条消息

Php 仅为foreach循环显示一条消息,php,foreach,Php,Foreach,当循环通过下面的foreach循环时,每次执行循环时,我都会得到一个echo输出。如何将这些消息减少到只有一条最终消息 即,如果只有“成功消息”则回显“成功”,如果出现错误(“失败”或“未保存任何内容”消息)则回显“失败”。一旦发生错误,循环不得停止,但应完全继续。最后我只想知道是发生了错误还是结果没有保存 if(!isset($_POST["submitbutton"])) { echo "Click this button to save your input."; } else {

当循环通过下面的
foreach
循环时,每次执行循环时,我都会得到一个
echo
输出。如何将这些消息减少到只有一条最终消息

即,如果只有
“成功消息”
则回显
“成功”
,如果出现错误
(“失败”或“未保存任何内容”消息)
则回显
“失败”
。一旦发生错误,循环不得停止,但应完全继续。最后我只想知道是发生了错误还是结果没有保存

if(!isset($_POST["submitbutton"])) {
  echo "Click this button to save your input.";
} else {
  foreach($_POST['tipp_id'] as $key => $tipp_id) {
    if($tipp_id > 0) {
      $result="
      //SQL query
      ";
      $query=mysqli_query($conn,$result);
      if($query) {
        echo "Success.<br>";
      } else {
        echo "Fail.<br>";
      }
    } else {
      echo "Nothing saved.";
    }
  }
}
if(!isset($_POST[“submitbutton”])){
echo“单击此按钮保存您的输入。”;
}否则{
foreach($\u POST['tipp\u id']作为$key=>$tipp\u id){
如果($tipp_id>0){
$result=”
//SQL查询
";
$query=mysqli\u查询($conn,$result);
如果($query){
呼应“成功”
; }否则{ 回显“失败,
”; } }否则{ 呼应“什么都没救”; } } }
if(!isset($\u POST[“submitbutton”])){
echo“单击此按钮保存您的输入。”;
}否则{
$output=“”;
foreach($\u POST['tipp\u id']作为$key=>$tipp\u id){
如果($tipp_id>0){
$result=”
//SQL查询
";
$query=mysqli\u查询($conn,$result);
如果($query){
$output.=“成功。
”; }否则{ $output.=“失败。
”; } }否则{ $output.=“未保存任何内容。”; } } echo$输出; }
您可以通过添加标志来实现这一点

if(!isset($_POST["submitbutton"])) {
  echo "Click this button to save your input.";
} else {
  $flag_success = True;
  foreach($_POST['tipp_id'] as $key => $tipp_id) {
    if($tipp_id > 0) {
      $result="
      //SQL query
      ";
      $query=mysqli_query($conn,$result);
      if($query) {
      } else {
        $flag_success = False;
      }
    } else {
      echo "Nothing saved.";
    }
  }
  if($flag_success)
    echo "success";
  else
    echo "error";
}

基本思想是,我们假设所有事务在启动时都是成功的。现在,如果有错误,我们将布尔标志设置为false。然后最后检查foreach循环外部的状态标志,并相应地打印输出

在循环之前设置一个变量,并在失败时更改它。然后再重复一遍

$msg = '';

if(!isset($_POST["submitbutton"])) {
    echo "Click this button to save your input.";
} else {
    foreach($_POST['tipp_id'] as $key => $tipp_id) {
        if($tipp_id > 0) {
            $result = "//SQL query";
            $query = mysqli_query($conn, $result);
            if(!$query) {
                $msg = 'Fail';
            }
        } else {
            $msg = 'Nothing saved.';
        }
    }
}
if(!empty($msg)) {
    echo $msg;
}

通常,如果要继续迭代数组(即遇到错误时不中断),可以执行以下操作:

$failureHappened = false;

foreach($arr as $elem) {
    // do whatever with $elem to check "success" or "failure"
    if (conditional_check($elem) == true) {
        // success
    } else {
        // failure
        $failureHappened = true;
    }
}

if ($failureHappened) {
    // error handling
} else {
    // success case, if you need to do anything here
}
如果在循环结束时,
$failureocated
仍然是
false
,则没有错误。如果为
true
,则会发生一个或多个错误/故障。如果您不特别关心是什么导致了这些错误,只关心发生了这些错误,那么这很有用。

if(!isset($\u POST[“submitbutton”])){
echo“单击此按钮保存您的输入。”;
}否则{
$failscont=0;
foreach($\u POST['tipp\u id']作为$key=>$tipp\u id){
如果($tipp_id>0){
$result=”
//SQL查询
";
$query=mysqli\u查询($conn,$result);
如果(!$query){
$failscont++;
}
}否则{
$failscont++;
}
}
echo($failscont==0)?“成功:”:“失败:
”; }
如果我理解正确,您希望在所有查询正常运行时打印“成功”,在查询失败时打印“失败”

为此,请使用一个临时变量来跟踪某个查询是否失败,并使用该变量进行打印。更新代码:

    if(!isset($_POST["submitbutton"])) {
     echo "Click this button to save your input.";
    } else {
      $temp = 0
      foreach($_POST['tipp_id'] as $key => $tipp_id) {
      if($tipp_id > 0) {
       $result="
       //SQL query
       ";
       $query=mysqli_query($conn,$result);
       if($query) {
         $temp = 1  // set the temporary variable accordingly
         //echo "Success.<br>";
       } else {
         $temp = 2
         //echo "Fail.<br>";
       }
      } else {
        echo "Nothing saved.";
     }
   }
    if($temp == 1) {
      echo "Success.<br>";
    } elseif($temp == 2) {
      echo "Fail.<br>";
    }
  }
if(!isset($_POST[“submitbutton”])){
echo“单击此按钮保存您的输入。”;
}否则{
$temp=0
foreach($\u POST['tipp\u id']作为$key=>$tipp\u id){
如果($tipp_id>0){
$result=”
//SQL查询
";
$query=mysqli\u查询($conn,$result);
如果($query){
$temp=1//相应地设置临时变量
//呼应“成功”
; }否则{ $temp=2 //回显“失败,
”; } }否则{ 呼应“什么都没救”; } } 如果($temp==1){ 呼应“成功”
; }elseif($temp==2){ 回显“失败,
”; } }
您可以创建一个数组和一些计数变量来获取成功/失败计数,并获取哪个查询不成功

<?php
$failed_query = array(); // create an empty array to get which query fails
$failed_count = 0; // count to come to know how many query failed
$success_count = 0; // count to come to know how many query succeed
if(!isset($_POST["submitbutton"])) {
  echo "Click this button to save your input.";
}else {
  foreach($_POST['tipp_id'] as $key => $tipp_id) {
    if($tipp_id > 0) {
      $result="//SQL query";
      $query=mysqli_query($conn,$result);
      if($query) { // if query runs
        $success_count++; // increase success counter
      } else {
        $failed_count++; // increase failed counter
        $failed_query[] = $result; // insert failed query to the array
      }
    }
  }
}
if($success_count > $failed_count){
    echo "final output is success";
 }else{
   echo "final output is failed";
 }
echo "query executed successfully(Number)".$success_count;
echo "query execution failed(Number)".$failed_count;
echo "Failed queries are <br/>";
echo "<pre/>";print_r($failed_query);
?>

注:-

1.你所期望的最终状态你将以成功或失败的形式获得

2.它将清楚地显示有多少查询成功执行,有多少查询失败


3.您还可以检查哪些查询失败以及原因(通过检查失败的数组)

您可以使用错误计数器:

<?php

if(!isset($_POST["submitbutton"])) {
  echo "Click this button to save your input.";
} else {
  $errors = 0;                   //<========== ERROR COUNTER.
  foreach($_POST['tipp_id'] as $key => $tipp_id) {
    if($tipp_id > 0) {
      $result="
      //SQL query
      ";
      $query=mysqli_query($conn,$result);
      if($query) {
        //echo "Success.<br>";
      } else {
        //echo "Fail.<br>";
        $errors++;             //<===========
      }
    } else {
      //echo "Nothing saved.";
      $errors++;               //<============
    }
  }
  if ( $errors == 0 )
       echo "Success";
  else echo "Fail";
}

?>


在for循环中设置一个变量,并使用它在for循环外设置消息。在
foreach
之前,添加一个布尔变量,例如
$fail\u occurrent=false
,默认为
false
,然后在循环中遇到故障时,将其设置为
true
。最后,检查值。到目前为止,您的代码和两个答案中似乎缺少的一件事是,如果出现错误,您不希望保存任何内容,这将需要一个事务。@JoseManuelAbarcaRodríguez这不会中断整个循环吗?即停止循环处理所有步骤?这不是我想要的:循环应该完成,然后检查消息,如果消息包含“失败”或“未保存任何内容”消息,我希望系统回显“失败”-否则“成功”。@chrissplague我刚刚编辑了问题并添加了此信息。感谢您的提示。如果运行1成功,运行2失败,运行3再次成功,该怎么办?虽然1次运行失败,但不会再次将
$temp
设置为1(=成功)吗?就是这样。非常感谢。
<?php
$failed_query = array(); // create an empty array to get which query fails
$failed_count = 0; // count to come to know how many query failed
$success_count = 0; // count to come to know how many query succeed
if(!isset($_POST["submitbutton"])) {
  echo "Click this button to save your input.";
}else {
  foreach($_POST['tipp_id'] as $key => $tipp_id) {
    if($tipp_id > 0) {
      $result="//SQL query";
      $query=mysqli_query($conn,$result);
      if($query) { // if query runs
        $success_count++; // increase success counter
      } else {
        $failed_count++; // increase failed counter
        $failed_query[] = $result; // insert failed query to the array
      }
    }
  }
}
if($success_count > $failed_count){
    echo "final output is success";
 }else{
   echo "final output is failed";
 }
echo "query executed successfully(Number)".$success_count;
echo "query execution failed(Number)".$failed_count;
echo "Failed queries are <br/>";
echo "<pre/>";print_r($failed_query);
?>
<?php

if(!isset($_POST["submitbutton"])) {
  echo "Click this button to save your input.";
} else {
  $errors = 0;                   //<========== ERROR COUNTER.
  foreach($_POST['tipp_id'] as $key => $tipp_id) {
    if($tipp_id > 0) {
      $result="
      //SQL query
      ";
      $query=mysqli_query($conn,$result);
      if($query) {
        //echo "Success.<br>";
      } else {
        //echo "Fail.<br>";
        $errors++;             //<===========
      }
    } else {
      //echo "Nothing saved.";
      $errors++;               //<============
    }
  }
  if ( $errors == 0 )
       echo "Success";
  else echo "Fail";
}

?>