Get input value from selected Row

Asked

Viewed 130 times

1

Hello! I will try to explain my purpose in the best possible way.
I started studying PHP a little while ago, I am doing a registration system and buying products only for learning, but I am facing a small problem.
I have my products registered with their proper keys in a datatable. I manipulate these products, logically, through a connection to the database. Next I have the page php products. which is intended to display the products present in the database and allow the logged-in user to add them to their shopping cart. The problem is: I’m not getting the quantity inserted in input for the requested product. Follow my file php products.:

$sql = "SELECT id_produto, nome_produto, preco_produto FROM produtos ORDER BY id_produto";
$stmt = $conexao->prepare($sql);
$stmt->execute();

$num = $stmt->rowCount();

if($num>0)
{
        echo "<table>";
        echo "  <tr>";
        echo "      <th>NOME</th>";
        echo "      <th>PREÇO</th>";
        echo "      <th>QUANTIDADE</th>";
        echo "  </tr>";
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
    {
        extract($row);
        $preco_produto_reajustado = number_format($preco_produto, 2, ",", ".");
        echo "  <tr>";
        echo "      <td><div class='id-produto' style='display: none'>{$id_produto}</div>";
        echo "      <div class='nome-produto'>{$nome_produto}</div></td>";
        echo "      <td>R&#36;{$preco_produto_reajustado}</td>";
        echo "      <td>";
        echo "          <form class='adicionar'>";
        echo "          <input type='number' name='quantidade' value='1' min='1' max='20'/>";
        echo "          <button type='submit'>Adicionar</button>";
        echo "          </form>";
        echo "      </td>";
        echo "  </tr>";
    }
        echo "</table>";
}
else
{
    echo "Sem produtos.";
}

As you can see, the add link points to the file add.php. In this file I create a SESSION and store the matrices I obtained from the Row previously selected in php products.. This way, the product in question is stored in SESSION along with its details. Follow my file add.php:

<?php
    require_once("detectar-erros.php");
    session_start();

    $id_produto = isset($_GET['id_produto']) ? $_GET['id_produto'] : "";
    $nome_produto = isset($_GET['nome_produto']) ? $_GET['nome_produto'] : "";
    $quantidade = isset($_GET['quantidade']) ? $_GET['quantidade'] : "";

    if(!isset($_SESSION['carrinho']))
    {
        $_SESSION['carrinho'] = array();
    }

    if(array_key_exists($id_produto, $_SESSION['carrinho'])){

        header('Location: produtos.php?acao=existe&id_produto' . $id_produto . '&nome_produto=' . $nome_produto);
    }
    else    
    {
        $_SESSION['carrinho'][$id_produto]=$nome_produto;
        header('Location: produtos.php?acao=adicionado&id_produto' . $id_produto . '&nome_produto=' . $nome_produto);
    }
?>

I’m not sure how to set the value of input for the variable $quantidade.
How to proceed? I thank you in advance for any help and ask for forgiveness for any mistakes!

  • I think the best way was to use a POST form and forget about GET. Or else you have to use JS to change the value.

  • @Jorgeb.I’ve been trying something similar, but it seems that what makes it impossible for me to do this is the while loop, because it’s creating several inputs with the same name, and the way I put it here in the code is not working <input type='number' name="quantidade[$row['id']]" value='1'/>

  • you can’t give this name because you can have several equal amounts. You have to give one name that doesn’t happen again so you can catch the input afterward

  • @Jorgeb. After much study I was able to solve my problem by myself using jQuery and matrices for the SESSION. Thanks anyway.

  • Make an answer with that.

  • @Jorgeb. Done.

Show 1 more comment

1 answer

3


After researching and studying, I was able to solve my problem using jQuery and inserting the matrices inside the SESSION. I’ll post the code here so that in the future I can help anyone who goes through the same problem. On the page php products.:

$(document).ready(function()
{
    $('.adicionar').on('submit', function()
    {
        var id_produto = $(this).closest('tr').find('.id-produto').text();
        var nome_produto = $(this).closest('tr').find('.nome-produto').text();
        var quantidade = $(this).closest('tr').find('input').val();
        window.location.href = "adicionar.php?id_produto=" + id_produto + "&nome_produto=" + nome_produto + "&quantidade=" + quantidade;
        return false;
    });
});

In the archive add.php:

if (isset($_GET['id_produto']) && $_GET['id_produto'] != "")
{
    $id_produto = isset($_GET['id_produto']) ? $_GET['id_produto'] : "";
    $nome_produto = isset($_GET['nome_produto']) ? $_GET['nome_produto'] : "";
    $quantidade = isset($_GET['quantidade']) ? $_GET['quantidade'] : "";

    $sql = "SELECT * FROM produtos WHERE id_produto LIKE '{$id_produto}' AND nome_produto LIKE '{$nome_produto}' LIMIT 1";
    $stmt = $conexao->prepare($sql);
    $stmt->execute();

    $num = $stmt->rowCount();

    while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
    {
        extract($row);
        $colunas = array
        (
            'id_produto' => $id_produto,
            'nome_produto' => $nome_produto,
            'preco_produto' => $preco_produto,
            'quantidade' => $quantidade
        );
    }

    if(!isset($_SESSION['carrinho']))
    {
        $_SESSION['carrinho'] = array();
    }

    if(array_key_exists($id_produto, $_SESSION['carrinho']))
    {
        header('Location: produtos.php?acao=existe&id_produto=' . $id_produto . '&nome_produto=' . $nome_produto);
    }
    else if($quantidade <= 0 || $quantidade > 20)
    {
        header('Location: produtos.php?acao=quantidadeinvalida&id_produto=' . $id_produto . '&nome_produto=' . $nome_produto);
    }
    else if($num != 1)
    {
        redirecionar_para("produtos.php");
    }
    else
    {
        $_SESSION['carrinho'][$id_produto] = $colunas;
        header('Location: produtos.php?acao=adicionado&id_produto=' . $id_produto . '&nome_produto=' . $nome_produto);
    }
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.