Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Loko da Web

[Resolvido] Busca pelo 0-9

Recommended Posts

Boa tarde!

 

Bah, to com um probleminha... tenho uma busca pela letra do alfabeto e numero, ficou mais ou menos assim:

 

A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

 

Mas, eu quero ele assim:

A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | 0-9

 

Antes eu programava em ASP, consegui fazer isso, ficou + ou - assim

 

busca.asp

<%

Count = 0 

i = 0 

For i = 1 to 26

 Response.write("<td align='center'>")
 Response.write("<div align='center' class='pag-b'>")
 Response.write("<a href=busca_resultados.asp?letra="&Replace(Mid(letras, i,1),"#","0")&">")
 Response.write(""&(Mid(letras, i,1))&"") 
 Response.write("</a>")
 Response.write("</div>")
 Response.write("</td>")
 
%>

busca_resultados.asp

 

If isNumeric(letra) Then
 	letra = "[0-9]"
End If
Set RS= Server.CreateObject("ADODB.Recordset") 
sql = "SELECT * FROM reg WHERE nome LIKE '"&letra&"%' Order by nome ASC"
rs.Open SQL, conn, 3

Cara, não tenho ideia de como fazer isso em PHP, pois quando sao numeros "separados" consigo fazer a busca pelo numero correspondente, mas eu queria saber se tem alguma forma de fazer 0-9 ser reconhecido como numero "global".

 

Eu utilizei a busca de alfabeto daqui do forum mesmo, segue abaixo:

 

<?
//SISTEMA DE BUSCA POR LETRA E NUMERO
//Declara as letra e numeros 
$arr_alfa = array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","0-9");

//Exec o foreach para imprimir as letras e numeros
foreach( $arr_alfa as $chave => $letra )
		
		echo " <a href=\"listar_letra.php?letra=$letra\">$letra</a> ";
		} 
		//Apenas para colocar espaço entre letra e numeros
		if( $chave < count($arr_alfa)-1 )
 	echo " | ";
		
}
?>

A pagina de resultado

 

$letra = $_GET['letra'];
$sql_select = "SELECT * FROM tab_reg where nome LIKE '" . $_GET['letra'] . "%'"; 
$sql_query = mysql_query($sql_select);

E ai galera tem solucao, agradeço a atencao de todos !

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja a função range():

http://www.php.net/range

 

Ela gera o array com as letras. Facilita bastante nesse caso.

 

 

 

 

Na verdade, não entendi qual é a sua dúvida, especificamente. O script parece estar certo. Aparece algum erro? O que quer fazer de diferente?

 

Se a dúvida for "como interpretar 0-9", veja isto:

http://dev.mysql.com/doc/refman/5.1/en/regexp.html

 

Pode usar ER para casar com o padrão passado pela URL

Compartilhar este post


Link para o post
Compartilhar em outros sites

Constrói sua query passo a passo de acordo com o valor do array.

 

Comece uma variável com SELECT * FROM ...

 

Dentro do seu foreach, verifique se o valor corrente é numérico com is_numeric(), se for concatene ( .= ) à variável da query um MySQL BETWEEN, de 0 a 9.

 

Se não, concatene o seu MySQL LIKE mesmo.

 

Fora do laço, se necessário, concatene um ORDER BY e etc.

 

Depois passe essa variável como argumento de mysql_query()

Compartilhar este post


Link para o post
Compartilhar em outros sites


$letra = $_GET['letra'];

 

if($letra == '0-9')

{

$sql = "select substring(nome,1,1), nome from tab_reg where substring(nome,1,1) between '0' and '9' order by nome";

}

else

{

$sql = "select nome from tab_reg where nome like '$letra%' order by nome";

}

$exe = mysql_query($sql);

while($rs = mysql_fetch_array())

{

echo $rs['nome']."<br>";

}

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Foi o que beraldo falou use range é mais facil:

 

foreach(range('A', 'Z') as $letra){
echo "<a href=\"listar_letra.php?letra=$letra\">$letra</a> ";
}
echo "<a href=\"listar_letra.php?letra=[0-9]\"> | 0-9</a> ";

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.