2016-06-24 8 views
2

以下のループforeachをループすると、ループが実行されるたびにechoの出力が得られます。これらのメッセージを最終メッセージ1つに減らすにはどうすればよいですか?foreachループのメッセージを1つだけ表示

I.e. "success messages"の場合はエコー"Success"、エラーが発生した場合は("fail" or "nothing saved" message)エコー"Fail"です。ループは、エラーが発生しても完全に処理されてはならない。そして最後に、エラーが発生したか結果が保存されていないかを知りたいだけです。

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."; 
    } 
    } 
} 
+0

は、forループで変数を設定し、設定するためにそれを使用しますforループの外側にあるメッセージです。 –

+1

の 'foreach'の前に' $ fail_happened = false; 'のようなブール型変数を追加し、デフォルトで' false'を指定すると、ループでエラーが発生したときに 'true'に設定します。最後に、値を確認します。 –

+1

あなたのコードとこれまでの両方の答えに欠けているようなものは、トランザクションが必要なエラーの場合には何も保存しないことです。 –

答えて

4

ひとつひとつがあなたに答えを示唆しました。私の提案は以下の通りです: -

<?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.Yourはあなたが成功したか失敗したの形で取得する最終ステータスを希望しました。

2.正常に実行されたクエリの数と失敗した回数を明確に把握できます。

あなたは

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

これは、1つの文字列で多くのメッセージを収集すると思います。 –

0

あなたはフラグを追加することで、これを持つことができます。

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"; 
} 

基本的な考え方は、開始時にすべてのトランザクションが成功したと仮定しているということです。さて、エラーがあった場合、booleanフラグをfalseに設定します。最後に、foreachループの外側にあるステータスフラグを確認し、それに応じて出力を出力してください。

2

ループの前に変数を設定し、失敗するとその値を変更してください。その後、それをエコーし​​ます。

$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; 
} 
0

あなたは、一般的には、配列(エラーが発生したすなわちないbreak ING、)を反復継続したい場合は、あなたが行うことができます:

$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 
} 

$failureHappenedはまだ終わりfalseある場合ループの中にエラーがなかったとします。 trueの場合、1つ以上のエラー/障害が発生しました。これは、エラーの原因を特に気にせず、そのようなエラーが発生した場合に便利です。

0
if(!isset($_POST["submitbutton"])) { 
    echo "Click this button to save your input."; 
} else { 
    $failsCount = 0; 
    foreach($_POST['tipp_id'] as $key => $tipp_id) { 
    if($tipp_id > 0) { 
     $result=" 
     //SQL query 
     "; 
     $query=mysqli_query($conn,$result); 
     if(!$query) { 
     $failsCount++; 
     } 
    } else { 
     $failsCount++; 
    } 
    } 
    echo ($failsCount == 0) ? "Success.<br>" : "Fail.<br>"; 
} 
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>"; 
    } 
    } 
+0

実行1が成功すると実行2が失敗し、実行3が再び成功するとどうなりますか? 1回の実行に失敗したにもかかわらず、 '$ temp'を1(=成功)に再度設定しないでしょうか? – mario

1

あなたはエラーカウンタを使用することができます(故障したアレイをチェックすることで)失敗した問い合わせ、なぜこれをチェックすることができ3.Also:

<?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"; 
} 

?> 
+1

それはまさにそれです。ありがとうございました! – mario

関連する問題