Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Gabriel R

Preciso de ajuda com um trabalho

Recommended Posts

Boa tarde, estou fazendo um trabalho de escola, e o meu projeto é sobre caixa de supermercado.

 

<form action="index.php" method="post">
    <input type="text" class="form-control" name="busca" placeholder="Codigo do Produto" >
    <input type="text" class="form-control" name="quantidade" value="0" >
    <?php
    $con = new mysqli('localhost', 'root', '', 'mercado');
    $texto = $_POST['busca'];
    $texto2 = $_POST['quantidade'];
    $buscar = "SELECT codigo,nome, preco FROM produtos WHERE codigo LIKE '%".$texto."%'";
    $res = $con->query($buscar);
    if ($res->num_rows >0){
        $produtos = $res->fetch_all(MYSQLI_ASSOC);
    }
    ?>

    <input type='submit' value='Enviar'>
    <a href="contas.php">FINALIZAR</a>
    <a href="../../index.html">VOLTAR</a>

</form>
<table class="table table-bordered">

    <thead>
    <tr>
        <th>Codigo</th>
        <th>Nome</th>
        <th>Preco</th>
        <th>Total Item</th>
        <th>Total</th>

    </tr>
    </thead>

    <tbody>

    <?php
    foreach($produtos as $p){
        ?>
        <tr>
            <td><?php echo $p['codigo']; ?></td>
            <td><?php echo $p['nome']; ?></td>
            <td><?php echo $p['preco']; ?></td>
            <?php $total = $p['preco'] * $texto2; ?>
            <td><?php echo "R$: " . $total; ?></td>
            <?php $total1 = $total;
              $total1 = $total1 + $total?>
            <td><?php echo $total1;?></td>

        </tr>
        <?php
    }

    ?>
    </tbody>
</table>

O que quero resolver, é que o $total1 mostre a soma do $total + $total(ou seja a cada select quero que o $total some com o $total anterior)

Porem quando faco select, o resultado não aparece o que quero. 

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro ta exatamente nessas 2 linhas que está dentro do foreach:

$total1 = $total;
$total1 = $total1 + $total?>

Toda vez que o foreach dá um looping o $total1 vai receber esse cálculo:

$total = $p['preco'] * $texto2;

Em outras palavras, $total1 é sempre "resetado", por isso os valores não são somados em seu valor total.

Pra resolver é só tirar esse cara aqui, não faz sentido nenhum ele ta no código:

$total1 = $total;

Código corrigido:

form action="index.php" method="post">
    <input type="text" class="form-control" name="busca" placeholder="Codigo do Produto" >
    <input type="text" class="form-control" name="quantidade" value="0" >
    <?php
    $con = new mysqli('localhost', 'root', '', 'mercado');
    $texto = $_POST['busca'];
    $texto2 = $_POST['quantidade'];
    $buscar = "SELECT codigo,nome, preco FROM produtos WHERE codigo LIKE '%".$texto."%'";
    $res = $con->query($buscar);
    if ($res->num_rows >0){
        $produtos = $res->fetch_all(MYSQLI_ASSOC);
    }
    ?>

    <input type='submit' value='Enviar'>
    <a href="contas.php">FINALIZAR</a>
    <a href="../../index.html">VOLTAR</a>

</form>
<table class="table table-bordered">

    <thead>
    <tr>
        <th>Codigo</th>
        <th>Nome</th>
        <th>Preco</th>
        <th>Total Item</th>
        <th>Total</th>

    </tr>
    </thead>

    <tbody>

    <?php
// inicia o $total1 com 0 pra não resultar em variável indefinida ali embaixo
$total1 = 0; 
    foreach($produtos as $p){
        ?>
        <tr>
            <td><?php echo $p['codigo']; ?></td>
            <td><?php echo $p['nome']; ?></td>
            <td><?php echo $p['preco']; ?></td>
            <?php $total = $p['preco'] * $texto2; ?>
            <td><?php echo "R$: " . $total; ?></td>
            <?php 
// esse cara aqui que tava atrapalhando --> $total1 = $total;
$total1 = $total1 + $total;
// outra sintaxe que você pode usar é essa aqui:
// $total1 += $total;
			?>
            <td><?php echo $total1;?></td>

        </tr>
        <?php
    }

    ?>
    </tbody>
