Ir para conteúdo

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 landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, ativo. Nela tem cadastrado vários itens. No campo ativo eu coloco a letra "S" para informar que este item está ativo no sistema. Por exemplo: 1, casa, S 2, mesa, S 3, cama, S 4, moto S 5, rádio O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "produtos" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, mesa, moto 2, mesa, casa, cama 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela produtos da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "mesa". Preciso fazer com que o php me liste todos os registros da tabela "produtos" que contenham a palavra "mesa". Até aqui tudo bem eu consigo listar. Estou fazendo assim: <?php $item = "mesa" $sql = mysqli_query($conn, "SELECT * FROM produtos WHERE item1 LIKE '$item' OR item2 LIKE '$item' OR item3 LIKE '$item' LIMIT 10"); while($aux = mysqli_fetch_assoc($sql)) { $id = $aux["id"]; $item1 = $aux["item1"]; $item2 = $aux["item2"]; $item3 = $aux["item3"]; echo $id . " - " . $item1 . ", " . $item2 . ", " $item3 . "<br>"; } ?> O problema é que está listando todos os registros que contém o item mesa. Eu preciso que o php verifique os demais item e me liste somente os registro em que todos os registros estejam ativos no sistema. No exemplo acima ele não deveria listar o registro 3. pois nesse registro contém o item "radio" e este item não está ativo no sistema. Ou seja, o registro "radio" na tabela itens não possui um "S" na coluna "ativo". Alguém sabe como resolver isso?
    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
    • Por landerbadi
      Olá pessoal, boa tarde
       
      Tenho uma tabela chamada "produtos" com os seguintes campos (id, produto) e outra tabela chamada "itens" com os seguintes campos (id, prod_01, prod_02, prod_03, prod_04).
       
      Na tabela produtos eu tenho cadastrado os seguintes produtos: laranja, maçã, uva, goiaba, arroz, feijão, macarrão, etc.
       
      Na tabela itens eu tenho cadastrado os itens da seguinte maneira:
       
      1, laranja, uva, arroz, feijão;
      2, maçã, macarrão, goiaba, uva;
      3, arroz, feijão, maçã, azeite
       
      Meu problema é o seguinte: 
      Eu escolho um produto da tabela "produtos", por exemplo "uva".  Preciso fazer uma consulta na tabela "itens" para ser listado todos os registros que contenham o produto "uva" e que todos os demais produtos estejam cadastrados na tabela "produtos".
       
      No exemplo acima seria listado apenas dois registros, pois o terceiro registro não contém o produto "uva". 
       
      Alguém pode me ajudar? Pois estou quebrando a cabeça a vários dias e não consigo achar uma solução.
    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, plural, ativo. Nela tem cadastrado vários itens e seu respectivo plural. No campo ativo eu coloco a letra "S" para informar que esta palavra está ativa no sistema. Por exemplo: 1, casa, casas, S 2, mesa, mesas, S 3, cama, camas, S 4, moto, motos, S 5, rádio, rádios O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "variações" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, camas, moto 2, mesas, casas, radio 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela variações da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "casa". Preciso fazer com que o php me liste todos os registros da tabela "variações" que contenham a palavra "casa". Porém se tiver algum registro com a palavra "casas" também tem que ser listado. Neste caso ele irá encontrar dois registros. Agora eu preciso que o php verifique os demais itens e faça a listagem apenas dos item que estão ativos (que contenham um "S" no campo ativo. Neste caso ele irá encontrar apenas um registro, pois o segundo registro contém a palavra "rádio". E "rádio" não está ativo na tabela itens. Como faço isso?
×

Informação importante

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