Как правильно отправить значение переменной из JS на php с помощью Axios?

Рейтинг: 0Ответов: 0Опубликовано: 29.04.2023

index.php:

<?php 
    require_once 'connect.php';
    $account = mysqli_query($connect, "SELECT * FROM `userBankAccount`");
    $account = mysqli_fetch_all($account);
    $expenses = mysqli_query($connect, "SELECT * FROM `Expenses`");
    $expenses = mysqli_fetch_all($expenses);
    ?>
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>CoinKeeper</title>
    </head>
    <body>
        <form id="myForm" method="POST" action="update.php">
            <input type="number" name='value' id="myInput">
        <select name="expenses">
            <?php 
                    foreach ($expenses as $expense) {
                        $expense_id = $expense[0];
                        $expense_name = $expense[1];
                        echo '<option value="' . $expense_id . '">'. $expense_name .'</option>';
                    }
                    ?>
        </select>
        <button type="submit">Сохранить</button>
        <br>
        <div id = 'btnsAndInputs'>
            <button type="button" id="new">Задать новый счет</button> 
            <button type="button" id="clearExpenses">Очистить траты</button> 
            <button type="button" id="addNewExpenses">Добавить новый вид трат</button> 
            <br>
        </div>
        <br>
    <table>
        <tbody id = "output">
            <tr>
                <th>
                    ID
                </th>
                <th>
                    Cost type
                </th>
                <th>
                    Expenses for type
                </th>
            </tr>
            <?php
                    echo $account[0][0] . "$";
                    if ($_SESSION['flag'] == true) {
                        echo "У вас недостаточно средств";
                    }
                    foreach ($expenses as $expense): 
                    $i++;
                ?>
                
                    <tr >
                        <td><?= $expense[0]?></td>
                        <td><?= $expense[1]?></td>
                        <td><?= $expense[2]. "$"?></td>
                        <td><a href="update.php?deleteId=<?= $i ?>">Удалить</a></td>
                        <td><a class="change" href="update.php?changeId=<?= $i ?>">Изменить</a></td>
                    </tr>
                <?php endforeach; 
                    var_dump($_POST['changeId']);
                ?>
            </tbody>
        </table>
        </form>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    <script src="script.js"></script>
</body>
</html>

update.php
<?php 
    require_once "connect.php";
    $account = mysqli_query($connect, "SELECT * FROM `userBankAccount`");
    $account = mysqli_fetch_all($account);
    $expenses = mysqli_query($connect, "SELECT * FROM `Expenses`");
    $expenses = mysqli_fetch_all($expenses);

    var_dump($_POST['asd']);
    var_dump($_POST['changed']);

    if (isset($_POST['changed'])) {
        var_dump($_POST['changed']);
    }

    if (isset($_POST['newAccount'])) {
        $newAccountValue = $_POST['newAccount'];
        mysqli_query($connect, "UPDATE `userBankAccount` SET `account` = '$newAccountValue' WHERE 1");
    }

    if (isset($_POST['addNewExpenses'])) {
        $sql = "INSERT INTO Expenses (cost_type, expenses_for_type) VALUES ('".$_POST['addNewExpenses']."', 0)";
        mysqli_query($connect, $sql);
    }

    if (isset($_GET['deleteId'])) {
        $id = $_GET['deleteId'];
        mysqli_query($connect, "DELETE FROM Expenses WHERE id = $id");
        
        mysqli_query($connect, "SET @count = 0");
        mysqli_query($connect, "UPDATE Expenses SET id = @count:= @count + 1");
        mysqli_query($connect, "ALTER TABLE Expenses AUTO_INCREMENT = 1");
    }

    if($_POST['value'] > 0) {
        if($account[0][0] < $_POST['value']) {
            $_SESSION['flag'] = true;
        }
        else {
            $selected_expense_id = $_POST['expenses'];
            $selected_expense = mysqli_query($connect, "SELECT * FROM `Expenses` WHERE `id` = $selected_expense_id");
            $selected_expense = mysqli_fetch_array($selected_expense);
            $expenses_for_type = $selected_expense['expenses_for_type'] + $_POST['value'];
            mysqli_query($connect, "UPDATE `Expenses` SET `expenses_for_type` = $expenses_for_type WHERE `id` = $selected_expense_id");
            mysqli_query($connect, "UPDATE userBankAccount SET account = account - '" . $_POST['value'] . "' WHERE 1");
            $_SESSION['flag'] = false;
        }}
        
        
    // header('Location: index.php');
    // exit;
