Good 4 Denunciar post Postado Dezembro 14, 2009 Ficou meio idiota esse final "... com fotos...".. mas vamos ao que interessa.. $anterior = $_GET['fotoid'] - 1; $proxima = $_GET['fotoid'] + 1; if($_GET['fotoid'] == $primeira['id']){ echo "<img src=\"img/Fotos/voltar.png\"> "; } else { echo "<a href=\"fotos.php?fotoid=$anterior&pg=$_GET[pg]\"><img src=\"img/Fotos/voltar.png\"></a> "; } if($_GET['fotoid'] == $ultima['id']){ echo " <img src=\"img/Fotos/avancar.png\">"; } else{ echo " <a href=\"fotos.php?fotoid=$proxima&pg=$_GET[pg]\"><img src=\"img/Fotos/avancar.png\"></a>"; } Como eu poderia fazer um sistema de paginação assim? As strings $anterior e $proxima, são somente uma besteira.. eu fiz 2 querys, uma pra pegar o último valor e o primeiro.. só que não é assim.. pq o sistema de envio de fotos é entre vários usuários.. Eu estava pensando assim.. montar uma array com as IDs das fotos que o usuário publicou, e fazer com que pegue a ID da foto que ele está visualizando no momento, e depois pegar os valores antes dessa e depois da ID.. Simplicando.. As IDs das minhas fotos são 2,4,5,7,9,11,13,15.. (OBS.: É UM EXEMPLO, eu não saberei quais são as minhas ID, será automaticamente..) Aí, na página que eu fiz está sendo assim..: Eu estou visualizando a MINHA foto de ID igual a 13. Aí pelo jeito que eu fiz, eu pegava esse número 13 e somava e diminuia por 1. Aí me retornavam as IDs 12 e 14, as quais não pertenciam a mim, e sim a outro usuário. Aí eu queria fazer com que eu pegasse apenas as minhas IDs, e fizesse a paginação normal, utilizando o +1 e -1! Acho que expliquei bem.. e minha tabela é essa..: CREATE TABLE `fotos` ( `id` int(255) NOT NULL auto_increment, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1; Obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
EuricoVidal 0 Denunciar post Postado Dezembro 14, 2009 e ae beleza? dexa eu ve se entendi, você tem uma tabela "fotos" com os IDs das fotos, e uma outra tabela (ex: usuarios_fotos) com o ID do usuario (que adicionou as fotos) e o ID de cada fotos q eu adicionou, certo? pq ai é só você da um join nas duas tabelas, ai não vai ter o perigo de pegar foto de outro usuario. se você tem uma outra tabela que informa isso, passa a estrutura dela para ver o que fica mais facil de você fazer. Compartilhar este post Link para o post Compartilhar em outros sites
Good 4 Denunciar post Postado Dezembro 14, 2009 Mais ou menos isso.. a tabela fotos contém ID da foto e ID do usuário que a enviou! a tabela usuarios contém o usuário, senha, etc.. que não tem nada a ver com a tabela fotos.. Aí, vou dar outro exemplo: Eu fiz o upload de 5 fotos, enquanto no mesmo momento tinha outro usuário fazendo upload de 3 fotos.. O qual as minhas IDs das fotos foram: 1,2,5,6 e 8 E as ids das fotos do outro usuário foram essas: 3,4 e 7 Aí, na página de fotos... eu fiz assim: Peguei a primeira e última ID.. aí nos botões avançar e voltar, eu fiz assim: Avançar +1 Voltar -1 Aí, eu estou visualizando a foto de ID igual a 6. (Que seria a minha ID) Aí eu quero avançar pra próxima foto, que seria a de ID 8. Só que aí está o problema! Eu quero fazer com que quando clicasse na próxima foto, não pegasse a ID da foto do outro usuário e sim das minhas fotos, que seria a ID 8 e não 7. Acho que expliquei melhor dessa vez.. vlw e obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Dezembro 14, 2009 Na verdade você vai trabalhar com o limit do Mysql. Por exemplo, você faz uma consulta para retornar quantas fotos o cara tem cadastrado, mais ou menos assim: SELECT COUNT(FOTOS) as totalFotos FROM fotos WHERE idUsuario = 1 Digamos que nesta consulta apareceu 5. Então, você efetua outra consulta, mais ou menos assim: SELECT * FROM fotos WHERE idUsuario = 1 LIMIT 1,1 Estamos dizendo para pegar 1 registro (segundo 1) e iniciar no registro 1 (primeiro 1). Então, tudo que você precisa fazer é passar, no link da próxima, a ordem da foto que está sendo exibida. A lógica é mais ou menos esta. Tente criar o PHP e, se tiver dificuldade no SQL, podemos mover para o fórum de Mysql que eles te ajudam melhor a criar a query. Mas a lógica é mais ou menos esta. http://dev.mysql.com/doc/refman/4.1/pt/select.html Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
Good 4 Denunciar post Postado Dezembro 14, 2009 Olha.. não é bem assim.. acho que não é paginação... é pra ser assim.. Fazer um jeito de agrupar todas as IDs que seriam minhas. seria tipo uma array. Aí, eu estaria visualizando a foto de ID igual a 7, aí eu queria retornar a próxima e anterior ID que seriam minhas, e não de outro usuário. É pq eu estou usando assim: $anterior = $_GET['fotoid'] - 1; $proxima = $_GET['fotoid'] + 1; Aí, é claro que nesse jeito iria retornar algumas IDs que não seriam minhas. Outro exemplo: Minhas IDs: 5,6,7,9,10,11 Eu estou na ID 7, e quero avançar pra minha próxima foto: 9 e não para a ID 8, é isso que está ocorrendo. Obrigado novamente! Query de exemplo: $fotos = mysql_query("SELECT * FROM fotos WHERE usuarioid = '".$usuario_row['id']."'") or die(mysql_error()); Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Dezembro 14, 2009 Esta seria outra forma de fazer, mas eu acho mais complicado. Você teria que fazer a consulta no banco de dados e gravar o id das fotos em um array na session, onde o índice deste array seria o número da foto (não o ID, o número da sequencia). Aí, quando clicar na próxima, você passa o valor do array + 1. Tipo assim: $_SESSION['fotos'] = array(); $fotos = mysql_query("SELECT * FROM fotos WHERE usuarioid = '".$usuario_row['id']."'") or die(mysql_error()); while($row = mysql_fetch_assoc($fotos)) { $_SESSION['fotos'][] = $row['foto']; } $anterior = $_SESSION['fotos'][$_GET['fotoId'] - 1]; $proximo = $_SESSION['fotos'][$_GET['fotoId'] + 1]; Mais ou menos assim... Mas eu acho mais complicado. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
Good 4 Denunciar post Postado Dezembro 14, 2009 É mais ou menos isso.. só que não tem jeito de fazer sem utilizar sessão? tá saindo assim: fotos.php?fotoid=-1 e dei um session_start; Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Dezembro 15, 2009 só que não tem jeito de fazer sem utilizar sessão? Tem. Do jeito que eu falei antes, utilizando paginação. tá saindo assim: fotos.php?fotoid=-1 Aí tem que ir adaptando. Tipo, na primeira imagem, você pode colocar o link no botão anterior para a última, e não para a anterior. Aí tem que ir adaptando. Mas eu ainda acho que o método da paginação é melhor. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
Good 4 Denunciar post Postado Dezembro 15, 2009 Mas nesse método de paginação, tem como pegar apenas as IDs que sejam do usuário? E não pegar as IDs dos outros usuários.. eu não entendi bem como funciona, usando a paginação.. Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Dezembro 15, 2009 Tem... Olha... SELECT * FROM fotos WHERE idUsuario = 1 LIMIT 1,1 Veja que estou pegando só as fotos onde o idUsuario for igual a 1. No seu caso, é só colocar o id do usuário ali. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
Good 4 Denunciar post Postado Dezembro 15, 2009 como faço o código de avançar e voltar? onde tenho que colocar o -1 e +1? E teria como colocar a forma que você colocou usando SESSION, sem usar SESSION? Pode até ajudar outros.. vlw Compartilhar este post Link para o post Compartilhar em outros sites
Good 4 Denunciar post Postado Dezembro 15, 2009 Tentei assim, só que não deu! $pag_views = 1; $pagina = (int)$_GET['fotoid']; if (!$pagina) { $pagina = 1; } else { $pagina = $pagina; } $mat = $pagina -1; $inicio = $mat * $pag_views; $dados = mysql_query("SELECT * FROM fotos WHERE usuarioid = '".$usuario_row['id']."'") or die(mysql_error()); $paginacao = mysql_query("SELECT * FROM fotos WHERE usuarioid = '".$usuario_row['id']."' LIMIT $inicio,$pag_views") or die(mysql_error()); $linhas = mysql_num_rows($dados); $paginas = $linhas / $pag_views; $volta = $pagina -1; $proxima = $pagina +1; if($volta > 0) { echo "<a href=\"fotos.php?fotoid=$volta\">Volta</a>"; } if($pagina < $paginas){ echo "<a href=\"fotos.php?fotoid=$proxima\">Próxima</a>";} Não exibia o link próxima, e quando cheguei no primeiro resultado, ela ainda voltou um resultado que não era do usuário.. flw Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Dezembro 16, 2009 A lógica está correta. Só que tem algumas coisas: // aqui você define $pagina como a $_GET['fotoid'] $pagina = (int)$_GET['fotoid']; // isto sempre vai ser ser falso, porque você acabou de definir o valor de $pagina ali em cima. if (!$pagina) { $pagina = 1; } else { // qual o sentido desta parte? $pagina = $pagina; } Troque tudo isto por $pagina = isset($_GET['fotoid']) ? (int)$_GET['fotoid'] : 1 ; Sobre o restante, é só fazer um debug das variáveis, colocando para imprimir na tela antes de executar cada comando e localizar, porque a idéia está correta. Deve ser alguma variável errada. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
Good 4 Denunciar post Postado Dezembro 16, 2009 Não deu.. ainda ficou do jeito que eu não queria.. mostrou uma ID a qual não seria minha.. e quando cheguei na minha primeira ID, o botão voltar ainda aparecia, aí eu cliquei e mostrou este erro: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-1,1' at line 1 E não aparece o botão de avançar.. E acredito ainda que aquela maneira que você postou seria mais fácil..: $_SESSION['fotos'] = array(); $fotos = mysql_query("SELECT * FROM fotos WHERE usuarioid = '".$usuario_row['id']."'") or die(mysql_error()); while($row = mysql_fetch_assoc($fotos)) { $_SESSION['fotos'][] = $row['foto']; } $anterior = $_SESSION['fotos'][$_GET['fotoId'] - 1]; $proximo = $_SESSION['fotos'][$_GET['fotoId'] + 1]; só que eu não queria usar session.. num tem jeito de postar ae não, sem utilizar session? Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Dezembro 16, 2009 Não tem como passar os valores entre todas as páginas sem usar SESSION ou COOKIE. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
Good 4 Denunciar post Postado Dezembro 16, 2009 Hm.. então como eu poderia fazer do outro jeito? Pq lá está dando erro, e ainda me retornou uma ID que não era minha.. Compartilhar este post Link para o post Compartilhar em outros sites
Good 4 Denunciar post Postado Dezembro 16, 2009 Eu dei uma pesquisada sobre paginação em array, e achei isto: $fotosss = mysql_query("SELECT * FROM fotos WHERE usuarioid = '".$id_usuario."'") or die(mysql_error()); $NossoArray = array(); while($rows = mysql_fetch_array($fotosss)) { $NossoArray[] = $rows['id']; $fotoid[] = $rows['id']; } $RegistrosPorPagina = 1; //Total de registros por pagina... if (!isset($_GET["PaginaAtual"])) { $PaginaAtual = 1; } else { $PaginaAtual = $_GET["PaginaAtual"]; } //Se a variável Pagina não existir, página será = 1, se existir, página sera igual a variavel $TotalDeRegistros = (count($NossoArray)); //Total de registros contidos no array $TotalDePaginas = ceil($TotalDeRegistros/$RegistrosPorPagina); //O total de páginas será o Total de registros dividido pelo nº de registros por pagina arredondado para CIMA... $PrimeiroRegistro = (($PaginaAtual * $RegistrosPorPagina) - $RegistrosPorPagina); /* A variável $PrimeiroRegistro é a variavel que indicará o 1º registro a ser exibido... Lembrando que o "-1" é porque como é um array, os elementos começam com índice "0" e não com índice "1"! */ function CriarLinks ($TotalDePaginas) { $link = ''; //Inicia a variavel for ($i = 1; $i <= $TotalDePaginas; $i++) { //Faz um for até o números de paginas $link .= ' <a href="PaginacaoDeArrays.php?PaginaAtual='.$i.'">'.$i.'</a> |'; //Adiciona a pagina na string } return $link; //Tem como retorno a string com os links já criados } for ($i = $PrimeiroRegistro; $i < ($RegistrosPorPagina + $PrimeiroRegistro); $i++) { //Cria o for para a exibicao dos registros if(isset($NossoArray[$i])) { // se o array com índice $i existe, ele o mostrará! $foto = mysql_query("SELECT * FROM fotos WHERE id = '".$fotoid[$i]."'") or die(mysql_error()); $ros = mysql_fetch_assoc($foto); echo "<img src=\"upload/$ros[foto_pequena]\"><BR>"; echo $NossoArray[$i].'<br>'; //"Dá" um echo no registro atual } } echo CriarLinks($TotalDePaginas); $pg = $_GET['PaginaAtual']; if($_GET['PaginaAtual'] == 2){ $previous = 1; } else { $previous = $pg - 1; } // if(mysql_num_rows($fotosss) < 8){ $next = $pg + 1; // } else { // $next = $pg + 1; // } if($_GET['PaginaAtual'] == 1 || $_GET['PaginaAtual'] == "" || $_GET['PaginaAtual'] == 0){ echo "<img src=\"img/Fotos/left.png\"> "; } else { echo "<a href=\"PaginacaoDeArrays.php?PaginaAtual=$previous\"><img src=\"img/Fotos/left.png\"></a> "; } $ulti = mysql_query("SELECT * FROM fotos WHERE usuarioid = '".$id_usuario."' ORDER BY id DESC LIMIT 1") or die(mysql_error()); $last = mysql_fetch_assoc($ulti); if(mysql_num_rows($fotosss) < 8 || $fotid == $last['id']){ echo " <img src=\"img/Fotos/right.png\">"; } else { echo " <a href=\"PaginacaoDeArrays.php?PaginaAtual=$next\"><img src=\"img/Fotos/right.png\"></a>"; } eu adaptei, e deu tdo certo.. agora eu queria fazer com que mostrasse os links avançar e voltar.. o voltar está beleza, mas como eu faço o avançar? Só tá faltando o terminar o avançar pra terminar.. vlw OBS.: Foi sem utilizar $_SESSION.. :P Compartilhar este post Link para o post Compartilhar em outros sites
Good 4 Denunciar post Postado Dezembro 16, 2009 É só substituir este código: $pg = $_GET['PaginaAtual']; $anterior = $pg - 1; if ($anterior < 1){ echo "<img src=\"img/Fotos/left.png\"> "; } else { echo "<a href=\"PaginacaoDeArrays.php?PaginaAtual=$anterior\"><img src=\"img/Fotos/left.png\"></a>"; } $proxima = $pg + 1; if ($proxima > mysql_num_rows($fotosss)){ echo " <img src=\"img/Fotos/right.png\">"; } else { echo "<a href=\"PaginacaoDeArrays.php?PaginaAtual=$proxima\"><img src=\"img/Fotos/right.png\"></a>"; } Por esse: $pg = $_GET['PaginaAtual']; if($_GET['PaginaAtual'] == 2){ $previous = 1; } else { $previous = $pg - 1; } // if(mysql_num_rows($fotosss) < 8){ $next = $pg + 1; // } else { // $next = $pg + 1; // } if($_GET['PaginaAtual'] == 1 || $_GET['PaginaAtual'] == "" || $_GET['PaginaAtual'] == 0){ echo "<img src=\"img/Fotos/left.png\"> "; } else { echo "<a href=\"PaginacaoDeArrays.php?PaginaAtual=$previous\"><img src=\"img/Fotos/left.png\"></a> "; } $ulti = mysql_query("SELECT * FROM fotos WHERE usuarioid = '".$id_usuario."' ORDER BY id DESC LIMIT 1") or die(mysql_error()); $last = mysql_fetch_assoc($ulti); if(mysql_num_rows($fotosss) < 8 || $fotid == $last['id']){ echo " <img src=\"img/Fotos/right.png\">"; } else { echo " <a href=\"PaginacaoDeArrays.php?PaginaAtual=$next\"><img src=\"img/Fotos/right.png\"></a>"; } Está aí uma paginação sem cookies, sem session, apenas com PHP e mysql. E obrigado ae velho! Se você não tivesse dito como se faria ainda não teria conseguido.. ¬¬ Compartilhar este post Link para o post Compartilhar em outros sites
Good 4 Denunciar post Postado Dezembro 16, 2009 Bom, o que eu queria neste código que eu peguei e dei umas boas de melhorada não é o que eu quero... Tá funcionando beleza.. só que é assim: São 2 paginações..: 1- A primeira é para mostrar todas as fotos com o botão avançar e voltar.. 2- A segunda é apenas para mostrar uma foto de cada vez com o botão de avançar e voltar (igual ao do orkut antigamente..) Só que eu queria assim: Quando o usuário clicasse na segunda paginação no botão "Avançar", ele avançasse pela ID da foto e não por página.. Acho que é simples, como e onde eu colocaria pra avançar a próxima ID? Pq ela está em array, eu tentei usar o next e prev.. só que não retornou nada.. $fotos = mysql_query("SELECT * FROM fotos WHERE usuarioid = '".$id_usuario."'") or die(mysql_error()); $NossoArray = array(); while($rows = mysql_fetch_array($fotos)) { $NossoArray[] = $rows['id']; $fotoid[] = $rows['id']; } $RegistrosPorPagina = 1; if (!isset($_GET["PaginaAtual"])) { $PaginaAtual = 1; } else { $PaginaAtual = $_GET["PaginaAtual"]; } $TotalDeRegistros = (count($NossoArray)); $TotalDePaginas = ceil($TotalDeRegistros/$RegistrosPorPagina); $PrimeiroRegistro = (($PaginaAtual * $RegistrosPorPagina) - $RegistrosPorPagina); for ($i = $PrimeiroRegistro; $i < ($RegistrosPorPagina + $PrimeiroRegistro); $i++) { if(isset($NossoArray[$i])) { $foto = mysql_query("SELECT * FROM fotos WHERE id = '".$fotoid[$i]."'") or die(mysql_error()); $ros = mysql_fetch_assoc($foto); echo "<img src=\"upload/$ros[foto_pequena]\"><BR>"; $fotid = $NossoArray[$i]; } } $pg = $_GET['PaginaAtual']; $anterior = $pg - 1; if ($anterior < 1){ echo "<img src=\"img/Fotos/left.png\"> "; } else { echo "<a href=\"fotos.php?usuarioid=1&fotoid=$_GET['fotoid']&PaginaAtual=$anterior\"><img src=\"img/Fotos/voltar.png\"></a>"; } $proxima = $pg + 1; if ($proxima > mysql_num_rows($fotosss)){ echo " <img src=\"img/Fotos/right.png\">"; } else { echo "<a href=\"fotos.php?usuarioid=1&fotoid=$_GET['fotoid']&PaginaAtual=$proxima\"><img src=\"img/Fotos/avancar.png\"></a>"; } A paginação é assim: fotos.php?usuarioid=1&fotoid=$_GET['fotoid']&PaginaAtual=$proxima Aí eu queria que fosse assim: fotos.php?usuarioid=1&fotoid=$proxima Eu queria que avançasse a foto e não a página... Só que como esta paginação está ordenada assim: 1,2,3,4,5,etc não tem como, pois sempre iria retornar em todas as páginas dos usuários as mesmas IDs.. então tem como retornar o valor da ID da foto, no lugar dos números em sequência? Obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Dezembro 17, 2009 Cara, é a mesma dúvida do outro tópico. Vou unir os dois em um só. Tópicos Unidos Compartilhar este post Link para o post Compartilhar em outros sites