Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Oi,
Eu tenho um campo de pesquisa, telefone do cliente, o banco é antigo e não tem nenhuma formatação
os dados podem estar assim:
(11) 98110923
11 98345025
11-3091-1123
e por ai vai, então como no 1 exemplo
(11) 98110923 se eu digito (11) 9811-0923 ou 11 98110923 não aparece o resultado, o que eu posso fazer?
Obrigado
Nesse caso, eu sugeriria buscar ignorando caracteres não numéricos.
No PHP:
$telefone = preg_replace( "/[^0-9]/iu", '', $telefone );
Isso remove qualquer coisa que não seja número
Use uma função semelhante do seu SGBD no WHERE do seu SELECT
ESerra obrigado por responder,
É uma boa idéia, como eu posso fazer o download, remover caracteres não numéricos, espaços e upar de novo, porque daqui pra frente o campo formatado vai ser tudo bem.
Boa semana.
Beraldo, muito obrigado também,
Eu tentei assim:
<?php
$customers_telephone = preg_replace( "/[^0-9]/iu", '', $customers_telephone );
echo tep_draw_form('orders', FILENAME_ORDERS, '', 'get'); ?>
<?php echo 'Fone:' . ' ' . tep_draw_input_field('customers_telephone', '', 'size="12"'); ?>
</form>
elseif(isset($HTTP_GET_VARS['customers_telephone'])) {
$customers_telephone = preg_replace( "/[^0-9]/iu", '', $customers_telephone );
$customers_postcode = tep_db_prepare_input($HTTP_GET_VARS['customers_telephone']);
$orders_query_raw = "select o.orders_id, o.customers_email_address, o.customers_name, o.customers_id, o.payment_method, o.date_purchased, o.last_modified, o.currency, o.currency_value, s.orders_status_name, ot.text as order_total from " . TABLE_ORDERS . " o left join " . TABLE_ORDERS_TOTAL . " ot on (o.orders_id = ot.orders_id), " . TABLE_ORDERS_STATUS . " s where o.customers_telephone = '" . $customers_telephone . "' and o.orders_status = s.orders_status_id and s.language_id = '" . (int)$languages_id . "' and ot.class = 'ot_total' order by orders_id DESC";
}
Mas agora não exibe nenhum resultado, mesmo que eu copie um numero do banco de dados da maneira como esta
Agradeço a sua ajuda, boa semana.
Você não precisa baixar nada, basta montar uma query para ler todos os resultados, usar uma ER (como o Beraldo citou) que remova tudo deixando apenas os números, formate estes números para o padrão correto e atualize o BD, pronto...
Eu apoio a sugestão do ESerra, de corrigir o banco o mais cedo possível. Isso pode poupar trabalho futuramente. Se puder fazer isso agora, melhor. E sugiro separar o telefone do DDD, em dois campos da tabela. Pode ser útil para consultas futuras.
Caso seja uma aplicação em produção e não possa alterar o banco agora, você precisa alterar este trecho da sua query:
where o.customers_telephone
em vez de usar o valor do campo, precisa usar uma função de replace, usando ER, assim como fez no PHP.
Você pode tentar utilizar fulltext para o campo, mas não sei se vai ser eficiente, se não for ai você terá que montar uma query que englobe os vários modos com o dado está cadastrado no BD. O correto mesmo seria você normalizar estes dados ai, isso resolveria este problema e todos os outros relacionado a falta de normalização.