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

[Resolvido] Droplist (lista suspensa) PHP


dinohills

Pergunta

Pessoal estou fazendo paginação com o php até ai tudo beleza.

Mas o que eu estou fazendo é o seguinte, a paginação me mostra o numero de páginas geradas ai eu coloco esses números em uma droplist beleza, ai quando eu seleciono um numero e clico no botão pra ele ir na pagina selecionada ele não vai :angry: !!

Dêem uma olhada no código e vê o que pode tá errado.

<?
// Informações da query. No caso, "SELECT * FROM contatos"
$campos_query = "*";  
$final_query  = "FROM contatos";

// Declaração da pagina inicial  
$pagina = $_GET["pagina"];  
if($pagina == "") {  
    $pagina = "1";  
} 

// Maximo de registros por pagina  
$maximo = 5;

// Calculando o registro inicial  
$inicio = $pagina - 1;  
$inicio = $maximo * $inicio;

// Conta os resultados no total da minha query
$strCount = "SELECT COUNT(*) AS 'num_registros' $final_query";
$query2    = mysql_query($strCount);
$row      = mysql_fetch_array($query2);
$total    = $row['num_registros'];

// Calculando pagina anterior
    $menos = $pagina - 1;

// Calculando pagina posterior
    $mais = $pagina + 1;

$pgs = ceil($total / $maximo);
    if($pgs > 1 ) {
        // Mostragem de pagina
        if($menos > 0 ){
            echo "<a href=\"?pagina=1\">primeira</a> ";
        }
        else {
            echo "<a>primeira</a>";
        }
        if($menos > 0) {
           echo "<a href=\"?pagina=$menos\">anterior</a> ";
        }

//droplist com os numeros da pagina
echo "<form name=\"form\" action=\"?pagina=$i \" method=\"post\">";
echo "<select name=\"opcao[]\">";
for($i=1;$i <= $pgs;$i++) {
       echo "<option  value=\"$i\" > $i</option>";
}
echo "</select><input type=\"submit\" value=\"muda\"></form>";

        if($mais <= $pgs) {
           echo "   <a href=\"?pagina=$mais\">próxima</a>";
        }
        if($mais <= $pgs) {
        echo "   <a href=\"?pagina=$pgs\">ultima</a>";
        }
    }
?>

Bom ta ai o código se alguém souber o que eu posso faze pra resolve isso posta ai :rolleyes: vlw!!!!!

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

Posts Recomendados

  • 0

$pagina = $_GET["pagina"];

echo "<form name=\"form\" action=\"?pagina=$i \" method=\"post\">";

voce esta usando o method=POST para enviar e esta recebendo com $_GET

mude o method para GET já que passa parametros

como:

echo "<a href=\"?pagina=1\">primeira</a> ";

echo "<a href=\"?pagina=$menos\">anterior</a> ";

e no action action=\"?pagina=$i \" /// Remova o espaço entre o $i e \"

Link para o comentário
Compartilhar em outros sites

  • 0
$pagina = $_GET["pagina"];

echo "<form name=\"form\" action=\"?pagina=$i \" method=\"post\">";

voce esta usando o method=POST para enviar e esta recebendo com $_GET

mude o method para GET já que passa parametros

como:

echo "<a href=\"?pagina=1\">primeira</a> ";

echo "<a href=\"?pagina=$menos\">anterior</a> ";

e no action action=\"?pagina=$i \" /// Remova o espaço entre o $i e \"

Bom dia, obrigado pela ajuda mas não deu certo fiz as mudanças como você disse e não resolveu não.

echo "<form name=\"form\" action=\"?pagina=$i\" method=\"get\">";

Link para o comentário
Compartilhar em outros sites

  • 0

na barra de endereço aparece o que??

coloque logo após o get para ver o que recebe:

$pagina = $_GET["pagina"];

Echo "Recebido : ".$pagina;

e coloque nomeseuscript.php?pagina=1

e não esqueça de colocar no SQl

limit $inicio ,$maximo

Link para o comentário
Compartilhar em outros sites

  • 0
na barra de endereço aparece o que??

coloque logo após o get para ver o que recebe:

$pagina = $_GET["pagina"];

Echo "Recebido : ".$pagina;

e coloque nomeseuscript.php?pagina=1

e não esqueça de colocar no SQl

limit $inicio ,$maximo

Bom fiz o que me disse

$pagina = $_GET["pagina"];

Echo "Recebido : ".$pagina;

a saída na tela é: "Recebido :" mesmo selecionando outras paginas pelo droplist.

Mas quando eu clico nos links a saída na tela fica assim: "Recebido : 3" ai o numero muda conforme a página.

