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 Rafael_Ferreira
      Não consigo carregar a imagem do captcha do meu formulário. Foi testado com o xampp e easyphp. Também não carregou a imagem de outros captcha. 
       
       
    • Por luiz monteiro
      Olá, tudo bem?
       
      Estou melhorando meu conhecimento em php e mysql e, me deparei com o seguinte. A tabela da base de dados tem um campo do tipo varchar(8) o qual armazena números. Eu não posso alterar o tipo desse campo. O que preciso é fazer um select para retornar o números que contenham zeros a direita ou a esquerda.
      O que tentei até agora
       
      Ex1
      $busca = $conexao->prepare("select campo form tabela where (campo = :campo) ");
      $busca->bindParam('campo', $_REQUEST['campo_form']);
       
      Se a direita da string $_REQUEST['campo_form'] termina ou inicia com zero ou zeros, a busca retorna vazio.
      Inseri dados numéricos, da seguinte maneira para testar: 01234567;  12345670: 12345678: 12340000... entre outros nessa coluna. Todos os valores que não terminam ou não iniciam com zero ou zeros, o select funciona.
       
       
      Ex2
      $busca = $conexao->prepare("select campo form tabela where (campo = 0340000) ");
      Esse número está cadastrado, mas não retorna.
       
      Ex3
      $busca = $conexao->prepare("select campo form tabela where (campo = '02340001' ) ");
      Esse número está cadastrado, mas não retorna.
       
       
      Ex4
      $busca = $conexao->prepare("select campo form tabela where (campo like 2340000) ");
      Esse número está cadastrado, mas não retorna.
       
      Ex5
      $busca = $conexao->prepare("select campo form tabela where (campo like '12340000') ");
      Esse número está cadastrado, mas não retorna.
       
      Ex6
      $busca = $conexao->prepare("select campo form tabela where (campo like '"12340000"' ) ");
      Esse número está cadastrado, mas não retorna.
       
       
      Ex7
      $busca = $conexao->prepare("select campo form tabela where (campo like :campo) ");
      $busca->bindParam('campo', $_REQUEST['campo_form'])
      Não retorna dados.
       
      O  $_REQUEST['campo_form'] é envio via AJAX de um formulário. 
      Usei o gettype para verificar o post, e ele retorna string.
      Fiz uma busca com número 12345678 para verificar o que o select retorna, e também retrona como string.
       
      Esse tipo de varchar foi usado porque os números que serão gravados nesse campo,  terão zeros a direita ou na esquerda. Os tipos number do mysql não gravam zeros, então estou usando esse. O problema é a busca.
      Agradeço desde já.
       
       
    • Por daemon
      Boa tarde,
       
      Eu tenho uma rotina que faz uma leitura do arquivo .xml de vários sites.

      Eu consigo pegar o tópico e a descrição, e mostrar a imagem que esta na pagina do link.
      Para isso utilizo esta função:
      function getPreviewImage($url) { // Obter o conteúdo da página $html = file_get_contents($url); // Criar um novo objeto DOMDocument $doc = new DOMDocument(); @$doc->loadHTML($html); // Procurar pela tag meta og:image $tags = $doc->getElementsByTagName('meta'); foreach ($tags as $tag) { if ($tag->getAttribute('property') == 'og:image') { return $tag->getAttribute('content'); } } // Se não encontrar og:image, procurar pela primeira imagem na página $tags = $doc->getElementsByTagName('img'); if ($tags->length > 0) { return $tags->item(0)->getAttribute('src'); } // Se não encontrar nenhuma imagem, retornar null return null; } // Uso: $url = "https://example.com/article"; $imageUrl = getPreviewImage($url); if ($imageUrl) { echo "<img src='$imageUrl' alt='Preview'>"; } else { echo "Nenhuma imagem encontrada"; }  
      Mas estou com um problema, esta funcão funciona quando coloco em uma pagina de teste.php. Preciso mostrar em uma página inicial diversas fotos de todos os links. (No caso acima só funciona 1).
    • 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');     }  
×

Informação importante

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