Para fazer comparações em PHP, você usa os operadores relacionais iguais aos usados em outras linguagens, que são esses:
Operador Aritmético | Significado |
---|---|
== | Igualdade. Não leva em conta os tipos de dados. |
=== | Idêntico. Leva em conta os tipos de dados (sem conversão). |
!= | Diferente. Não leva em conta os tipos de dados. |
!== | Não Idêntico. Leva em conta os tipos de dados (sem conversão). |
> | Maior. Não leva em conta os tipos de dados. |
< | Menor. Não leva em conta os tipos de dados. |
>= | Maior ou Igual. Não leva em conta os tipos de dados. |
<= | Menor ou Igual. Não leva em conta os tipos de dados. |
PS: Você pode usar <>
também para diferente, mas esse não é muito usado.
Para usar operadores relacionais, precisamos entender os operadores ternários, que você usa :
e ?
.
Esse operador faz comparações simples e mostra resultados de acordo com o resultado do mesmo. O que estiver antes da interrogação for verdadeiro, receberá o primeiro valor do lado direito, senão receberá o segundo do lado direito. Veja um exemplo, que passamos valores pela URL, e também a operação matemária desejada (soma ou multiplicação):
$n1 = $_GET["a"];
$n2 = $_GET["b"];
$tipo = $_GET["op"];
echo "Os valores passados foram $n1 e $n2.<br/>";
$r = ($tipo == "s") ? $n1 + $n2 : $n1 * $n2;
echo "O resultado será $r.";
Veja também uma diferença básica entre o igual e o idêntico, onde comparamos um mesmo número, em number e em string:
Com igual:
$a = 5;
$b = "5";
$r = ($a == $b) ? "SIM" : "NÃO";
echo "As variáveis A e B são iguais? $r.";
Com idêntico:
$a = 5;
$b = "5";
$r = ($a === $b) ? "SIM" : "NÃO";
echo "As variáveis A e B são iguais? $r.";
Veja outro exemplo de usos de operadores ternários:
$nota1 = $_GET["n1"];
$nota2 = $_GET["n2"];
$m = ($nota1 + $nota2) / 2;
echo "A média entre as notas $nota1 e $nota2 é $m.<br/>";
$sit = ($m < 6) ? "REPROVADO" : "APROVADO";
echo "O aluno está $sit.";
A mesma expressão acima pode ser usada assim:
$nota1 = $_GET["n1"];
$nota2 = $_GET["n2"];
$m = ($nota1 + $nota2) / 2;
echo "A média entre as notas $nota1 e $nota2 é $m.<br/>";
echo "O aluno está " . (($m < 6) ? "REPROVADO" : "APROVADO") . ".";
Lembrando que se for concatenado, tem que colocar entre parênteses porque o operador ternário se comporta como qualquer outro.
Os operadores lógicos em PHP são os mesmos usados em qualquer outra linguagem, que são essas:
Operador | Operação | Significado |
---|---|---|
&& | AND | E |
|| | OR | Ou |
! | NOT | Não |
xor ou ^ | XOR | Ou Exclusivo |
O operador AND
retorna true se ambos os operandos envolvidos forem verdadeiros, em outro caso retorna falso, como podem ver:
Operando 1 | Operando 2 | Resultado |
---|---|---|
false | false | false |
false | true | false |
true | false | false |
true | true | true |
O operador OR
retorna true se um dos valores pelo menos são verdadeiros, só retorna false se ambos forem falsos, como podem ver:
Operando 1 | Operando 2 | Resultado |
---|---|---|
false | false | false |
false | true | true |
true | false | true |
true | true | true |
O operador NOT
simplesmente inverte o valor booleano do operando, por isso chamado de "Operador da Negação", age apenas sobre um valor lógico, como podem ver:
Operando | Resultado |
---|---|
false | true |
true | false |
Em PHP também existe o XOR
/^
(xor ou ou exclusivo), que recebe os mesmos valores do OR, menos quando todas as premissas são verdadeiras (pode ser uma coisa ou outra, mas nunca as duas. De certa forma, ele retorna false pra iguais e true pra diferentes):
Operando 1 | Operando 2 | Resultado |
---|---|---|
true | true | false |
false | true | true |
true | false | true |
false | false | false |
Veja mais um exemplo unindo várias dessas coisas:
$ano = $_GET["an"];
$idade = 2017 - $ano;
echo "Quem nasceu em $ano tem idade de $idade anos.<br/>";
$tipo = ($idade >= 18 && $idade < 70) ? "OBRIGATÓRIO" : "NÃO OBRIGATÓRIO";
echo "E dessa forma seu voto é $tipo.";
PS: Você pode pegar o ano usando um parâmetro com a função date, assim:
echo date("Y");
Veja um exemplo de exibição de datas:
date_default_timezone_set("America/Sao_Paulo"); // Pra ajustar fusos horários
echo date("d/m/Y") . "<br/>"; // Exibe dia, mês e ano com quatro dígitos.
echo date("H:i:s") . "<br/>"; // Exibe hora, minutos e segundos.
echo date("w"); // Exibe o dia da semana, a partir do 0 (para colocar no array).
PS: A hora pode ser exibida com outro fuso horário, dependendo da configuração do servidor, por isso usamos uma função para corrigir (mas o certo é corrigir o php.ini do servidor). E os minutos são representados por i. Ao usar o y minúsculo o ano é exibido com dois dígitos, e o h minúsculo exibe no formato 12. O w exibe o dia da semana a partir do zero.
Para integrar formulários em PHP, você faz assim, escolhendo o método e colocando o action para a página PHP desejada (se quiser que seja processado na mesma página PHP, basta deixar as aspas do action vazias, não precisa colocar a mesma página). Para o PHP pegar os valores do input, ele deverá ter um name (diferentemente do Javascript que pega pela ID ou class).
Usando o mesmo método $_GET (ou $_POST, em alguns formulários mais seguros) que usávamos para obter valores pela URL, nós usaremos com os formulários.
Veja um exemplo de formulário em HTML:
<form method="get" action="testes.php">
<input type="number" name="v"/>
<input type="submit" value="Calcular"/>
</form>
E o código PHP para o formulário acima, do qual calculará a raiz quadrada (é aconselhável colocar em outra página PHP):
$valor = $_GET["v"];
$rq = sqrt($valor);
echo "A raiz quadrada de $valor é igual a " . number_format($rq, 5) . ".";
PS: Os métodos do formulário HTML e PHP devem ser os mesmos em ambos, ou get ou post.
Veja um formulário um pouco mais complexo, onde pegamos nome, ano de nascimento e sexo, e calculamos a idade pegando o ano atual do sistema com a função date()
:
O formulário:
<form method="get" action="testes.php">
<p>Nome: <input type="text" name="nome"/></p>
<p>Ano de Nascimento: <input type="number" name="ano"/></p>
<fieldset style="max-width: 250px">
<p><input type="radio" name="sexo" id="masc" value="homem"/>Masculino</p>
<p><input type="radio" name="sexo" id="fem" value="mulher"/>Feminino</p>
</fieldset>
<input type="submit" value="Enviar"/>
</form>
E o código (em outra página):
$nome = $_GET["nome"];
$ano = $_GET["ano"];
$sexo = $_GET["sexo"];
$idade = date("Y") - $ano;
echo "$nome é $sexo e tem $idade anos.";
PS: Os botões de rádio deverão ter valores especificados com o parâmetro value, senão dará erro.
Para evitar erros que aparecem quando não é enviado nenhum dado, usamos o código isset
e operadores ternários, assim:
$nome = isset($_GET["nome"]) ? $_GET["nome"] : "Nome desconhecido";
$ano = isset($_GET["ano"]) ? $_GET["ano"] : date("Y");
$sexo = isset($_GET["sexo"]) ? $_GET["sexo"] : "sem sexo";
$idade = date("Y") - $ano;
echo "$nome é $sexo e tem $idade anos.";
Podemos também usar no lugar do ternário isso daqui (na versão 7 e posteriores):
$n = $_GET["num"] ?? 0; // Ele verifica se existe dado no parâmetro, caso não exista recebe 0.
echo "O parâmetro passado foi $n";
PHP também pode ser usado em CSS, dessa forma:
Código HTML, na primeira página:
<form method="get" action="testes.php">
<p><input type="text" name="t" id="itxt"/></p>
<select name="tam" id="itam">
<option value="8pt" selected>8</option>
<option value="10pt">10</option>
<option value="12pt">12</option>
<option value="14pt">14</option>
<option value="16pt">16</option>
<option value="18pt">18</option>
<option value="20pt">20</option>
<option value="25pt">25</option>
<option value="30pt">30</option>
<option value="40pt">40</option>
</select>
<p><input type="color" name="cor" id="icor"/></p>
<input type="submit" value="Gerar"/>
</form>
Os códigos abaixo deverão ser colocados em outra página:
Esse é o código PHP, que pode ser colocado no head:
$txt = isset($_GET["t"]) ? $_GET["t"] : "Texto Genérico";
$tam = isset($_GET["tam"]) ? $_GET["tam"] : "12pt";
$cor = isset($_GET["cor"]) ? $_GET["cor"] : "black";
No CSS você deve colocar assim (só funciona dentro da página PHP, em estilo local em tags style:
span.texto {
font-size: <?php echo $tam ?>;
color: <?php echo $cor ?>;
}
Dentro da página, em outra supertag PHP, você apenas coloca isso:
echo "<span class='texto'>$txt</span>";
PS: Você pode ter várias supertags PHP numa mesma página. E pra execuções de códigos PHP na mesma página do formulário, apenas deixe o action com as aspas vazias.
Para filtrar códigos HTML em input, use o parâmetro htmlspecialchars()
ou htmlentities()
(com algumas diferenças entre eles) entre os $_GET ou $_POST. Por exemplo:
$txt = isset($_GET["t"]) ? htmlspecialchars($_GET["t"], ENT_QUOTES) : "Texto Genérico";
Ou podemos usar o filter_input()
, dispensando o uso de métodos get/post, assim:
$ini = filter_input(INPUT_GET, "filtro") != null ? (int)filter_input(INPUT_GET, "filtro") : 0;
PS: O filter_input() não aceita o isset(), a comparação deve ser feita com null e não idêntico. Ele substitui os métodos $_GET[], $_POST e outros do tipo, e por isso deverá ficar dentro de outros métodos como trim(), strip_tags() e funções criadas por nós pra tratar dados.
Isso é usado para evitar que invasores insiram códigos maliciosos entre tags, afim de tentar invadir o site.
PS: Caso queira pegar múltiplos dados de um checkbox. coloque no name do input algo assim:
name="opcoes[]"
E ao capturar, use a função implode para unir o array em uma string:
implode(" ", $_POST["opcoes"]);