Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) PHP Mssql order by


Ricardo Nogueira

Pergunta

Pessoal boa tarde.

Estou batendo cabeça a 3 dias para desvendar o porque não consigo através do formulário fazer uma pesquisa no banco e dar ao usuário a opção de como quer ordernar os dados.

Logo abaixo segue o script para menciono onde está o erro.

<?php

require_once("members.php");

include("funcoes.php");

mssql_connect("localhost", "senha", "password") or die(mssql_error());

mssql_select_db("portabilidade") or die(mssql_error());

$datainitial = "{$_POST["ano1"]}-{$_POST["mes1"]}-{$_POST["dia1"]}";

$datafinal = "{$_POST["ano2"]}-{$_POST["mes2"]}-{$_POST["dia2"]}";

$_POST['ordenar[]'];

//$order = "Order By '".$ordenar."' ASC";

if (isset ($_POST['submit']))

{

echo "$ordenar\n";

echo "Searching from\n";

echo $datainitial;

echo "\nto\n";

echo $datafinal;

/*if (!$_POST['datainitial'] & !$_POST['datafinal']) {

die('<p align=right style=position:absolute;left:auto;top:80px;height:40px;wight:270px;font-family:Courier New;font-size:15px;color:#000080">You must select RN or TN</p>');

}

else{*/

//$re = mssql_query("SELECT * FROM portabilidade where convert(varchar(10) subscription_activation_timestamp,111) between convert(varchar(10)'$datainitial') and convert(varchar(10)'$datafinal') ORDER BY subscription_tn;")or die(mssql_error());

$re = mssql_query ("SELECT * FROM portabilidade WHERE CONVERT(VARCHAR(50),subscription_activation_timestamp,111) BETWEEN CONVERT(VARCHAR(50),'$datainitial',111) AND CONVERT(VARCHAR(50),'$datafinal',111) order by '$ordenar' ASC");

$line = mssql_num_rows($re); A variável ordenar deveria dar opção ao usuário por quais dados quer ordenar

if ($line === 0){

die('<p align=center style="position:static;top:80px;height:40px;wight:270px;font-family:Courier New;font-size:15px;color:#000080">No Record was found on Database.</p>');

}else

{

?>

<table width="75%" border="0" align=center>

<tr>

<th scope="col" abbr="Number">Number</th>

<th scope="col" abbr="Provider">Provider</th>

<th scope="col" abbr="EOT">EOT</th>

<th scope="col" abbr="SPID">SPID</th>

<th scope="col" abbr="CNL">CNL</th>

<th scope="col" abbr="LNP">Number Type</th>

<th scope="col" abbr="lnp">Type</th>

<th scope="col" abbr="Status">Status</th>

<th scope="col" abbr="Reason">Reason</th>

</tr>

<?php

while($l = mssql_fetch_array($re))

{

$id = $l["portabilidadeID];

$tn = $l["subscription_tn"];

$rn = $l["subscription_rn1"];

//$data = implode("-", array_reverse(explode("-", $l["data_nascimento"])));

$eot = $l["subscription_recipient_eot"];

$spid = $l["subscription_recipient_sp"];

$cnl = $l["subscription_new_cnl"];

$lnp = $l["subscription_lnp_type"];

$line = $l["subscription_line_type"];

$status = $l["status"];

$reason = $l["subscription_download_reason"];

echo "

<tr>

<td> $tn</td>

<td> $rn</td>

<td> $eot</td>

<td> $spid</td>

<td> $cnl</td>

<td> $lnp</td>

<td> $line</td>

<td> $status</td>

<td> $reason</td>

</tr>\n"

;}

}

//}

}

else

{

?>

<form action=<?php echo $_SERVER['PHP_SELF]?>" method="post" align=left>

<h1 align=center style="position:static;font-family:Courier New;color:#000080;font-size:12px;z-index:2" size="16">Searching on Portability Database</h1>

<table width="250" border="0" align="center" cellspancing="0">

<tr>

<tr><td scope="col" abbr="IDate">Initial Date:</td><tr>

<tr><td scope="col" abbr="INIDate">

<?php

//$datainitial = explode('-',$datainitial);

$datainitial = explode ('-', $datainitial);

echo monta_select("ano1", 2000, 2020);

echo monta_select("mes1", 1, 12);

echo monta_select("dia1", 1, 31);

$datainitial = "{$_POST["ano1"]}-{$_POST["mes1"]}-{$_POST["dia1"]}";

?>

</td></tr>

<tr><td>End Date:</td></tr>

<tr><td>

<?php

$datafinal = explode('-',$datafinal);

echo monta_select("ano2", 2000, 2020);

echo monta_select("mes2", 1, 12);

echo monta_select("dia2", 1, 31);

$datafinal = "{$_POST["ano2"]}-{$_POST["mes2"]}-{$_POST["dia2"]}";

?>

</td></tr>

</tr>

<tr>

<tr><td>Order By:</td></tr> Aqui está o option select, já tentei várias formas menos a correta, que não sei.

<tr><td>

<select name=ordenar[]" ">

<option selected value="">Order by</option>

<option select value="ordenar['subscription_tn]">Number</option>

<option select value="ordenar['subscription_rn1']">Provider</option>

<option select value=ordenar['subscription_recipient_eot]">EOT</option>

<option select value="ordenar['subscription_lnp_type']">LNP</option>

<option select value=ordenar['subscription_line_type]">Line</option>

</select>

</td></tr>

</tr>

<tr>

<tr><td>

<input align=center type="submit" name="submit" value="Search" class="decoder" style="border:0;color:#000080;width:76px;height:22px;border:0">

</td></tr>

</tr>

</form>

<?php

}

?>

</body>

</html>

Abraços

Ricardo

Editado por Ricardo Nogueira
Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Ola,

onde tem

<select name="ordenar[]" ">
<option selected value="">Order by</option>
<option select value="ordenar['subscription_tn']">Number</option>
<option select value="ordenar['subscription_rn1']">Provider</option>
<option select value="ordenar['subscription_recipient_eot']">EOT</option>
<option select value="ordenar['subscription_lnp_type']">LNP</option>
<option select value="ordenar['subscription_line_type']">Line</option>
</select>
deixe assim:
<select name="ordenar" ">
<option selected value="">Order by</option>
<option select value="subscription_tn">Number</option>
<option select value="subscription_rn1">Provider</option>
<option select value="subscription_recipient_eot">EOT</option>
<option select value="subscription_lnp_type">LNP</option>
<option select value="subscription_line_type">Line</option>
</select>
*onde value tem que ser o nome dos campos da tabela q deseja ser ordenado; e la no começo onde tem
$_POST['ordenar[]'];
substitua por
$ordenar = $_POST['ordenar'];

isso já deve funcionar, qualquer coisa posta de novo;

se resolver por favor coloca o tópico como resolvido.

espero ter ajudado;

Link para o comentário
Compartilhar em outros sites

  • 0
Ola,

onde tem

<select name="ordenar[]" ">
<option selected value="">Order by</option>
<option select value="ordenar['subscription_tn']">Number</option>
<option select value="ordenar['subscription_rn1']">Provider</option>
<option select value="ordenar['subscription_recipient_eot']">EOT</option>
<option select value="ordenar['subscription_lnp_type']">LNP</option>
<option select value="ordenar['subscription_line_type']">Line</option>
</select>
deixe assim:
<select name="ordenar" ">
<option selected value="">Order by</option>
<option select value="subscription_tn">Number</option>
<option select value="subscription_rn1">Provider</option>
<option select value="subscription_recipient_eot">EOT</option>
<option select value="subscription_lnp_type">LNP</option>
<option select value="subscription_line_type">Line</option>
</select>
*onde value tem que ser o nome dos campos da tabela q deseja ser ordenado; e la no começo onde tem
$_POST['ordenar[]'];
substitua por
$ordenar = $_POST['ordenar'];

isso já deve funcionar, qualquer coisa posta de novo;

se resolver por favor coloca o tópico como resolvido.

espero ter ajudado;

Cara obrigadão pela força.

Se não for abusar eu tentei incluir um script de paginação nesse mesmo script acima, mas não rolou.

Você teria uma dica para me dar em cima desse script?

Mais uma vez grato pela atenção.

Ricardo

Link para o comentário
Compartilhar em outros sites

  • 0

vamo la, vou explicar como funciona e depois tentar fazer um codigo simples aqui, pode ser q não funcione que eu to no windows e aqui n tem Apache etc etc...

primeiramente para uma paginacao você tem que saber quantos registros voce tem no total. ( mssql_num_rows() )

depois voce tem que saber quantas paginas você tera no total ( nr_de_registros / nr_por_pag )

depois voce fara outro select so com os resultados da pagina que voce quer e exibira

e por ultimo criara os botoes de avancar e voltar..

vamo fazer o codigo pra voce entender. (vo aproveitar parte do seu codigo como exemplo)

$paginaAtual = 0; //forca a pagina para zero.
if ($_GET[pag]){ 
  $paginaAtual = $_GET[pag]; // se tiver algum parametro pag setado via get ele obtem, se não ficara zero setado acima.
}

$nrPorPagina = 10; // aqui voce coloca quantos registros por pagina voce quer.

$primeiroRegistro = $paginaAtual*nrPorPagina;

$re = mssql_query ("SELECT * FROM portabilidade WHERE CONVERT(VARCHAR(50),subscription_activation_timestamp,111) BETWEEN CONVERT(VARCHAR(50),'$datainitial',111) AND CONVERT(VARCHAR(50),'$datafinal',111)");

$totalRegistros = mssql_num_rows($re);
$totalPagina = ceil ($totalRegistros / $nrPorPagina)-1; // faz a divisao arredondado pra cima e retirando 1, para q a pagina comece de 0;

$re = mssql_query ("SELECT * FROM portabilidade WHERE CONVERT(VARCHAR(50),subscription_activation_timestamp,111) BETWEEN CONVERT(VARCHAR(50),'$datainitial',111) AND CONVERT(VARCHAR(50),'$datafinal',111) order by '$ordenar' ASC LIMIT $primeiroRegistro,$nrPorPagina");

//aqui voce lista os resultados.


fazendo botoes avancar e voltar;
<? if ( $paginaAtual != 0 ){?>
<a href="xxxxxxxxx.php?pag=<?=$paginaAtual-1?>">voltar</a> //lembre de passar tb o parametro de ordenar
<? }?>
<? if ( $paginaAtual < $totalPagina  ){?>
<a href="xxxxxxxxx.php?pag=<?=$paginaAtual+1?>">avancar</a> //lembre de passar tb o parametro de ordenar
<? }?>

tenta entender o codigo direitinho antes de aplicar, se voce entender o funcionamento n vai ter problema em aplicar, qualquer duvida pegunta :)

boa sorte.

Link para o comentário
Compartilhar em outros sites

  • 0

Toze,

Obrigado pelo help desde já agradeço. Entretanto como uso MSSQL o LIMIT não funciona lá.

Mas peguei um código e incrementei, porém a primeira página mostra sem problemas. A partir da segunda não apresenta nada.

Tem um item critério que não passa nada.

Se você puder me ajudar mais uma vez agradeço.

Bem na verdade o critério nesse caso está entre duas data passada $datainitial e $datafinal.

<?

mssql_connect("localhost", "username", "pass") or die(mssql_error());

mssql_select_db("portabilidade") or die(mssql_error());

$datainitial = "{$_POST["ano1"]}-{$_POST["mes1"]}-{$_POST["dia1"]}";

$datafinal = "{$_POST["ano2"]}-{$_POST["mes2"]}-{$_POST["dia2"]}";

$ordenar = $_POST['ordenar'];

//$order = "Order By '".$ordenar."' ASC";

if (isset ($_POST['submit']))

{

if ($_POST['ordenar'] == ""){

die('<p align=center style=position:static;top:80px;height:40px;wight:270px;font-family:Courier New;font-size:15px;color:#000080">You must select at least one order by item below.</p>');

}

echo "Searching from\n";

echo $datainitial;

echo "\nto\n";

echo $datafinal;

//Aqui começa o exemplo do código de paginação

$criterio = "";

if ($_GET["criterio]!=""){

$txt_criterio = $_GET["criterio"];

$criterio = "WHERE CONVERT(VARCHAR(50),subscription_activation_timestamp,111) BETWEEN CONVERT(VARCHAR(50),'$datainitial',111) AND CONVERT(VARCHAR(50),'$datafinal',111) order by '$ordenar' asc";

} //Número máximo de links a serem exibidos

$numero_links = "11";

//Número de registros por página

$total_reg = "20";

if(!$pagina) {

$pc = "1";

} else {

$pc = $pagina;

}

// intevalo revebe o valor da variavel numero_links

$intervalo = $numero_links;

// inicio recebe pc - 1 para montamos o sql

//$inicio = $pc-1;

$inicio = $pc*$total_reg;

//Aqui eu mostro o total de registros encontrados

$sql = mssql_query("SELECT * FROM portabilidade ".$criterio);

$tr = mssql_num_rows($sql);

//Aqui vai o código que substitui o famoso LIMIT do MySql. Adaptado para SQL Server.

$sql2=mssql_query("

select * from (

select top $total_reg * from (

select top $inicio * from portabilidade ".$criterio."

) as newtbl order by '$ordenar' desc

) as newtbl2 order by '$ordenar' asc");

// recebemos o valor do total de paginas

$tp = ceil($tr/$total_reg);

if ($tr === 0){

die('<p align=center style=position:static;top:80px;height:40px;wight:270px;font-family:Courier New;font-size:15px;color:#000080">No Record was found on Database.</p>');

}else

{

// listamos os dados de acordo com os parametros da sql2

echo "<font size='1' face='Verdana'>";

echo "Página $pc de $tp<br> Total de registros encontrados: $tr<br>";

?>

<table width="75%" border="0" align=center>

<tr>

<th scope="col" abbr="Number">Number</th>

<th scope="col" abbr="Provider">Provider</th>

<th scope="col" abbr="EOT">EOT</th>

<th scope="col" abbr="SPID">SPID</th>

<th scope="col" abbr="CNL">CNL</th>

<th scope="col" abbr="LNP">Number Type</th>

<th scope="col" abbr="lnp">Type</th>

<th scope="col" abbr="Status">Status</th>

<th scope="col" abbr="Reason">Reason</th>

</tr>

<?php

while($l = mssql_fetch_array($sql2))

{

$id = $l["portabilidadeID];

$tn = $l["subscription_tn"];

$rn = $l["subscription_rn1"];

//$data = implode("-", array_reverse(explode("-", $l["data_nascimento"])));

$eot = $l["subscription_recipient_eot"];

$spid = $l["subscription_recipient_sp"];

$cnl = $l["subscription_new_cnl"];

$lnp = $l["subscription_lnp_type"];

$line = $l["subscription_line_type"];

$status = $l["status"];

$reason = $l["subscription_download_reason"];

echo "

<tr>

<td> $tn</td>

<td> $rn</td>

<td> $eot</td>

<td> $spid</td>

<td> $cnl</td>

<td> $lnp</td>

<td> $line</td>

<td> $status</td>

<td> $reason</td>

</tr>\n"

;}

echo "<hr>";

// A variavel aux recebe o valor do total de paginas/intervalo

$aux = $tp/$intervalo;

$aux1 = $pc/$intervalo;

$pi = $aux1 * $intervalo;

if ($pi == "0") {

$pi = "1";

}

$pf = $pi + $intervalo -1;

$anterior = $pi-$intervalo;

if($pc<=$intervalo) {

$anterior = 1;

}

$aux2 = $pi + 1;

if($pi>1) {

$aux = $pi - 1;

$aux2 = $pi + 1;

// Começa a listar a paginação

echo "<a href=paginar.php?pagina=$aux&criterio=$txt_criterio'> << <b> Anterior </b></a>&nbsp;";

}

else

{

echo "<font size='1' face='Verdana'>";

echo "<< Anterior &nbsp;&nbsp;&nbsp;";

echo "</font>";

}

// Monta os links da parte central da paginação

for ($pi;$pi<$pf;$pi++)

{

if($pi<=$tp) {

if($pc==$pi) {

echo "<strong><font size='1' face='Verdana'>";

echo "<b>[" . $pi . ]</b>&nbsp;";

echo "</font></strong>";

} else {

echo "<a href='paginar.php?pagina=" . $pi . "&criterio=" . $txt_criterio . "'>" . $pi . "</a>&nbsp;";

}

}

}

// faz verificação pra incluir ou não link na palavra próximo

if($pc != $tp){

echo "<strong><font size='1' face='Verdana'>";

echo "<a href='paginar.php?pagina=$aux2&criterio=$txt_criterio'><b>&nbsp;&nbsp;&nbsp; Próximo</b> >></a>";

echo "</font></strong>";

}

else

{

echo "<font size='1' face='Verdana'>";

echo "&nbsp;&nbsp;&nbsp; Próximo >>";

echo "</font>";

}

}

}

?>

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...