Marcelo Lopes de Oliveira 1 Denunciar post Postado Novembro 15, 2017 Tenho um código simples, que deve efetuar uma ação caso um campo seja <= a outro. Nessa primeira opção funciona perfeitamente, porém caso não atenda a essa condição nada é exibido na tela. Alguém pode me apontar o erro? Segue o código: <?php $in = isset($_GET["inicio"])?$_GET["inicio"]:0; $fi = isset($_GET["final"])?$_GET["final"]:0; $inc = isset($_GET["incremento"])?$_GET["incremento"]:0; echo " O inicio é $in, o final $fi e o incremento $inc </br>"; if($in <= $fi) { while ($in <= $fi) { echo $in. "</br>"; $in = $in + $inc; } } else { while ($fi > $in) { echo $fi. "</br>"; $fi = $fi - $inc; } } ?> Desde já agradeço. Compartilhar este post Link para o post Compartilhar em outros sites
Matheus Tavares 167 Denunciar post Postado Novembro 15, 2017 Olá @Marcelo Lopes de Oliveira. O problema é que a expressão do seu segundo while está incorreto mesmo. Exemplo: inicio = 10 fim = 3 incremento = 1 Você deveria aplicar a mesma lógica do primeiro while, utilizando a variável inicio como passo inicial, mas no seu código, você está utilizando a variável fim, que seria 3. Se juntarmos o seu código, com o meu exemplo, o while iria se perguntar: 3 é MAIOR que 10? NÃO, então não faça nada. O segundo while deveria ser assim: while ( $in >= $fi ) { echo $in . "<br>"; $in = $in - $inc; } Dito isso, resolvi otimizar seu código para lhe ajudar nos seus estudos, pois ao que me parece, este é um código puramente para fins de aprendizado. Espero que te ajude (leia os comentários): <?php /** * O operador NULL-coalesce é uma novidade do PHP 7.0. * Ele serve exatamente para o mesmo propósito do seu código anterior, * mas é mais legível e curto. * * Exemplo: * isset( $_GET[ 'xxx' ] ) ? $_GET[ 'xxx' ] : 0 * * É exatamente o mesmo que: * $_GET[ 'xxx' ] ?? 0 * * A função intval() ao redor da expressão é apenas para garantirmos que o valor é um inteiro. * Isso é uma boa prática e deve ser feito sempre que um valor inteiro * se origina do usuário, como via GET e POST. * (Se ele informar algo como 'bla bla bla', o PHP converte para 0 automaticamente). * * Observe também que alterei o nome das variáveis. $ini e $fi não representam seu real propósito. */ $inicio = intval( $_GET[ 'inicio' ] ?? 0 ); $final = intval( $_GET[ 'final' ] ?? 0 ); $passo = intval( $_GET[ 'incremento' ] ?? 0 ); /** * Não precisávamos do segundo while. * Basta resolvermos isso matematicamente. O "incremento" * pode ser um decremento se alterarmos seu sinal. * Por isso alterei a variável $incremento para $passo. */ if ( $inicio > $final ) { $passo = $passo * -1;//10 > 3, certo? Então devemos decrementar } /** * É melhor colocarmos variáveis em volta de { }, * quando inseridas dentro de strings. */ echo "O inicio é {$inicio}, o final {$final} e o incremento {$passo}.<br>"; /** * Alteramos a expressão de condição conforme a necessidade. */ while ( $passo >= 0 ? $inicio <= $final : $inicio >= $final ) { echo $inicio . '</br>'; $inicio += $passo; } Compartilhar este post Link para o post Compartilhar em outros sites
Marcelo Lopes de Oliveira 1 Denunciar post Postado Novembro 15, 2017 Olá Matheus Tavares! Isso mesmo meu amigo, estou começando agora o aprendizado de PHP e estou apanhando um pouco aqui rsrs Perfeito seu código, li os comentários e só tenho a agradecer! Compartilhar este post Link para o post Compartilhar em outros sites