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 ILR master
      Fala galera, tudo bem?
       
      Tenho o seguinte codigo:
       
       class Data {
      public static function ExibirTempoDecorrido($date)
      {
          if(empty($date))
          {
              return "Informe a data";
          }
          $periodos = array("segundo", "minuto", "hora", "dia", "semana", "mês", "ano", "década");
          $duracao = array("60","60","24","7","4.35","12","10");
          $agora = time();
          $unix_data = strtotime($date);
          // check validity of date
          if(empty($unix_data))
          {  
              return "Bad date";
          }
          // is it future date or past date
          if($agora > $unix_data) 
          {  
              $diferenca     = $agora - $unix_data;
              $tempo         = "atrás";
          } 
          else 
          {
              $diferenca     = $unix_data - $agora;
              $tempo         = "agora";
          }
          for($j = 0; $diferenca >= $duracao[$j] && $j < count($duracao)-1; $j++) 
          {
              $diferenca /= $duracao[$j];
          }
          $diferenca = round($diferenca);
          if($diferenca != 1) 
          {
              $periodos[$j].= "s";
          }
          return "$diferenca $periodos[$j] {$tempo}";
      }
      }
       
      Funciona redondinho se o valor retornado for de algumas horas, mas...
      Quando passa de dois meses, ele retorna a palavra mess. Deve ser por conta dessa linha
      if($diferenca != 1) 
          {
              $periodos[$j].= "s";
          }
       
      Quero que modre:
       
      2 meses atrás
      e não
      2 mess atrás.
       
      Espero que tenham entendido.
       
      Valeu
    • Por Carlos Web Soluções Web
      Olá...
      Estou tentando fazer o seguinte !!
      Listando dados em tabela !!
      Gostaria que....se na listagem houver 4 linhas...indepedente de seu número de ID, faça a listagem em ID ser em ordem 1 2 3 4 !!
      Exemplo...se tiver uma listagem de dados que está em ID 1 3 3...faça ficar 1 2 3 !!

       
      echo "<table class='tabela_dados' border='1'> <tr> <td>ID</td> <td>Nome Empresa</td> <td>Responsável</td> <td>Telefone 1</td> <td>Telefone 2</td> <td>E-mail 1</td> <td>E-mail 2</td> <td>Endereço</td> <td>CEP</td> <td>Bairro</td> <td>AÇÃO 1</td> <td>AÇÃO 2</td> </tr> "; $sql = "SELECT ID FROM usuarios_dados WHERE Usuario='$usuario'"; $result = $conn->query($sql); $num_rows = $result->num_rows; $Novo_ID = 1; for ($i = 0; $i < $num_rows; $i++) { $registro = $result -> fetch_row(); $sql2 = "UPDATE usuarios_dados SET ID='$Novo_ID' WHERE ID='$Novo_ID'"; $result2 = $conn->query($sql2); $Novo_ID++; } $sql = "SELECT * FROM usuarios_dados"; $result = $conn->query($sql); if ($result->num_rows > 0) { // output data of each row while($row = $result->fetch_assoc()) { echo "<tr> <td>$row[ID]</td> <td>$row[Nome_Empresa]</td> <td>$row[Responsavel]</td> <td>$row[Telefone_1]</td> <td>$row[Telefone_2]</td> <td>$row[Email_1]</td> <td>$row[Email_2]</td> <td>$row[Endereço]</td> <td>$row[CEP]</td> <td>$row[Bairro]</td> <td> <form method='post' action='Editar_Dados.php'> <input type='hidden' name='usuario' value='$usuario'> <input type='hidden' name='senha' value='$senha'> <input type='hidden' name='ID' value='$row[ID]'> <input type='submit' style='padding: 10px;' value='EDITAR'> </form> </td> <td> <form method='post' action='Deletar_Dados.php'> <input type='hidden' name='usuario' value='$usuario'> <input type='hidden' name='senha' value='$senha'> <input type='hidden' name='ID' value='$row[ID]'> <input type='submit' style='padding: 10px;' value='DELETAR'> </form> </td> </tr> "; } } else { echo "0 results"; } $conn->close();  
    • Por ILR master
      Boa tarde pessoal, tudo bem ?
       
      Eu uso o tinymce para cadastro de textos no meu siite, porém, quero fazer um sistema para que os colunistas possam fazer o próprio post.
      O problema do tinymce, é que ele mantém a formatação do texto copiado, como tamanho de fonts, negritos, etc... Quero que o usuário cole o texto e a própria textarea limpe a formatação para que ele formate como quiser.
       
      A pergunta é:
       
      O tinymce tem uma opção para desabilitar a formatação quando um texto é colocado?
      Tem alguma função via java ou php para retirar a formatação assim que o texto é colado?
      Ou é melhor usar um outro editor?
       
      Agradeço deste já.
    • Por Giovanird
      Olá a todos!
      Tenho uma pagina que possui uma DIV onde coloquei uma pagina PHP.
      Uso a função setInterval para atualizar a pagina inclusa dentro da DIV.
      O problema é que ao acessar o site , a DIV só me mostra a pagina inclusa somente quando completo o primeiro minuto.
      Preciso que a pagina inclusa já inicie carregada
       
      Meu código JavaScript e a DIV com a pagina PHP
       
      <script> function atualiza(){ var url = 'direita.php'; $.get(url, function(dataReturn) { $('#direita').html(dataReturn); }); } setInterval("atualiza()",60000); </script> <div> <span id="direita"></span> </div>  
    • Por ILR master
      Fala pessoal.
       
      Seguinte:
       
      Quero selecionar duas tabelas e mostrar com resultados intercalados. Abaixo segue um código explicando para vcs terem uma ideia.
       
      $consulta = "SELECT A.*, B.* FROM tabela1 A, tabela2 B'";
      $resultado = mysqli_query($conexao, $consulta) or die ("erro");
      while($busca = mysqli_fetch_array($resultado)){
       
      print $busca['cod_evento']; --> traz o código da tabela1 
      print $busca['titulo_evento']; -->  traz o titulo da tabela1
      print $busca['cod_noticia']; --> traz o código da tabela2
      print $busca['titulo_noticia']; --> traz o tituloda tabela2
       
      }
       
      Espero que entendam. Grato
       
×

Informação importante

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