Lá na consulta SQL eu to usando o LIMIT $inicio,$maximo.

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

  • 0

outra parte que deve mudar, da forma que esta o inicio sempre vai ser 1:

// Calculando o registro inicial

if($inicio < 1)

$inicio = $pagina - 1;

$inicio = $maximo * $inicio;

se ainda não funcionar, poste como esta o Script após as mudanças

desculpe, falei besteira, deixe da forma que estava, voce já controla isto mais acima

de um exho na consulta do SQL e veja como aaprece o Select, tente colcoar ele no phpmyadmin, acho que o problema agora esta lá

Link para o comentário
Compartilhar em outros sites

  • 0
outra parte que deve mudar, da forma que esta o inicio sempre vai ser 1:

// Calculando o registro inicial

if($inicio < 1)

$inicio = $pagina - 1;

$inicio = $maximo * $inicio;

se ainda não funcionar, poste como esta o Script após as mudanças

desculpe, falei besteira, deixe da forma que estava, voce já controla isto mais acima

de um exho na consulta do SQL e veja como aaprece o Select, tente colcoar ele no phpmyadmin, acho que o problema agora esta lá

Bom novamente mudanças feitas e nada fiz de duas formas

// Calculando o registro inicial

if($inicio < 1){

$inicio = $pagina - 1;

}

$inicio = $maximo * $inicio;

Não deu certo

Da sua forma

if($inicio < 1)

$inicio = $pagina - 1;

$inicio = $maximo * $inicio;

Também não funcionou

Script depois das mudanças como você pediu

<?
// Informações da query. No caso, "SELECT * FROM contatos"
$campos_query = "*";  
$final_query  = "FROM contatos";

// Declaração da pagina inicial  
$pagina = $_GET["pagina"];  
Echo "Recebido : ".$pagina;
if($pagina == "") {  
    $pagina = "1";  
} 

// Maximo de registros por pagina  
$maximo = 5;

// Calculando o registro inicial  
if($inicio < 1)
$inicio = $pagina - 1;
$inicio = $maximo * $inicio;

// Conta os resultados no total da minha query
$strCount = "SELECT COUNT(*) AS 'num_registros' $final_query";
$query2    = mysql_query($strCount);
$row      = mysql_fetch_array($query2);
$total    = $row['num_registros'];

// Calculando pagina anterior
    $menos = $pagina - 1;

// Calculando pagina posterior
    $mais = $pagina + 1;

$pgs = ceil($total / $maximo);
    if($pgs > 1 ) {
        // Mostragem de pagina
        if($menos > 0 ){
            echo "<a href=\"?pagina=1\">primeira</a> ";
        }
        else {
            echo "<a>primeira</a>";
        }
        if($menos > 0) {
           echo "<a href=\"?pagina=$menos\">anterior</a> ";
        }

//droplist com os numeros da pagina
echo "<form name=\"form\" action=\"?pagina=$i\" method=\"GET\">";
echo "<select name=\"opcao\">";
for($i=1;$i <= $pgs;$i++) {
    
        echo "<option  value='{$i}' > $i</option>";
    
}

echo "</select><input type=\"submit\" value=\"muda\"></form>";


        if($mais <= $pgs) {
           echo "   <a href=\"?pagina=$mais\">próxima</a>";
        }
        if($mais <= $pgs) {
        echo "   <a href=\"?pagina=$pgs\">ultima</a>";
        }
    }
?>

Link para o comentário
Compartilhar em outros sites

  • 0

pode remover esta ultima instrução

if($inicio < 1)

viu

coloque um echo no inicio do script que mostre a query do select

veja o que ele esta aparecendo nas variaveis inicio, maximo, sem clicar na pagian e depois clicando na pagina

Link para o comentário
Compartilhar em outros sites

  • 0
pode remover esta ultima instrução

if($inicio < 1)

viu

coloque um echo no inicio do script que mostre a query do select

veja o que ele esta aparecendo nas variaveis inicio, maximo, sem clicar na pagian e depois clicando na pagina

Bom coloquei a echo no inicio do script

echo "SQL=<br>" .$query;

No inicio ele mostra: "SQL=" e mesmo selecionando os itens da droplist e clicando nos links pra mudança de pagina ela so retorna "SQL="

Ai por curiosidade coloquei também no final do script o resultado foi esse:

SELECT * FROM contatos order by nome LIMIT 0,5 SQL=

SELECT * FROM contatos order by nome LIMIT 0,5 SQL=

SELECT * FROM contatos order by nome LIMIT 0,5 SQL=

SELECT * FROM contatos order by nome LIMIT 0,5 SQL=

SELECT * FROM contatos order by nome LIMIT 0,5

Selecionando itens na droplist o resultado permanece igual, mas quando eu clico nos links ai ele muda:

SELECT * FROM contatos order by nome LIMIT 5,5 SQL=

SELECT * FROM contatos order by nome LIMIT 5,5 SQL=

SELECT * FROM contatos order by nome LIMIT 5,5 SQL=

SELECT * FROM contatos order by nome LIMIT 5,5 SQL=

SELECT * FROM contatos order by nome LIMIT 5,5

SELECT * FROM contatos order by nome LIMIT 10,5 SQL=

SELECT * FROM contatos order by nome LIMIT 10,5 SQL=

SELECT * FROM contatos order by nome LIMIT 10,5 SQL=

SELECT * FROM contatos order by nome LIMIT 10,5 SQL=

SELECT * FROM contatos order by nome LIMIT 10,5

e por ai vai ate dar o total de registros.

Link para o comentário
Compartilhar em outros sites

  • 0
realmente esta estranho..

faça um teste , coloque esta query logo após:

$inicio = $maximo * $inicio;

ele esta se perdendo em algum lugar

Olha não deu em nada também

$inicio = $pagina - 1;

$inicio = $maximo * $inicio;

echo "SQL=<br>" .$query;

A saída sempre é: "SQL=" não importa aonde eu clique.

Eu tava procurando umas coisas sobre droplist com PHP e achei isso

http://www.dreamincode.net/forums/showtopic53741.htm

será que não seria dessa forma?

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

  • 0

Não o echo..

coloque a pesquisa nesta posição, no lugar de fazer antes de iniciar a paginação coloque abaixo do

$inicio = $maximo * $inicio;

o echo vai mostrar sempre a mesma coisa já que vem antes do script, pode tirar ele e coloque no lugar a o "select * from .....limit $inicio ,$maximo"

o seu agora esta parecendo a pesquisa mesmo que esta se perdendo na paginação.

Link para o comentário
Compartilhar em outros sites

  • 0
Não o echo..

coloque a pesquisa nesta posição, no lugar de fazer antes de iniciar a paginação coloque abaixo do

$inicio = $maximo * $inicio;

o echo vai mostrar sempre a mesma coisa já que vem antes do script, pode tirar ele e coloque no lugar a o "select * from .....limit $inicio ,$maximo"

o seu agora esta parecendo a pesquisa mesmo que esta se perdendo na paginação.

É não deu também

$inicio = $pagina - 1;

$inicio = $maximo * $inicio;

$query = "SELECT $campos_query $final_query order by nome LIMIT $inicio,$maximo ";

echo "SQL=<br>" .$query;

Estranho é que parece que nessa parte

echo "<form name=\"form\" action=\"?pagina=$i\" method=\"GET\">";

a variavel $i não está pegando o valor certo pra faze a mudança de pagina

interessante que quando eu mando um echo na variavel $i ela me retorna o valor "6"

echo "<form name=\"form\" action=\"?pagina=$i\" method=\"GET\">";

echo "<select name=\"opcao\">";

for($i=1;$i <= $pgs;$i++) {

echo "<option value='{$i}' >$i</option>";

}

echo "</select><input type=\"submit\" value=\"muda\"></form>";

echo "var=" .$i;

o certo não seria monta um array com ela ?

Código completo da pagina talvez seja util:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="content-Type" content="text/html; charset=utf-8" />
        <title></title>
    <style type="text/css">

table {
        font-size:13px;
        font-family:verdana;
        background: #c0c0c0;
    }
        table thead {
        cursor: pointer;
    }
gal         tr:hover {
        background-color: #CCCCCC;
        }
        table thead tr {
            background: url(fundo_div_pesquisa.jpg);
            background-repeat:repeat-x;
        }
        table tbody tr {
            background:#f0f0f0;
        }
        th, td {
            border:thin solid white;
        }       
</style>
    </head>
    <body>
        <?php
header("Content-Type: text/html; charset=utf-8", true);
        include "validar_sessao.php";
        include "conexao_banco.php";
        ?>
<?
// Informações da query. No caso, "SELECT * FROM contatos"
$campos_query = "*";  
$final_query  = "FROM contatos";

// Declaração da pagina inicial  
$pagina = $_GET["pagina"];
Echo "Recebido : ".$pagina;
if($pagina == "") {  
    $pagina = "1";  
} 

// Maximo de registros por pagina  
$maximo = 5;

// Calculando o registro inicial  
$inicio = $pagina - 1;
$inicio = $maximo * $inicio;
echo "SQL=<br>" .$query;

