Вставить данные в цикл и повторить только один раз - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть php-скрипт с SQL-запросом, который находится внутри цикла foreach, и если запрос успешно выполняется, он должен повторять «Success», но, поскольку он находится внутри цикла, он повторяет «success» несколько раз, но я хочу только отображать «Успех» один раз. Я видел другие подобные темы здесь, и я смотрел на них и пытался решить мою проблему из этих потоков, но я не смог решить эту проблему из других потоков, поэтому, пожалуйста, не отмечайте это как дубликат.

В любом случае, вот мой код

<?php
session_start();
include('../../config/dbconf.php');

foreach($_POST['entry'] as $entryid) {
  $stmt = $authconn->prepare("UPDATE account SET dp = dp - ? WHERE username = ?");
  $stmt->bind_param("is", $_POST['price'], $_SESSION['classicusr']);
  if($stmt->execute()) {
    echo "Success";
  }else{
    echo "Failed";
  }
}
?>

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Видя, что вы ничего не говорите об операторе Failed, что-то подобное может сработать.Все, что для этого нужно - установить простой флаг.

<?php
session_start();
include('../../config/dbconf.php');

$feedbackGiven = FALSE;
foreach($_POST['entry'] as $entryid) {
  $stmt = $authconn->prepare("UPDATE account SET dp = dp - ? WHERE username = ?");
  $stmt->bind_param("is", $_POST['price'], $_SESSION['classicusr']);
  if($stmt->execute()) {
    if (!$feedbackGiven)
    {
      echo "Success";
      $feedbackGiven = TRUE;
    }
  }else{
    echo "Failed";
  }
}
?>
0 голосов
/ 19 ноября 2018

Вы могли бы попробовать что-то подобное?

Кроме того, нет необходимости готовиться к каждой итерации цикла.

<?php
session_start();
include('../../config/dbconf.php');


$bError = false;

$authconn->prepare("UPDATE account SET dp = dp - ? WHERE username = ?");       

foreach($_POST['entry'] as $entryid) {   

     $stmt = $stmt->bind_param("is", $_POST['price'], $_SESSION['classicusr']);

     try{

    if(!$stmt->execute()) {
      $bError = true;
      // optional break and do not process further
      // break;
      $stmt = $stmt->errorInfo()
    }

  }catch (PDOException Exception){
      $bError = true;
      // additional erorr logging here. Could add to a delimetered string to report on later   } }

echo ($bError ? 'Failure' : 'Success' );

?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...