Olá Pessoal,
Estou meio sumido, eu sei… A vida tá uma correria só, e foi extremamente complicado atualizar o blog e manter minhas newsletters. Mas vamos retomar nosso curso online de PHP (e vamos até o fim, que eu já comecei a escrever os minicursos de WebStandards e SQL). A partir de agora eu vou dar um foco maior para o blog e buscar aproveitá-lo melhor, afinal, mesmo sem postar há um mês, o número de visitas aumentou consideravelmente (visitantes únicos), tenho recebido comentários e emails pedindo para voltar a ativa. Então, vamos que vamos!!!!
O assunto de hoje é tratamento de strings. O PHP possui uma série de funções para trabalhar com texto, e não pretendo esgotar o tema. Iremos abordar as principais funções que a linguagem nos fornece, e você pode consultar a documentação oficial do PHP sempre que precisar.
O PHP é uma linguagem case sensitive, ou seja, faz distinção entre letras maiúsculas e minúsculas. O que pode ser um problema quando precisamos comparar duas strings. Por exemplo, em um formulário de login é necessário comparar o usuário e senhas digitados com os valores correspondentes armazenados em um banco de dados. Digamos agora que o usuário tenha ativado o CAPS LOCK, em PHP o valor “TESTE123″ é diferente de “teste123″, por mais que a sintaxe seja a mesma. Ou seja, teremos um erro no login. Para evitar isso, temos duas funções que colocam uma string inteira para caixa baixa ou caixa alta: strtolower() e strtoupper(). Iremos utilizar o exercício de login e senha feito anteriormente:
LOGIN.PHP
1 2 3 4 5 | <form action="validaLogin.php" method="post" id="form" name="form"> <label for="login">Login: <input type="text" name="login" id="login" /></label> <label for="senha">Senha: <input type="password" name="senha" id="senha" /></label> <button type="submit">LOGIN</button> </form> |
VALIDALOGIN.PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?php $login = array("user01", "user02", "user03", "user04", "user05"); $senha = array("senha01", "senha02", "senha03", "senha04", "senha05"); //Calculo o tamanho do array $login $tamArray = count($login); //Crio uma variável auxiliar $msg = FALSE; //Uso um loop para percorrer o array - escolherei o FOR, mas você pode usar qualquer outro for ($i = 0; $i < $tamArray; $i++) { if ($_POST["login"] == $login[$i] && $_POST["senha"] == $senha[$i]) { $msg = TRUE; break; } } //Verifico se a variável auxiliar $msg saiu do loop com o valor TRUE (indicando login efetuado com sucesso) if ($msg) { echo "ok"; } else { echo "erro"; } ?> |
Pelo código acima se eu digitar USER01, ainda que a senha esteja correta, será retornada uma mensagem de erro. Isso não é bom, afinal não importa se o usuário digita em caixa alta ou baixa, o importante é o valor digitado conferir com o armazenado no banco – array no nosso caso (principalmente para buscas). Para isso usamos as funções strtolower() ou strtoupper(), afinal elas convertem todos os caracteres de uma string para caixa baixa e caixa alta, respectivamente. Veja como ficaria o código:
VALIDALOGIN.PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <?php $login = array("user01", "user02", "user03", "user04", "user05"); $senha = array("senha01", "senha02", "senha03", "senha04", "senha05"); //Calculo o tamanho do array $login $tamArray = count($login); //Crio uma variável auxiliar $msg = FALSE; //Uso um loop para percorrer o array - escolherei o FOR, mas você pode usar qualquer outro for ($i = 0; $i < $tamArray; $i++) { //Converto ambas as strings para caixa baixa if (strtolower($_POST["login"]) == strtolower($login[$i]) && strtolower($_POST["senha"]) == strtolower($senha[$i])) { $msg = TRUE; break; } } //Verifico se a variável auxiliar $msg saiu do loop com o valor TRUE (indicando login efetuado com sucesso) if ($msg) { echo "ok"; } else { echo "erro"; } ?> |
Em muitas ocasiões necessitamos de apenas um pedaço da string, sendo necessário retirar essa parte do texto completo. Para isso usamos a função substr() que admite os seguintes parâmetros: string a ser trabalhada, posição inicial da substring dentro da string maior, tamanho da substring. Agora vocês devem se perguntar: que raios é posição inicial da substring? Explicando: uma string é também conhecida como cadeia de caracteres, ou seja, dentro de um texto cada caractere corresponde a uma posição. Sim, como vocês devem estar visualizando, um texto acaba sendo entendido como um array de caracteres. Veja o exemplo a seguir: imaginem a string “Paulo Silva”. Dizemos que 0 (zero) é a posição inicial da string, correspondente a letra P; na posição 2 temos a letra u; na posição 4 temos a letra o. Uma substring que se inicie na posição 0 e tenha um comprimento de 5 caracteres irá retornar o nome Paulo. Ficou mais claro agora, né? Legal! Outra coisa importante: dentro de uma string, o espaço vazio é contado como um caracter válido, ou seja ocupa uma posição. Ao trabalhar com substrings devemos levar em consideração os espaços vazios, evitando erros desnecessários. Vejamos a função substr() em ação:
SUBSTR.PHP
1 2 3 4 5 6 7 8 | <?php //Declaro a string maior $string = "João Paulo Rodrigues da Silva Mendes"; //Mando imprimir uma substring de 4 caracteres, iniciando a partir da posição 0 echo substr($string, 0, 4); //Mando imprimir uma substring de 5 caracteres, iniciando a partir da posição 5 echo substr($string, 5, 5); ?> |
Para praticar, tentem imprimir todas partes do nome acima isoladamente, usando a função substring (será necessário extrair cinco substrings). Uma outra função útil para tratar strings, é a strlen() que retorna o tamanho de uma string. Por tamanho de uma string, nos referimos a quantidade de caracteres que ela possui. Se vamos tratar strings cujo tamanho nos é desconhecido, essa função é fundamental para evitarmos erros em nosso programa. Veja o código abaixo:
STRLEN.PHP
1 2 3 4 5 6 | <?php //Declaro a string maior $string = "João Paulo Rodrigues da Silva Mendes"; //Mando imprimir o tamanho da string echo strlen($string); ?> |
Aeee, matéria nova!
Estamos em movimento novamente.
Vlw Mestre!
Há braços.
Parabéns, bem explicado!
coloquei no favoritos e Voltarei + vezes.
Tb acho que precisamos na web vê toda explicação esgotada sobre o assunto, isto é vê todas as funções nativas do php em um só lugar com a qualidade de explicação aqui escrita.