Баланс - MySQL

Узнай цену своей работы

Формулировка задачи:

Как сделать, чтобы при нулевом балансе выдавало ошибку и не записывались данные в таблицу? Есть две таблицы одна usertbl(id,username,password,balance) articles(id, gnumber, telephone, author, publicationdate)
<?php session_start();

if(!isset($_SESSION["session_username"])):
header("location:login.php");
else:
?>
<?php
 
if(isset($_POST["add"])){
 
$gnumber= htmlspecialchars($_POST['gnumber']);
$telephone=htmlspecialchars($_POST['telephone']);
$author=htmlspecialchars($_POST['author']);
$publicationdate=htmlspecialchars($_POST['publicationdate']);

if(!empty($gnumber) && !empty($telephone) && !empty($author)  && !empty($publicationdate)) {
    $sql="INSERT INTO articles (gnumber, telephone, author, publicationdate) VALUES ('$gnumber','$telephone', '$author', '$publicationdate' )";
$result=mysqli_query($con, $sql);
$editbalance="UPDATE usertbl SET balance=balance-1 WHERE username='".$_SESSION['session_username']."'";
    $minus=mysqli_query($con, $editbalance);
    header("Cache-Control: no-store,no-cache,mustrevalidate");
} else {
$message = "Имя пользователя уже занято!";
}
 
} else {
 
$message = "Все поля обязательны для заполнения!";
 
}

?>

<?php
$balance = mysqli_query ($con, "SELECT * FROM usertbl WHERE username='".$_SESSION['session_username']."'");
while ($myrow = mysqli_fetch_assoc ($balance))
 {echo '<b>Баланс: '. $myrow['balance'].'</b>';}?>

Решение задачи: «Баланс»

textual
Листинг программы
<?php session_start();
 
 
if(!isset($_SESSION["session_username"])):
header("location:login.php");
else:
?>
<?php
 
if(isset($_POST["add"])){
 
    $gnumber= htmlspecialchars($_POST['gnumber']);
    $telephone=htmlspecialchars($_POST['telephone']);
    $author=htmlspecialchars($_POST['author']);
    $publicationdate=htmlspecialchars($_POST['publicationdate']);
    
    $balance = mysqli_query ($con, "SELECT username FROM usertbl WHERE username='".$_SESSION['session_username']."' AND balance>0");
    
    if (mysqli_num_rows($balance) > 0) {
        if(!empty($gnumber) && !empty($telephone) && !empty($author)  && !empty($publicationdate)) {
            $sql="INSERT INTO articles (gnumber, telephone, author, publicationdate) VALUES ('$gnumber','$telephone', '$author', '$publicationdate' )";
            $result=mysqli_query($con, $sql);
            $editbalance="UPDATE usertbl SET balance=balance-1 WHERE username='".$_SESSION['session_username']."'";
            $minus=mysqli_query($con, $editbalance);
            header("Cache-Control: no-store,no-cache,mustrevalidate");
        } else {
            $message = "Имя пользователя уже занято!";
        }
    } else {
        $message = "Недостаточно баланса на счету!";
    }
 
} else {
 
    $message = "Все поля обязательны для заполнения!";
 
}
 
 
?>
 
 
<?php
$balance = mysqli_query ($con, "SELECT * FROM usertbl WHERE username='".$_SESSION['session_username']."'");
while ($myrow = mysqli_fetch_assoc ($balance))
 {echo '<b>Баланс: '. $myrow['balance'].'</b>';}?>

Объяснение кода листинга программы

  1. Стартует сессия PHP
  2. Проверяется, установлена ли переменная сессии session_username. Если нет, то происходит перенаправление на страницу входа в систему.
  3. Проверяется, был ли отправлен POST-запрос с ключом add. Если да, то выполняется следующий код.
  4. Значения переменных $gnumber, $telephone, $author и $publicationdate получают специальную обработку, чтобы предотвратить SQL-инъекции.
  5. Выполняется SQL-запрос, чтобы выбрать имя пользователя из таблицы usertbl, где имя пользователя равно значению переменной сессии session_username и баланс больше 0.
  6. Если в результате запроса есть строки, то проверяется, не пустые ли значения переменных $gnumber, $telephone, $author и $publicationdate. Если все они не пустые, то выполняется следующий код.
  7. Выполняется SQL-запрос для вставки новой записи в таблицу articles с значениями переменных $gnumber, $telephone, $author и $publicationdate.
  8. Выполняется SQL-запрос для обновления баланса в таблице usertbl, где имя пользователя равно значению переменной сессии session_username, и баланс уменьшается на 1.
  9. Если произошли ошибки при выполнении SQL-запросов, то выводится сообщение об ошибке.
  10. Если баланс на счету пользователя после вычета 1 равен 0, то выводится сообщение Недостаточно баланса на счету!.
  11. Если не все поля формы заполнены, то выводится сообщение Все поля обязательны для заполнения!.
  12. Выполняется SQL-запрос для выбора всех данных из таблицы usertbl, где имя пользователя равно значению переменной сессии session_username.
  13. В цикле while выводятся данные из последней SQL-запроса, включая баланс пользователя.

Оцени полезность:

7   голосов , оценка 4.143 из 5