// Conta os resultados no total da minha query
$strCount = "SELECT COUNT(*) AS 'num_registros' $final_query";
$query2    = mysql_query($strCount);
$row      = mysql_fetch_array($query2);
$total    = $row['num_registros'];

// Calculando pagina anterior
    $menos = $pagina - 1;

// Calculando pagina posterior
    $mais = $pagina + 1;

$pgs = ceil($total / $maximo);
    if($pgs > 1 ) {
        // Mostragem de pagina
        if($menos > 0 ){
            echo "<a href=\"?pagina=1\">primeira</a> ";
        }
        else {
            echo "<a>primeira</a>";
        }
        if($menos > 0) {
           echo "<a href=\"?pagina=$menos\">anterior</a> ";
        }

//droplist com os numeros da pagina
echo "<form name=\"form\" action=\"?pagina=$i\" method=\"GET\">";
echo "<select name=\"opcao\">";
for($i=1;$i <= $pgs;$i++) {
        echo "<option  value='{$i}' >$i</option>";
}


echo "</select><input type=\"submit\" value=\"muda\"></form>";
echo "var=" .$i;
if($mais <= $pgs) {
           echo "   <a href=\"?pagina=$mais\">próxima</a>";
        }
        if($mais <= $pgs) {
        echo "   <a href=\"?pagina=$pgs\">ultima</a>";
        }
    }
?>
        <table id="tabela">
            <thead>
                <tr>
                    <th>Nome</th>
                    <th>Telefone01</th>
                    <th>Telefone02</th>
                    <th>Telefone03</th>
                    <th>Telefone04</th>
                    <th>Contato</th>
                </tr>
            </thead>
<tbody>
<?
// Fazendo uma consulta SQL e retornando os resultados em uma tabela HTML
//$query = "SELECT * from contatos order by nome ";
$query = "SELECT $campos_query $final_query order by nome LIMIT $inicio,$maximo ";
$resultado = mysql_query($query,$conecta);
while ($linha = mysql_fetch_array($resultado)){

$contato = strlen($linha['contato']);
$nome = strlen($linha['nome']);

if ($linha['contato'] == '' ) {
        $ponto[0] = "";
} elseif ($contato <= '60') {
    $ponto[0] = "";
}
    else {
        $ponto[0] = "...";
    }
if ($linha['nome'] == '' ) {
        $ponto[1] = "";
} elseif ($nome <= '16') {
    $ponto[1] = "";
}
    else {
        $ponto[1] = "...";
    }
?>
<tr>
<td><? echo utf8_encode(substr($linha['nome'],0,16)).$ponto[1]; ?></td>
<td><? echo utf8_encode($linha['telefone01']); ?></td>
<td><? echo utf8_encode($linha['telefone02']); ?></td>
<td><? echo utf8_encode($linha['telefone03']); ?></td>
<td><? echo utf8_encode($linha['telefone04']); ?></td>
<td><? echo utf8_encode(substr($linha['contato'],0, 60)).$ponto[0]; ?></td>
</tr>
<?
}
?>
            </tbody>
        </table>
    </body>
</html>

Link para o comentário
Compartilhar em outros sites

  • 0

esta paginação eu uso e funciona 100% de uma olhada nela, altere a linha colocando a sua instrução

$sql_pag = $bd->executa( "Select * from $tabela $clausula" );

e coloque ela como include na pagina

no final da pagina coloque

echo $monta_link; para aparecer as paginas

<?
if(!isset($_GET["pag"]))
    $pag = 1;
else
   $pag = $_GET["pag"];
    
$quantidade = $qtde;
$inicio = ($pag-1) * $quantidade;

$sql_pag = $bd->executa( "Select * from $tabela $clausula" );

$total = $bd->nrw;
$paginas = ceil($total / $quantidade);

$ate = $inicio + $quantidade;
if($ate > $total) {
   $ate = $total;
}
$m1 = "";

//primeiro registro
if( $pag > 1 )
{
   $monta_link.= "<a href='?pag=1&$complink' class='$class'><< Primeira</a> ";
}

//anterior
if($pag > 1) {
   $anterior = $pag - 1;
   $monta_link.= "<a href='?pag=$anterior&$complink' class='$class'>Anterior</a>";
}

$monta_link.= " ";
$ini = ( $pag < 10 ? 1 : $pag - 7 );
$t_p = $ini + 14;
for( $i = $ini; $i <= $t_p; $i++ ) {
   if( $i <= $paginas )
   {
      if($pag == "$i") {
         $monta_link.= " <a href='?pag=$i&$complink' class='$class'><b>$i</b></a> ";
      } else {
         $monta_link.= " <a href='?pag=$i&$complink' class='$class'>$i</a> ";
      }
   }
   else
      continue;
}


