Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Usuário continua conseguindo sacar, mesmo no valor negativo

<?php

$contasCorrentes= [
    '123.456.789-10' => [
    "titular" => "Rodrigo" ,
    "saldo" => 1000       
    ],
    '123.456.789-11' => [
    "titular" => "Maria" ,
    "saldo" => 10000
    ], 
    '123.456.789-12' => [
    "titular" => "Lucas" ,
    "saldo" => 500
    ]

];

$contasCorrentes['123.456.789-10'] ["saldo"] -= 500; // Conta do Rodrigo
$contasCorrentes['123.456.789-11'] ["saldo"] -= 4000; //Conta da Maria

if (500 > $contasCorrentes ['123.456.789-12'] ["saldo"]) {
    echo "Você não pode sacar esse valor" .PHP_EOL;
    } else {
        $contasCorrentes['123.456.789-12'] ["saldo"] -= 600; //Conta do lucas
};

foreach ($contasCorrentes as $cpf => $conta){
    echo $cpf . " " . $conta ["titular"] . " " . $conta["saldo"] .PHP_EOL;

};

e coloquei uma condição que não permite ele fazer isso

4 respostas

Basicamente a questão é o IF

if ( 500 > $contasCorrentes['123.456.789-12']['saldo'] ) { // perceba que vc esta verificando se 500 é maior que o saldo 
    echo "Você não pode sacar esse valor" . PHP_EOL; // ele não entra porque não é maior .... nesse caso é igual
    } else { // logo se ele não entrou no if ele entra no else
        $contasCorrentes['123.456.789-12'] ['saldo']  -= 600; //Conta do lucas // e saca 600  e fica negativo ....
};

Poderia ser assim :

if ( 500 >= $contasCorrentes['123.456.789-12']['saldo'] ) { // perceba que vc esta verificando se 500 é maior ou igual o saldo 
    echo "Você não pode sacar esse valor" . PHP_EOL; // ele entra aqui te mostra a mensagem e sai.
    } else { 
        $contasCorrentes['123.456.789-12'] ['saldo']  -= 600; 
};

Espero que tenha conseguido te explicar

Colocando a sua correção, ele não consegue sacar nenhum valor, mesmo colocando um valor menor ou igual a 500 para realizar o saque, como 400,300,200 ou qualquer outro valor menor ou igual 500

C:\Users\Rodrigo\Documents\phpInicio\avançando com php>php banco.php Você não pode sacar esse valor 123.456.789-10 Rodrigo 500 123.456.789-11 Maria 6000 123.456.789-12 Lucas 500

solução!

aqui funcionou perfeitamente.

saque de 400

if (400 >= $contasCorrentes ['123.456.789-12'] ["saldo"]) { //Estou verificando se possa sacar 400 
    echo "Você não pode sacar esse valor" .PHP_EOL; // nesse caso não entra aqui 
    } else { // entou aqui
        $contasCorrentes['123.456.789-12'] ["saldo"] -= 400; // realizando o saque dos 400
};

saque de 300

if (300 >= $contasCorrentes ['123.456.789-12'] ["saldo"]) { //Estou verificando se possa sacar 300 
    echo "Você não pode sacar esse valor" .PHP_EOL; // nesse caso não entra aqui 
    } else { // entou aqui
        $contasCorrentes['123.456.789-12'] ["saldo"] -= 300; // realizando o saque dos 300
};

saque de 200

if (200 >= $contasCorrentes ['123.456.789-12'] ["saldo"]) { //Estou verificando se possa sacar 200 
    echo "Você não pode sacar esse valor" .PHP_EOL; // nesse caso não entra aqui 
    } else { // entou aqui
        $contasCorrentes['123.456.789-12'] ["saldo"] -= 200; // realizando o saque dos 200
};

Lembando que esse é o cenário dessa aula e existem outras opções para tratar isso.

Entendi o problema, eu estava tentando realizar o saque fora da condição, fora da linha do if (400 >= $contasCorrentes ['123.456.789-12'] ["saldo"], e sim nessa linha de processamento } else { $contasCorrentes['123.456.789-12'] ['saldo'] -= 600;