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, saudações.
       
      Por favor, me permita tirar uma dúvida com os amigos.

      Tenho um Formulário onde o Usuário digita todos os Dados necessários.

      Minha dúvida:
      --> como faço após o usuário digitar os dados e salvar, o Sistema chamar uma Modal ou mensagem perguntando se deseja imprimir agora ?

      Grato,
       
      Cesar
    • Por Carcleo
      Tenho uma abela de usuarios e uma tabela de administradores e clientes.
      Gostaria de uma ajuda para implementar um cadastro
       
      users -> name, login, passord (pronta) admins -> user_id, registratiom, etc.. client -> user_id, registratiom, etc...
      Queria ajuda para extender de user as classes Admin e Client
      Olhem como estáAdmin
      <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Admin extends User {     use HasFactory;            protected $fillable = [         'name',         'email',         'password',         'registration'     ];      private string $registration;     public function create(         string $name,          string $email,          string $password,         string $registration     )     {         //parent::create(['name'=>$name, 'email'=>$email, 'password'=>$password]);         parent::$name = $name;         parent::$email = $email;         parent::$password = $password;         $this->registration = $registration;     } } User
      <?php namespace App\Models; // use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Database\Eloquent\Relations\BelongsToMany; class User extends Authenticatable {     /** @use HasFactory<\Database\Factories\UserFactory> */     use HasFactory, Notifiable;     static string $name;     static string $email;     static string $password;     /**      * The attributes that are mass assignable.      *      * @var list<string>      */     protected $fillable = [         'name',         'email',         'password',     ];          /**      * The attributes that should be hidden for serialization.      *      * @var list<string>      */     protected $hidden = [         'remember_token',     ];     /**      * Get the attributes that should be cast.      *      * @return array<string, string>      */     protected function casts(): array     {         return [             'email_verified_at' => 'datetime',             'password' => 'hashed',         ];     }          public function roles() : BelongsToMany {         return $this->belongsToMany(Role::class);     }       public function hasHole(Array $roleName): bool     {                 foreach ($this->roles as $role) {             if ($role->name === $roleName) {                 return true;             }         }         return false;     }         public function hasHoles(Array $rolesName): bool     {                 foreach ($this->roles as $role) {             foreach ($rolesName as $rolee) {             if ($role->name === $rolee) {                 return true;             }          }         }         return false;     }         public function hasAbility(string $ability): bool     {         foreach ($this->roles as $role) {             if ($role->abilities->contains('name', $ability)) {                 return true;             }         }         return false;     }     } Como gravar um Admin na tabela admins sendo que ele é um User por extensão?
      Tentei assim mas é claro que está errado...
      public function store(Request $request, Admin $adminModel) {         $dados = $request->validate([             "name" => "required",             "email" => "required|email",             "password" => "required",             "registration" => "required"         ]);         $dados["password"] =  Hash::make($dados["password"]);                  $admin = Admin::where("registration",  $dados["registration"])->first();                  if ($admin)              return                    redirect()->route("admin.new")                             ->withErrors([                                 'fail' => 'Administrador já cadastrados<br>, favor verificar!'                   ]);                            $newAdmin = $adminModel->create(                                    $dados['name'],                                    $dados['email'],                                    $dados['password'],                                    $dados['registration']                                 );         dd($newAdmin);         $adminModel->save();         //$adminModel::create($admin);                  return redirect()->route("admin.new")->with("success",'Cadastrado com sucesso');     }  
    • Por violin101
      Caros amigos, saudações.
       
      Gostaria de tirar uma dúvida com os amigos, referente a PDV.
       
      Estou escrevendo um Sistema com Ponto de Vendas, a minha dúvida é o seguinte, referente ao procedimento mais correto.

      Conforme o caixa vai efetuando a venda, o Sistema de PDV já realiza:
      a baixa direto dos produtos no estoque
      ou
      somente após concretizar a venda o sistema baixa os produtos do estoque ?
       
      Grato,
       
      Cesar
       
    • 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
×

Informação importante

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