Fóruns sobre PHP, JavaScript, HTML, MySQLi, jQuery, Banco de Dados, CSS


Moderador: web

 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 237
Localização: Florianópolis/SC
Contato:

adminstrando dados do bd com explode

07-11-2007 15:45

seguinte, para tornar uma consulta ao banco de dados mais rapido eu pretendo armazenas informações em uma célula da tabela, informações estas separadas por algum sinal, e com o explode caputrar estas informações e trabalhar com elas. mas estou com algumas duvidas sobre este "explode".

ex. tenho as minhas cores favoritas armazenadas em um banco de dados, na tabela "USUÁRIOS" no campo "CORES", os valores podem estar da seguinte maneira.

amarelo,azul,verde,roxo,preto,lilás,marrom,branco,vermelho,

como eu capturo estas informações e consigo trabalhar com elas?
ex. quero listar minhas cores favoritas da seguinte maneira.
CORES:
1. amarelo
2. azul
3. verde
se possível ainda uma paginação, pois podem ter 100 cores, e so quero mostrar dez por pagina.

ai um link no amarelo, para pesquisar na tabela outros usuarios que gostem desta mesma cor.

passei a gostar da cor cinza, entao para adicionar na tabela faço uma consulta tipo INSERT usuarios... CORES = 'cinza,+cores' (isto deve acrescentar 'cinza,' e repetir as informações ja exisitentes anteriormente correto?)

mas se por acaso deixar de gostar do azul? como exlcuir ele dessa lista.

valeu pela, força, to perdido qto a isto!
0
MIDZ.com.br
http://www.midz.com.br
Soluções Web
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17743
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

adminstrando dados do bd com explode

07-11-2007 16:04

Tem 2 casos ai, cada um teria uma solução diferente.

Para retornar os valores em uma única string, tipo: $cores, você faria:
$separa_cores = explode(",", $cores); for($i = 0; $i < count($separa_cores); $i++) { echo $separa_cores[$i]."<br>"; }

Agora, para elimintar um item do array, veja esse exemplo:
<?php $cores = "azul,amarelo,verde,rosa"; $elimina = "azul"; $separa_cores = explode(",", $cores); for($i = 0; $i < count($separa_cores)+1; $i++) { if($separa_cores[$i]=="$elimina") { unset($separa_cores[$i]); } if(!empty($separa_cores[$i])) { $novas_cores[] = $separa_cores[$i]; } } $novas_cores = join(",", $novas_cores); echo $novas_cores; ?>

0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 237
Localização: Florianópolis/SC
Contato:

adminstrando dados do bd com explode

07-11-2007 16:28

perfeito, listou as cores e eliminou a cor que eu queria.

mais uma coisa, para inserir mais uma cor na tabela, no comando sql como devo proceder?
INSERT ... cores = "cores+cinza,"
INSERT ... cores = "cinza,+cores"
tenho que inserir a virgula depois de cada cor né? para não dar erro na hora de usar o explode.

para inserir 'cinza' nas cores, ah, na hora de listar as cores, quero mostrar as cinco ultimas cores que vc adicionou. então o cinza deve ficar em primeiro?

outra, tenho um script de paginação +/- assim
$pag = $_GET['pag']; if (!$pag) $pag = 1; $inicio = (10*$pag)-10; $query = "SELECT * FROM tabela where campo='$valor' ORDER BY id DESC LIMIT $inicio, $registro_por_pagina";

ai eu mostro 10 registros por pagina, e qdo acesso esta pagina com paginacao.php?pag=2
então ele começa do registro 11, e assim por diante.

como fazer isto com os registros gerados pelos explode[] ?
0
MIDZ.com.br
http://www.midz.com.br
Soluções Web
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17743
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

adminstrando dados do bd com explode

07-11-2007 16:41

Quanto a inserção, de onde vem e onde são mostradas as cores?

Quanto a paginação, acho que deveria ter uma paginação só para as cores ou uma página exclusiva para edição.
Poderia também mostrar as cores em options de um select, ai, usaria essa base:
http://www.codigosnaweb.com/forum/viewtopic.php?t=1263
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 237
Localização: Florianópolis/SC
Contato:

adminstrando dados do bd com explode

07-11-2007 16:59

gostei do script que vc indicou, mas não seria o ideal pra mim neste caso, vou usar em outra ocasião.

olha com pensei em fazer a paginação, tem outro método mais rápido?
$inicio = $_GET['pag']*10; $final = $inicio + 10; $cores = ",azul,amarelo,verde,rosa,"; $separa_cores = explode(",", $cores); echo count($separa_cores)."<br>"; for($i = 0; $i < count($separa_cores); $i++) { if ($i>$inicio AND $i<$final){ echo $separa_cores[$i]."<br>"; } }

0
MIDZ.com.br
http://www.midz.com.br
Soluções Web
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 237
Localização: Florianópolis/SC
Contato:

adminstrando dados do bd com explode

07-11-2007 17:43

Consegui acertar uma paginação para os valores resultantes do 'explode'. Vou postar aqui caso seja interessante para alguem.