</table>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

A sua ideia é boa,mas não resolveu meu problema.O $total1 continua mostrando o resultado do $total.O que eu queria era que apos um select o $total1 permanecesse com o valor antigo e somasse com o novo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz um teste nesse código aqui e vê se é isso que você ta querendo:

form action="index.php" method="post">
    <input type="text" class="form-control" name="busca" placeholder="Codigo do Produto" >
    <input type="text" class="form-control" name="quantidade" value="0" >
    <?php
    $con = new mysqli('localhost', 'root', '', 'mercado');
    $texto = $_POST['busca'];
    $texto2 = $_POST['quantidade'];
    $buscar = "SELECT codigo,nome, preco FROM produtos WHERE codigo LIKE '%".$texto."%'";
    $res = $con->query($buscar);
    if ($res->num_rows >0){
        $produtos = $res->fetch_all(MYSQLI_ASSOC);
    }
    ?>

    <input type='submit' value='Enviar'>
    <a href="contas.php">FINALIZAR</a>
    <a href="../../index.html">VOLTAR</a>

</form>
<table class="table table-bordered">

    <thead>
    <tr>
        <th>Codigo</th>
        <th>Nome</th>
        <th>Preco</th>
        <th>Total Item</th>
        <th>Total</th>

    </tr>
    </thead>

    <tbody>

    <?php
$total1 = 0;
    foreach($produtos as $p){
        ?>
        <tr>
            <td><?php echo $p['codigo']; ?></td>
            <td><?php echo $p['nome']; ?></td>
            <td><?php echo $p['preco']; ?></td>
            <?php 
$total = $p['preco'] * $texto2; 
$total1 = $total1 + $total;
          	?>
            <td><?php echo "R$: " . $total; ?></td>=
            <td>---testando---</td>
        </tr>
        <?php
    }
print_r($total1);
    ?>
    </tbody>
</table>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
46 minutos atrás, Gabriel R disse:

A sua ideia é boa,mas não resolveu meu problema.O $total1 continua mostrando o resultado do $total.O que eu queria era que apos um select o $total1 permanecesse com o valor antigo e somasse com o novo.

 

Primeiramente se está a fazer um curso/aulas seu professor já errou ao lhe instruir a suar msqli.

Um professor que se preze já começa a introduzir o aluno usando PDO.

 

Pelo que percebi o que você quer a cada select some o valor do select anterior com o valor do select atual. Pois bem, nesse caso a cada select no arquivo a(s) var(s) são reescritas aplicando os valores do select atual, o que será impossível pegar os valores anteriores, a não ser que crie uma constant a cada select.

Então o que tem que fazer é pegar o valor que queira somar ao próximo select e armazenar-lo em uma var ou array permanente.

O que se aplica a armazenar o valor em uma $_SESSION por exemplo.

 

Debug:

Citar

$_SESSION['resultado']  += $total;

var_dump($_SESSION['resultado']);

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Osmar~, teria como você mostra esse seu codigo no meu codigo, nao sou muito bom em mexer em php, tanto que tive que pedir ajuda à amigos. E mais uma coisa, tem como tambem mostra como passa o resultado para outra pagina, pois nela eu preciso subtrair o resultado com um valor que irei colocar.

 

Grato.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
session_start(); // Registro de sessão

// Apenas para criar a váriável para o exemplo
if (empty($_SESSION['resultado'])) {
    $_SESSION['resultado'] = 0;
}

// Digamos então que meu select retorna 1 como valor
$valor_que_veio_na_query = 1;

// Pego a sessão e mando somar e atribuir o valor do select
$_SESSION['resultado'] += $valor_que_veio_na_query;

// Debug do resultado
var_dump($_SESSION['resultado']);

 

Quando se cria um sessão é uma array global pode ser acessada em qualquer arquivo dentro do mesmo endereço url e é permanente enquanto o navegador estiver acessando esse endereço.

