У меня есть PHP-скрипт с SQL-запросом, который находится внутри цикла foreach, и если запрос успешно выполняется, он должен отображать "Success", но, поскольку он находится внутри цикла, он повторяет "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";
}
}
?>
Вы могли бы попробовать что-то вроде этого?
Также нет необходимости готовиться к каждой итерации цикла.
<?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' );
?>
Поскольку вы ничего не говорите об операторе 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";
}
}
?>