¿Cómo substraer un valor del número de entrada y del valor de la base de datos (recibido)? Después de restar, actualice el saldo actual de la consulta de actualización

Comienzo aquí. ¿Hay una manera en la que puedo restar un valor de la base de datos y el número de tipo de entrada? Después de restar, los puntos actuales se actualizarán después de hacer clic en el "Insert Submit Button". He proporcionado la captura de pantalla con más explicación. Gracias por adelantado. Además, actualicé una consulta de actualización. Pero no hay subtracción o nada.

An image with explanation about my target

Vistas:





change id's name to betAmount

CURRENT WALLET: php echo $_SESSION['currentPoints']?

REMAINING BALANCEE:

Controlador:

php

class Auth extends MX_Controller
{

 public function form_validation()
    {
        $this-form_validation->set_rules('bet','bet', 'required|numeric');
        if($this->form_validation->run())
    {
        $data = array(

            'bet' =>$this->input->post('bet'),
        );
    $this->db->insert('bettaya',$data);  
        $this->load->view('bet');
    }
}
    public function inserted()
    {
        $this->index();
        $this->session->set_flashdata("success","Your account has been registered. You can log in now");
        
    }



  function updateData($id) {
        $data = array (
            'bet' => $this->input->post('bet'),
        );
        $this->db->where('id', $id);
        $this->db->update('users', $data);
    }
    
    }

Pregunta hecha hace 3 años, 4 meses, 28 días - Por nodenomad


3 Respuestas:

  • Esta es una edición que puedes hacer a tu updateData() función en su archivo Controller. Debe ser llamado lo que podría hacer editando su etiqueta de formulario:

    ¿Cómo está pasando su id de usuario ($id)? (He predeterminado el user_id = 49 como en tu ejemplo).

    public function updateData($id=49) {
        
        // load Model
        $this->load->model("Auth_model);
    
    
        // get currentPoints from the database ...
        $query          = $this->Auth_model->get_current_points($id); // user id
        $current_points = $query->row(0, 'currentPoints'); 
    
        $data = array (
            'bet' => $this->input->post('bet'),
        );
    
        $data['remainingBalance'] = $current_points - $data['bet'];
    
        $this->db->where('user_id', $id);
        $this->db->update('users', $data);
    }
    
    
    
    // Something like this should be added to your Model file to get currentPoints
    
    public function get_current_points($id)
    {
        $id    = $this->db->escape($id);
        $query = $this->db->query("SELECT * FROM users WHERE user_id = $id LIMIT 1");
        return $query;
    }
    

    Respondida el Dec 17, 2020 a las 11:24 - por syntaxsorcerer

    Votos positivos: 0 | Votos negativos: 0

  • Para lograr restar un valor del número de entrada y del saldo actual de la base de datos, y luego actualizar el saldo actual después de hacer clic en el botón "Insert Submit", necesitas hacer algunas modificaciones en tu código. Aquí te dejo una guía de cómo hacerlo:

    • Asegúrate de que estás recibiendo la variable de sesión `$_SESSION['currentPoints']` correctamente y que tenga un valor numérico.
    • En el script jQuery que tienes en tu vista, debes realizar la resta del valor ingresado en el campo de entrada con el saldo actual, y luego mostrar el saldo restante en el elemento `betAmountResult`.
    • Después de realizar la resta, al hacer clic en el botón "Insert Submit", debes enviar ese nuevo saldo a través de una solicitud AJAX al controlador para que actualice el saldo en la base de datos.

    Aquí te dejo un ejemplo de cómo podrías modificar tu script jQuery y tu controlador para lograr esto:

    Script jQuery:

    javascript
    $(function() {
      $("insert").on("click", function (e) {    e.preventDefault();
        const betAmount = $("box").val();    const walletAmount = ; // tu saldo actual
        const remainingAmount = walletAmount - betAmount;
    
        if (remainingAmount >= 0) {
          $("betAmountResult").text(remainingAmount);
          $.ajax({
            type: "POST",
            url: "",
            data: { newBalance: remainingAmount },
            success: function(response) {
              // Actualización exitosa, puedes mostrar un mensaje o realizar otras acciones
            }
          });
        } else {
          $("betAmountResult").text('Error, not enough balance');    }
      });
    });
    

    Controlador:

    php
    public function update_balance()
    {
        if ($this->input->post('newBalance')) {
            $newBalance = $this->input->post('newBalance');
    
            // Aquí debes actualizar el saldo en la base de datos
            $this->session->set_userdata('currentPoints', $newBalance);
            // También puedes actualizar el saldo en tu tabla de usuarios o donde se almacene el saldo
    
            echo "Balance updated successfully!";
        } else {
            echo "Error updating balance!";
        }
    }
    

    Con estas modificaciones, deberías poder restar el valor ingresado en el campo de entrada del saldo actual, mostrar el saldo restante y actualizar el saldo en la base de datos al hacer clic en el botón "Insert Submit". Asegúrate de adaptar este código a tu estructura de base de datos y aplicación. ¡Espero que te sea de ayuda!

    Respondida el Dec 18, 2020 a las 11:23 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • La función updateData en tu controlador actualmente no resta el valor de entrada del valor de la base de datos y no actualiza el saldo actual. Aquí tienes una versión corregida de la función que restará el valor de entrada y actualizará el saldo actual:

    php
    function updateData($id) {
        $betAmount = $this->input->post('bet');
        $currentPoints = $this->db->get_where('users', array('id' => $id))->row()->points;
        $remainingPoints = $currentPoints - $betAmount;
    
        $data = array(
            'bet' => $betAmount,
            'points' => $remainingPoints, // Actualiza el saldo actual
        );
    
        $this->db->where('id', $id);
        $this->db->update('users', $data);
    }
    

    Esta función primero obtiene el valor de entrada y el saldo actual de la base de datos. Luego resta el valor de entrada del saldo actual y almacena el resultado en remainingPoints. Finalmente, actualiza la base de datos con el nuevo valor de apuesta y el saldo actual actualizado.

    Respondida el Dec 18, 2020 a las 11:27 - por Gemini

    Votos positivos: 0 | Votos negativos: 0