Nesse caso aqui a GLOBAL session é criada em um arquivo, mas eu poderia em outro arquivo dar um echo nessa sessão que mostraria o mesmo resultado.

Mas deve-se primeiro verificar se o valor existe, ou se está vazio ou é nulo, porque nesses termos se tentar mostrar um resultado que não existe o php retorna erro. Para verificar o valor pode ser feito como no exemplo onde simplesmente verifico se o valor da $_SESSION['resultado'] está vazio, se sim atribuo o valor zero.

No caso de mostrar seria a mesma coisa, só que ao invés de atribuir valor é mostrar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado, você me ajudo muito. E mais uma coisa, eu preciso enviar os dados abaixo.

<form method='post' action='contas.php'>
 <h2>Dados da Compra:</h2>
 <h4>Mercado do Rogerio --------------- 00/00/00</h4><br>
        <br>
        <?php session_start();?>
        <?php $total1 = $_SESSION['resultado'];?>
        <p><?php echo "Total: R$" . $total1 ?> </p>
        <p> Recebido:<input type="text"  name="valor" > </p>
        <?php $recebido = $_POST['valor'];?>
        <p><?php echo "Troco: R$" . $troco = $recebido - $total1;?> </p>
        <button type="submit" value="validar"></button>
    <a href="index.php">Voltar</a>
</form>

Preciso que o $total1, $recebido e $troco sejam inseridos no meu banco, mas nao estou conseguindo com meu insert. E se possivel me mostre como que insere data(queria que meu insert adicionasse automaticamente a data).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode colocar um input type hidden com value $troco.

Na hora de fazer o insert é só consultar esse valor (Não esquecer de passar filtragens para prever SQL-inject) Pode ser validando ou convertendo o valor para INTEGER.

$total1 é o valor da sessão então é só reutilizar, "isso é o básico de orientação (reaproveitar o máximo que puder para fazer menos e desenvolver muito mais)". Também não esquecer de filtragem, aliás qualquer dado que venha do lado do cliente deve ser filtrado.

Sobre filtragens é um assunto muito mais complexo para passar em um mero post.

 

A data é simples. O php já possui uma função nativa para isso:

$dataAtual = date('Y-m-d');

Vai ser algo como isso: 2018-02-15

O que deve ser injetado em uma coluna do tipo date expl.:

`data_de_registro` date DEFAULT NULL,

 

Para mostrar a data com o formato utilizado aqui no brasil pode criar uma função para isso:

function mostrarData($date) {
    return implode('/', array_reverse(explode('-', $date)));
}

Assim sendo: echo mostrarData($dataAtual);

Vai imprimir algo como isso: 15/02/2018

 

Para prever erros de fuso horário você pode adicionar isso:

date_default_timezone_set('Brazil/East');

 

No entanto vá com calma der um passo de cada vez, pois você está aprendendo e o caminho do aprendizado nunca termina, então não precisa ter pressa, aprenda o que poder e o quanto puder de uma coisa por vez, para não se atropelar. Sempre procure se reinventar e melhorar cada vez mais.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nao entendi muito bem a parte do insert,mas seria +- desse jeito?

<form method='post' action='contas.php'>
 <h2>Dados da Compra:</h2>
 <h4>Mercado do Rogerio --------------- <?php echo $dataAtual;?></h4><br>
        <br>
        <?php session_start();?>
        <?php $total1 = $_SESSION['resultado'];?>
        <p><?php echo "Total: R$" . $total1 ?> </p>
        <p> Recebido:<input type="text" name="valor" > </p>
        <?php $recebido = $_POST['valor'];?>
        <p><?php echo "Troco: R$" . $troco = $recebido - $total1;?></p>
        <button type="submit" value="validar"></button>
        <a href="index.php">Voltar</a>
        <a onclick="finalizar()">Finalizar</a>
    <script>
        function finalizar(){
            define('SERVIDOR','mysql:host=localhost;dbname=mercado');
            define('USUARIO','root');
            define('SENHA','');
            $con = new mysqli('localhost', 'root', '', 'mercado');
            if(isset($_POST['vendas'])){
                $total1 = $_POST['vendas']['$total'];
                $recebido = $_POST['vendas']['$recebido'];
                $troco = $_POST['vendas']['$troco'];
                $dataAtual = $_POST['vendas']['$data'];

                $sql = $con->prepare("INSERT INTO vendas (total,recebido,troco,data) VALUES ($total1,$recebido,$troco,$dataAtual)");
                $sql->execute(array($total1, $recebido, $troco, $dataAtual));
            }


        }

    </script>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça um algoritmo que leia o nome e as três notas dos 10 alunos de uma turma. Armazenar os nomes em um vetor e as notas em uma matriz. O algoritmo deverá imprimir uma lista com:

a) os nomes dos alunos reprovados direto (média < 3,0) ;

b) os nomes dos alunos que vão fazer prova final (média >= 3 e média < 7,0);

c) os nomes dos alunos aprovados direto (média >=7,0)

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por violin101
      Caros amigos do grupo, saudações e um feliz 2025.
       
      Estou com uma pequena dúvida referente a Teclas de Atalho.

      Quando o Caps Lock está ativado o Comando da Tecla de Atalho não funciona.
      ou seja:
      se estiver para letra minúscula ====> funciona
      se estiver para letra maiúscula ====> não funciona
       
      Como consigo evitar essa falha, tanto para Letra Maiúscula quanto Minúscula ?

      o Código está assim:
      document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'r' ) return;// Não é Ctrl+r, portanto interrompemos o script evt.preventDefault(); });  
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Humildemente peço desculpa por postar uma dúvida que tenho.

      Preciso salvar no MySql, os seguinte Registro:

      1 - Principal
      ====> minha dúvida começa aqui
      ==========> como faço para o Sistema Contar Automaticamente o que estiver despois do 1.____?
      1.01 - Matriz
      1.01.0001 - Estoque
      1.01.0002 - Oficina
      etc

      2 - Secundário
      2.01 - Loja_1
      2.01.0001 - Caixa
      2.01.0002 - Recepção
      etc
       
      Resumindo seria como se fosse um Cadastro de PLANO de CONTAS CONTÁBEIL.

      Grato,


      Cesar









       
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a orientação dos amigos.

      Preciso fazer um Relatório onde o usuário pode Gerar uma Lista com prazo para vencimento de: 15 / 20/ 30 dias da data atual.

      Tem como montar uma SQL para o sistema fazer uma busca no MySql por período ou dias próximo ao vencimento ?

      Tentei fazer assim, mas o SQL me traz tudo:
      $query = "SELECT faturamento.*, DATE_ADD(faturamento.dataVencimento, INTERVAL 30 DAY), fornecedor.* FROM faturamento INNER JOIN fornecedor ON fornecedor.idfornecedor = faturamento.id_fornecedor WHERE faturamento.statusFatur = 1 ORDER BY faturamento.idFaturamento $ordenar ";  
      Grato,
       
      Cesar
       
       
       
       
    • Por violin101
      Caros amigos, saudações
       
      Por favor, me perdoa em recorrer a orientação dos amigos, tenho uma dúvida.
       
      Gostaria de uma rotina onde o Sistema possa acusar para o usuário antes dos 30 dias, grifar na Tabela o aviso de vencimento próximo, por exemplo:
       
      Data Atual: 15/11/2024
                                           Vencimento
      Fornecedor.....................Data.....................Valor
      Fornecedor_1...........01/12/2024..........R$ 120,00 <== grifar a linha de Laranja
      Fornecedor_1...........01/01/2025..........R$ 130,00
      Fornecedor_2...........15/12/2024..........R$ 200,00 <== grifar a linha de Amarelo
      Fornecedor_2...........15/01/2025..........R$ 230,00
      Fornecedor_3...........20/12/2024..........R$ 150,00
       
      Alguém tem alguma dica ou leitura sobre este assunto ?

      Grato,
       
      Cesar
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.