Esta tudo bem simples e comentado.
<?php $link_p_pag = 3; //qtos links vao constar no final, da paginação $pag = $_GET['pag']; //captura qual a pagina atual $reg_p_pag = 5; // qtos registros serão mostrados por página if (!$pag) //caso nao conste a pagina no url (?pag=x) $pag = 1; $inicio = ($reg_p_pag*$pag)-$reg_p_pag; //pra saber em qual registro começa $fim = $inicio+$reg_p_pag; //pra saber em qual valor termina $cores = "preto, branco, roxo, pink, blue, yellow, cinza, esverdeado, dourado, ouro, marrom, azul, amarelo, verde, rosa, black, white, ciano"; $separa_cores = explode(",", $cores); $registros = count($separa_cores); //pra saber qtos cores existem echo "<b>Cores: $registros</b><br>"; echo "<b>Cores por página: $reg_p_pag</b><br>"; echo "<b>Iniciando em: ".($inicio+1)."</b><br>"; //o +1 é pq o valor começa no zero, queremos começar do um $num_total_paginas = ($registros%$reg_p_pag==0)?$registros/$reg_p_pag:floor($registros/$reg_p_pag)+1; //pra montar os links ANTERIOR e PROXIMA for($i = 0; $i < $registros; $i++) { //cria o loop para cada cor if ($i>=$inicio AND $i<$fim){ //so imprime qdo a cor estiver dentro a condicional de INICIO e FIM echo "<br>".($i+1).". $separa_cores[$i]"; } } ?> <hr> <?php if ($num_total_paginas<2){}else{ $anterior = $pag-1; if ($anterior<1) echo "Anterior - "; else echo "<a href='?pag=$anterior'>Anterior</a> - "; for($i=1; $i<$pag; $i++) if($i>=$pag-$link_p_pag) echo "<a href='?pag=$i'>$i</a> - "; echo " <b>$pag</b> - "; for($i=$pag+1; $i<=$num_total_paginas; $i++) if($i<=$pag+$link_p_pag) echo "<a href='?pag=$i'>$i</a> - "; $proxima = $pag+1; if ($proxima>$num_total_paginas) echo "Próxima"; else echo " - <a href='?pag=$proxima'>Próxima</a>"; } ?>

Porém para cada página ainda é preciso a consulta na tabela para capturar todas as cores, alguem sabe um modo de otimizar esta consulta na hora de caputurar as cores na tabela?

ah. se tiver "," no final ou no começo, conta como um item a mais, então teremos um problema. pois todo registro deve ser feito no formato "cor," mas e o primeiro registro?
0
MIDZ.com.br
http://www.midz.com.br
Soluções Web
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17743
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

adminstrando dados do bd com explode

07-11-2007 18:23

Vê se a paginação que montei ajuda.

<a href="?pag=0">inicio</a> <br><br> <?php // pega página atual $inicio = $_GET['pag']; // quantos resultados por página $quantos = 2; // página anterior e próxima $anterior = $inicio-2; $proximo = $inicio+2; // itens a serem paginados $cores = "cor1, cor2, cor3, cor4, cor5, cor6, cor7,"; // daqui para baixo manter como está $tamanho_string = strlen($cores); $cores = substr($cores, 0, $tamanho_string-1); $separa_cores = explode(",", $cores); $tamanho = count($separa_cores); $resultado = $tamanho/$quantos; if($inicio=="" || $inicio=="0") { echo $separa_cores[0]."<br>"; echo $separa_cores[1]."<br>"; } else { $soma = 0; for($i = $inicio; $i < $inicio+2; $i++) { echo $separa_cores[$i]."<br>"; $soma++; } } ?> <br> <?php if($proximo < $resultado*2) { echo '<a href="?pag='.$proximo.'">próximo</a><br>'; } if($inicio > 0 && $tamanho>0) { echo '<a href="?pag='.$anterior.'">anterior</a><br>'; } ?>

0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 237
Localização: Florianópolis/SC
Contato:

adminstrando dados do bd com explode

07-11-2007 18:47

$tamanho_string = strlen($cores);
$cores = substr($cores, 0, $tamanho_string-1);

ah, legal, resolveu o problema da "," agora posso inserir todos os registros no formato "cor," pq ele vai tirar a ultima virgula na hora de listar as informações, legal.

não tava entendendo sua paginação,

$soma = 0;
for($i = $inicio; $i < $inicio+2; $i++) {
echo $separa_cores[$i]."<br>";
$soma++;
}

pra que serve o $soma ?
ai entendei que o $inicio sempre soma mais dois, então a paginação segue este padrão pag=0 - pag=2 - pag=4 ai entendi com funciona, se fosse listar cinco por paginas, pag=0 - pag=5 - pag=10.

legal, mas ainda nao entendi o $soma
0
MIDZ.com.br
http://www.midz.com.br
Soluções Web
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17743
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

adminstrando dados do bd com explode

07-11-2007 19:01

Viajei :o

O $soma era uma idéia que estava tentando, ai achei outra e esqueci de tirar.

Pode descartar. :)
0
A melhor hospedagem para o seu site HostGator!

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado