Shopping list within function

Asked

Viewed 58 times

0

I’m trying to solve an exercise I’m doing in PHP (I’m a beginner) but I can’t get the code to work, the following message is displayed:

"Notice: Undefined variable: in C products: xampp htdocs teste3.php on line 39"

Code:

$br = "</br>";

function lista($artigos) {

    $produtos = array(
        'Leite' => array('preco' => 0.8, ),
        'Iogurte' => array(
            'preco' => 0.25,
        ),
        'Queijo' => array(
            'preco' => 2.2,
        ),
        'Peixe' => array(
            'preco' => 3.1,
        ),
        'Carne' => array(
            'preco' => 3.5,
        ),
        'Bolachas' => array(
            'preco' => 0.6,
        ),
    );

}
if (isset($_GET['produto'])) {
    if (isset($_GET['quantidade'])) {
        echo 'Preço por unidade: '.$produtos[$_GET['produto']]['preco'].
        '<br>';
        echo 'Preço total: '.$produtos[$_GET['produto']]['preco'] * $_GET['quantidade'];
    } else {
        echo 'nao existe essa quantidade';
    }
} else {
    echo ' nao existe esse produto!';
}

Exercise : inserir a descrição da imagem aqui

  • What’s the matter?

  • Hello @stderr, I want when you do it directly in the browser for example: http://localhost/teste3.php? product=Queijo&quantity=30 appear the price of the product and in this case the sum of the same (X30) but when I run gives error "Notice: Undefined variable: products in C: xampp htdocs teste3.php on line 39"

  • Start here: http://answall.com/tour

  • I’ve done the tour..

2 answers

3


For the next one it is better to put the relevant code part here, to help those who want to help you, not everyone has time/want to go to external links to see code.

You can do so, I suggest these improvements:

<?php
function procurar($produto) {
    $produtos = array(
        'Leite' => array('preco' => 0.8,
        ),
        'Iogurte' => array(
            'preco' => 0.25,
        ),
        'Queijo' => array(
            'preco' => 2.2,
        ),
        'Peixe' => array(
            'preco' => 3.1,
        ),
        'Carne' => array(
            'preco' => 3.5,
        ),
        'Bolachas' => array(
            'preco' => 0.6,
        ),
    );
    $produto = ucwords(strtolower($produto));
    if(array_key_exists($produto, $produtos)) {
        return $produtos[$produto];
    }
    return false;
}
if(isset($_GET['produto'])) {
    $prod = procurar($_GET['produto']);
    if($prod) {
        if(isset($_GET['quantidade'])) {
            echo 'Preço por unidade: ' .$prod['preco']. '<br>';
            echo 'Preço total: ' .$prod['preco']*$_GET['quantidade'];
        }
        else {
            echo 'nao existe essa quantidade';
        }
    }
    else {
        echo ' nao existe esse produto!';
    }
}
else {
   echo 'Produto invalido';
}

The function should return something, in this case it returns the data of the product you want, I also did so that the key search in the array is case insencitive

  • That’s right Miguel! I think it is the best way and thanks for the tip of the case insenctive ! Thank you very much!

  • 1

    You’re welcome to @Mariocaeiro. I edited it because the bass texts were changed

  • 1

    I’m still very green, I hadn’t noticed! Thank you

  • 1

    @Miguel Since the keys to the array begin with capital letters, the ucwords may also serve, for example: $produto = ucwords(strtolower($produto)). :)

  • 1

    Yes of course, it’s true @stderr , I’d like to change the keys of the array itself, you’re right, I’ll edit

2

Use the isset before checking whether the variable has been defined.

function verificarProduto($produto, $quantidade) {
    $produtos = array('Leite' => array('preco' => 0.8, ),
                      'Iogurte' => array('preco' => 0.25, ),
                      'Queijo' => array('preco' => 2.2, ),
                      'Peixe' => array('preco' => 3.1, ),
                      'Carne' => array('preco' => 3.5, ),
                      'Bolachas' => array('preco' => 0.6, ),
                );

     if ($produto) {
         // Verifica se o produto existe na lista de produtos
         if (isset($produtos[$produto])) {
             // Pega o preço do produto
             $preco = $produtos[$produto]['preco'];
             echo "{$produto} existe na lista! Preço por unidade: {$preco} <br>";

             // Se a quantidade for especificada
             if ($quantidade) {
                 $total = $quantidade * $preco;
                 echo "Total: {$total} <br>";
             }
         }
         else {
             echo "{$produto} não existe. <br>";
         }
     }
}

// Verifica se foi atribuído os valores, em caso negativo, atribui-se "false" 
$produto = isset($_GET['produto']) ? $_GET['produto']: false;
$quantidade = isset($_GET['quantidade']) ? $_GET['quantidade']: false;

verificarProduto($produto, $quantidade);
  • 1

    your code is clean and explicit, thanks for the help serves perfectly also for what you needed to do! Thanks for the time spent !

Browser other questions tagged

You are not signed in. Login or sign up in order to post.