?>

connection.php
<?php 
    session_start();
    $connect = mysqli_connect('localhost','root','','CoinKeeper');
    if(!$connect) {
        die('Ошибка');
    }
?>

script.js:

let form = document.querySelector('form');
let mainInput = document.querySelector('input');
let newAccount = document.getElementById('new');
let clearExpenses = document.getElementById('clearExpenses');
let addNewExpenses = document.getElementById('addNewExpenses');
let btnsAndInputs = document.getElementById('btnsAndInputs');
let secondInput = null;
let thirdInput = null;
const changes = document.getElementsByClassName('change');
let id;
for (let i = 0; i < changes.length; i++) {
  changes[i].addEventListener('click', function(event) {
    event.preventDefault(); // предотвращаем переход по ссылке
    if (thirdInput) {
      // Если input уже создан, то удаляем его
      thirdInput.remove();
      thirdInput = null;
    } else {
    thirdInput = document.createElement('input');
    const tr = this.parentNode.parentNode; // получаем родительский элемент (строку таблицы)
    const td = document.createElement('td'); // создаем новый элемент td
    td.appendChild(thirdInput = document.createElement('input')); // добавляем текст в новый элемент
    tr.insertBefore(td, this.parentNode.nextSibling); // вставляем новый элемент после ячейки с ссылкой
    thirdInput.setAttribute("placeholder", "Введите измененную сумму");
    thirdInput.setAttribute("name", "changed");
    thirdInput.setAttribute("id", "changed");
    id = tr.getElementsByTagName("td")[0].innerText.trim();
    console.log(id);
    axios.post('update.php', {
      'id': id,
    }).then(function(res) {
      console.log(res)
    }).catch(function(error){
      console.log(error)
    })
  }});
}



newAccount.addEventListener('click', function(event) {
  if (secondInput) {
    // Если input уже создан, то удаляем его
    secondInput.remove();
    secondInput = null;
  } else {
    // Если input еще не создан, то создаем его
    secondInput = document.createElement('input');
    btnsAndInputs.appendChild(secondInput);
    secondInput.setAttribute("name", "newAccount");
    secondInput.setAttribute("id", "newAccount");
    secondInput.setAttribute("placeholder", "Введите новый счет");
    secondInput.setAttribute("type", "number");
  }
});


addNewExpenses.addEventListener('click', function(event) {
  if (secondInput) {
    // Если input уже создан, то удаляем его
    secondInput.remove();
    secondInput = null;
  } else {
    // Если input еще не создан, то создаем его
    secondInput = document.createElement('input');
    btnsAndInputs.appendChild(secondInput);
    secondInput.setAttribute("name", "addNewExpenses");
    secondInput.setAttribute("id", "addNewExpenses");
    secondInput.setAttribute("placeholder", "Введите новый вид трат");
  }
});

form.addEventListener('submit', function(event) {
  event.preventDefault;
  let value = new FormData(form).get('value');
  console.log(value);
  axios.post('update.php', {
    'value': value,
  }).then(function(res) {
    console.log(res)
  }).catch(function(error){
    console.log(error)
  })
});

Не могу отправить ID в PHP

id = tr.getElementsByTagName("td")[0].innerText.trim();
console.log(id);

Здесь

    axios.post('update.php', {
      'id': id,
    }).then(function(res) {
      console.log(res)
    }).catch(function(error){
      console.log(error)
    })

Ответы

Ответов пока нет.