//proxima
if($pag < ($paginas)) {
   $proxima = $pag + 1;
   $monta_link.= "<a href='?pag=$proxima&$complink' class='$class'>Próximo</a>";
}

//ultima
if( $pag < ( $paginas ) )
{
   $monta_link.= " <a href='?pag=$paginas&$complink' class='$class'>Última >></a>";
}
?>

Link para o comentário
Compartilhar em outros sites

  • 0

Bom num deu certo com seu script mudei a linha $sql_pag = $bd->executa( "Select * from contatos" );

coloquei ela como include ai no final da pangina coloquei echo $monta_link; ai so me retorna a pagina em branco.

acho que vo abandona isso da me dando um trabalho monstruoso. Se fosse facil eu copiaria do phpmyadmin ele faz isso mas quando você abre os arquivo dele de PHP você se perde :wacko:

Link para o comentário
Compartilhar em outros sites

  • 0

**Olha um facil da forma que voce usa suas querys, só colocar os dados de conexão com o MySql, no exemplo tem a variavel $nome, mude para o que voce tiver na sua tabela:

$re = mysql_query("SELECT count(*) as total FROM contatos");
$total = mysql_result($re, 0, "total");

$pagina = 0;
if(isset($_GET["pagina"])) 
{
    $pagina = $_GET["pagina"];
}

$limite = 10;
$paginas = ceil($total / $limite);

$inicio = $pagina * $limite; 

$sql = mysql_query("SELECT * FROM contatos LIMIT $inicio, $limite"); 

$conta = mysql_num_rows($sql);

while($l = mysql_fetch_array($sql)) 
{
    $nome = $l["nome"];
    echo $nome."<br>";
}

if($pagina > 0) {
    $menos = $pagina - 1;
    $url = $_SERVER["PHP_SELF"]."?pagina=".$menos;
    echo "<a href=\"$url\">Anterior</a>"; 
}

for($i = 1;$i < $paginas; $i++) { 
    $url = $_SERVER["PHP_SELF"]."?pagina=".$i;
    echo " | <a href=\"$url\">$i</a>";
}

if($pagina < $paginas) {
    $mais = $pagina + 1;
    $url = $_SERVER["PHP_SELF"]."?pagina=".$mais;
   echo " | <a href=\"$url\">Próxima</a>";
}

Link para o comentário
Compartilhar em outros sites

  • 0

Tava tentando usa seu script mas num consegui :rolleyes: , ai agora com esse script que você passou deu certo, mas será que agora da certo montar uma droplist com os numeros das paginas ? Bom vou adaptar melhor aki porque saiu tudo zuado ai vo tenta monta a droplist com os numeros das paginas.

Link para o comentário
Compartilhar em outros sites

  • 0
Não são permitidos UP's. Consulte as regras do fórum no ítem 3.8

Mas o que você quer exatamente ?

Desculpe não foi minha intenção dar UP no tópico.

Vocês viram que na foto conforme o numero de páginas existe os números como links para as mesmas, o que eu quero é jogar todos os números gerado em uma droplist (lista suspensa) para não poluir a página e ao selecionar o número na droplist e clicar no botão você será direcionado a página referente ao número.

A droplist eu consigo fazer o que não funciona é quando clica no botão você seja direcionado pra página referente a selecionada.

Link para o comentário
Compartilhar em outros sites

  • 0

Você consegue pegar o número selecionado na droplist com JavaScript ? Se conseguir, basta colocar isso...

<script language="JavaScript">
function redirecionar()
{
   window.location.replace("nomedapagina.php?pagina"+selecaodroplist);
}
</script>
...
<input type="button" value="Ir para a página" onclick="redirecionar();">

Sendo que selecaodroplist é a variável que vai pegar o valor escolhido na droplist.

Link para o comentário
Compartilhar em outros sites

  • 0
Você consegue pegar o número selecionado na droplist com JavaScript ? Se conseguir, basta colocar isso...

&lt;script language="JavaScript">
function redirecionar()
{
   window.location.replace("nomedapagina.php?pagina"+selecaodroplist);
}
</script>
...
<input type="button" value="Ir para a página" onclick="redirecionar();">

Sendo que selecaodroplist é a variável que vai pegar o valor escolhido na droplist.

Então acho que só não funciona porque eu não consigo pega o valor selecionado na droplist.

Conhece alguma maneira de fazer?

Algum exemplo pra seguir?

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,3k
    • Posts
      652,4k
×
×
  • Criar Novo...