Ir para conteúdo

POWERED BY:

Arquivado

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

Good

[Resolvido] Paginação Avançar, Voltar com fotos..

Recommended Posts

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

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

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

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

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

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

É 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

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

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

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

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

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

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

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

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

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

É 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

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

×

Informação importante

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