Ir para conteúdo

POWERED BY:

Arquivado

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

rogerss_7

[Resolvido] Autenticação de dados etc.

Recommended Posts

Gostaria de pedir umas dicas sobre um sistema, por exemplo, de locadora:

 

1º - A pessoa entra no site, e, obrigatoriamente, escolhe uma das cidades cadastradas em uma tabela do bd;

 

2º - Escolhida a sua cidade, grava este dado (qual é o melhor método para se fazer isso? Array, Session, Cookie?) e passa para a próxima página, se o cara for espertinho e entrar nessa página primeiro, volta para a página de escolha das cidades.

 

3º - Esta cidade escolhida vai ser fundamental em todo o site, ou seja, os filmes, gêneros etc serão listados a partir desta escolha inicial, por isso essa obrigatoriedade na escolha da cidade, entende?

 

Gente qual é o método mais correto, seguro e eficaz, para que não tranque o site ao clicar em um link lá nas tantas onde o cara estiver, ou fique mostrando ‘notices’ se ainda não existirem dados (filmes, gêneros) cadastrados por alguma locadora de alguma cidade?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá, beleza?!?!?!?!.

 

2º - coloque a cidade num combo e submeta o form (no evento onchange, por exemplo). pegue o request (post ou get) na próxima página.

 

3º - entendo.

 

4º - o que você imaginou que poderia travar o site???? aqui no trabalho, os "notices" do servidor web em produção não são exibidos, somente o servidor de desenvolvimento mostra os notices, warnings, etc.... então para o usuário é transparente isso, mas minha opinião é que cada notice deve ser tratado, assim fica menos POG (programação orientada à gambiarra, rsrs).

caso as consultas no banco retornem vazio (se ainda não tiverem filmes cadastrados), trate este retorno e mostre um template "amigável" pro usuário.

 

espero ter ajudado em algo.

 

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado thryllander por ter respondido o tópico, ainda mais com seriedade.

 

Na verdade o que tu falaste eu já havia feito pra testar, ou seja, criei uma index onde tenho este mero script abaixo.

 

index.php

<?php
include 'db.php';
$query_regiao = mysql_query ('select nome from tb_regiao');
print "
<form action=\"home.php\" method=\"POST\">
<select name='regiao_usuario'>";

while ($res = mysql_fetch_array($query_regiao)) {
print "
<option value='$res[nome]'>$res[nome]</option>";
}

print "
</select>
<input type='submit' value='ir' />
</form>";
?>

Isto submete para a home.php.

A home.php é a minha página principal, ela funcionará através de inclusões por querystring, bom isso tu sabe como é, não preciso te explicar.

 

Minha dúvida é, depois de enviada a cidade pra home.php, o script que pegará a cidade será mais ou menos assim:

<?php
if (!isset($_POST['regiao_usuario'])) {
	header('location: index.php');
} else {
	$regiao_usuario = $_POST['regiao_usuario'];
}
include 'db.php'; // forma global pra não precisar ficar chamando a conexão // essa linha está correta?
?>
Correto?

 

Olha o seguinte, comentei que está página, home.php, irá incluir tudo, correto? Ela tem um sistema de query mais ou menos assim: ?q=minhapagina, ?q=issoeaquilo etc.

 

Quando eu colocar um link com algumas destas chamadas (?q=blablabla), por lógica, ela deverá ir pra index.php.

 

Como devo proceder corretamente?Uma coisa que não posso desfazer é o sistema por query.

 

Obrigado desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá rogerss_7,

Bom, o metodo mais aconselhavel é sessions ou cookies, ai depende de qual você sabe manipular melhor.

Eu indicaria sessions.

 

no sue arquivo que recebe a form, você setaria uma session com o valor da cidade:

 

<?php
session_start(); // Inicia as Sessions

include 'db.php'; // É mais indicado ser logo a primeira linha do codigo!

if (!isset($_POST['regiao_usuario'])) {
	header('location: index.php');
} else {
	$regiao_usuario = $_POST['regiao_usuario'];
	$_SESSION['cidade'] = $regiao_usuario; // cria a sessao com o valor da cidade
} ?>

todo arquivo q você for usar as sessions.. é necessario ter o session_start();

 

como você vai usar o sistema de query, coloque isso apenas uma vez, na pagina de index pois as outras usarao ela... e tbm utilize apenas uma vez o arquivo de db, tbm colocando-o na index.

 

a utilização das sessions é igual a de uma variavel ou array, não tem erro.

qualquer duvida sobre elas.. acesse.. http://www.php.net

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok Detros, está me ajudando bastante, vou fazer alguns testes pra ver se está de acordo com o que preciso e retorno.

 

Uma pergunta, assim como você falou: "...coloque a session_start uma vez.....", ok eu sempre faço isso mesmo.

 

Também tenho nesta página uma include 'db.php'; que inclui a conexão com o banco, onde todas as páginas vão ter que usá-la, me diz uma coisa, posso colocar só uma vez, na index, ou terei de colocar em todas as páginas que serão incluídas individualmente?

 

Eu imagino que em todas, até porque haverá mysql_close() nas ocasiões.

 

Estou certo?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom....

o certo é colocar apenas uma vez, na index, como é feito com o session_start(),

caso insira em todas... e ja tenha uma na index, entrará em conflito

 

mas fique conciente de que, esse arquivo deve apenas conter as conexoes com o servidor e com o banco de dados!

 

ja em relação ao mysql_close() , é apenas recomendado em conexoes persistentes com o mysql_pconnect();

 

usando o mysql_connect(), não é necessario utilizar o "close" já que no final do script todas as conexões são fechadas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou fazendo alguns testes com o que tu me passaste.

 

Tenho uma página (capa.php) que é incluída nesta página mestra.

Mostra 4 filmes pra cada categoria, em breve, mais locados e lançamentos.

 

$query_lancamentos = mysql_query("SELECT id, nome, capa, valor FROM tb_filmes WHERE usuario_regiao='$_SESSION[regiao_usuario]' AND lancamento=1 ORDER BY rand()");

$query_breve = mysql_query("SELECT id, nome, capa, valor FROM tb_filmes WHERE usuario_regiao='$_SESSION[regiao_usuario]' AND em_breve=1 ORDER BY rand()");

.................................

Pra cada categoria tenho que fazer deste modo acima? Pode notar que puxo os mesmos dados, do mesmo banco, a única coisa que muda é o AND.

 

Pra puxar os dados faço assim:

 

<img src='resize_img.php?img=<?php $capa_n = explode('../', mysql_result($query_lancamentos,0,'capa')); print $capa_n[1]; ?>&width=100&height=0' />

isso acima mostra a capa do filme "em lancamentos"

<?php print mysql_result($query_lancamentos,0,'nome'); ?>

isso acima mostra o nome do filme filme "em lancamentos"

.................................

e por aí se vai, até atingir 4 resultados pra cada categoria.

Pergunto, estou correto em fazer deste modo?

 

Como se percebe, o código seleciona os dados de acordo com a cidade passada, vamos que em alguma cidade ainda não existam 4 filmes cadastrados pra cada categoria, sei lá uns dois, por exemplo.

 

Isso vai mostrar um erro em cada mysql_result, como corrigir isto?

 

Obs.: Não estou fazendo isso com dados tabulares, ficaria mais simples assim mas estou em css puro.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

as conexões estão corretas!

 

Mas você ta pegando os dados de forma errada...

 

bom... re-olhei aqui... e vou te dar uma ideia...

como os resultados sao apenas para serem mostrados 4 ... faremos um limite nas conexoes, ficando assim:

 

query_lancamentos = mysql_query("SELECT id, nome, capa, valor FROM tb_filmes WHERE usuario_regiao='$_SESSION[regiao_usuario]' AND lancamento=1 ORDER BY rand() LIMIT 4");

$query_breve = mysql_query("SELECT id, nome, capa, valor FROM tb_filmes WHERE usuario_regiao='$_SESSION[regiao_usuario]' AND em_breve=1 ORDER BY rand() LIMIT 4");

 

e agora faremos a parte q pega os dados:

 

while($lancamento = mysql_fetch_array($query_lancamentos))
{
$capa_n = explode('../', $lancamento['capa']);
echo "<img src='resize_img.php?img={$capa_n[1]}&width=100&height=0' /> <br/>":
}

isso imprime os lancamentos

 

e

 

while($breve= mysql_fetch_array($query_breve))
{
$nome = $breve['nome'];
echo "{$nome}<br/>":
}

pronto.. apenas isso.. faz tudo ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, sim, já tentei com o mysql_fetch_array, mas não consegui ajustar neste layout, por isso aderi ao mysql_result.

 

<!-- inicia os lancamentos -->
				<div id='fundo_titulo_conteudo'>
					<div id='titulo_conteudo'><img src='gera_img.php?texto=LANÇAMENTOS&tamanhofonte=13' /></div>
				</div>
				<div id='div_mostra_todos_filmes'>
					<div id='mostra_filme_individual'>
						<div id='mostra_capa_filme'>
							<img src='resize_img.php?img=<?php $capa_n = explode('../', mysql_result($query_lancamentos,0,'capa')); print $capa_n[1]; ?>&width=100&height=0' />
						</div>
						<div id='mostra_dados_filme'>
							<b><?php print mysql_result($query_lancamentos,0,'nome'); ?></b><br/>
							<b>R$ <?php print mysql_result($query_lancamentos,0,'valor'); ?></b><br/>
							<img src='images/botao_alugar.gif' /> alugar<br/>
							<img src='images/botao_reservar.gif' /> reservar
						</div>
					</div>
					<div id='mostra_filme_individual'>
						<div id='mostra_capa_filme'>
							<img src='resize_img.php?img=<?php $capa_n = explode('../', mysql_result($query_lancamentos,1,'capa')); print $capa_n[1]; ?>&width=100&height=0' />
						</div>
						<div id='mostra_dados_filme'>
							<b><?php print mysql_result($query_lancamentos,1,'nome'); ?></b><br/>
							<b>R$ <?php print mysql_result($query_lancamentos,1,'valor'); ?></b><br/>
							<img src='images/botao_alugar.gif' /> alugar<br/>
							<img src='images/botao_reservar.gif' /> reservar
						</div>
					</div>
					<div id='mostra_filme_individual'>
						<div id='mostra_capa_filme'>
							<img src='resize_img.php?img=<?php $capa_n = explode('../', mysql_result($query_lancamentos,2,'capa')); print $capa_n[1]; ?>&width=100&height=0' />
						</div>
						<div id='mostra_dados_filme'>
							<b><?php print mysql_result($query_lancamentos,2,'nome'); ?></b><br/>
							<b>R$ <?php print mysql_result($query_lancamentos,2,'valor'); ?></b><br/>
							<img src='images/botao_alugar.gif' /> alugar<br/>
							<img src='images/botao_reservar.gif' /> reservar
						</div>
					</div>
					<div id='mostra_filme_individual'>
						<div id='mostra_capa_filme'>
							<img src='resize_img.php?img=<?php $capa_n = explode('../', mysql_result($query_lancamentos,3,'capa')); print $capa_n[1]; ?>&width=100&height=0' />
						</div>
						<div id='mostra_dados_filme'>
							<b><?php print mysql_result($query_lancamentos,3,'nome'); ?></b><br/>
							<b>R$ <?php print mysql_result($query_lancamentos,3,'valor'); ?></b><br/>
							<img src='images/botao_alugar.gif' /> alugar<br/>
							<img src='images/botao_reservar.gif' /> reservar
						</div>
					</div>
				</div>
				<!-- finaliza os lancamentos -->

Tô meio perdido com essas funções e esta disposição, entende?

 

E quanto a tratamento dos erros?

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom cara... vou te dar apenas um exemplo de como fazer

 

<!-- inicia os lancamentos -->

<div id='fundo_titulo_conteudo'>

<div id='titulo_conteudo'><img src='gera_img.php?texto=LANÇAMENTOS&tamanhofonte=13' /></div>

</div>

<div id='div_mostra_todos_filmes'>

<div id='mostra_filme_individual'>

<div id='mostra_capa_filme'>

 

<?php

$query_lancamentos = mysql_query("SELECT id, nome, capa, valor FROM tb_filmes WHERE usuario_regiao='$_SESSION[regiao_usuario]' AND lancamento=1 ORDER BY rand() LIMIT 4");

 

while($lancamento = mysql_fetch_array($query_lancamentos))

{

$capa_n = explode('../', $lancamento['capa']);

echo "<img src='resize_img.php?img={$capa_n[1]}&width=100&height=0' /> <br/>":

}

?>

</div>

............

agora eh com você ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara isso eu vou analisar aqui e vou dar um jeito, nem esquenta.

 

Me dá umas dicas na manipulação dos erros do mysql_result.

 

Vou estar listando 4 dados, se por exemplo em alguma locadora só existirem 3, vai dar algum erro, como eu faço pra ver se algum mysql_result está com conteúdo, se tiver mostra normalmente, se não mostar vazio?

 

Aproveita um daqueles que coloquei lá em cima, pra facilitar.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara, usa o mysql_fetch_array com o while q eu fiz.. ai nao existe erro e so exibe enquanto existir... entende??

 

vou tentar explicar pra você ...

 

 

while($lancamento = mysql_fetch_array($query_lancamentos))

{

$capa_n = explode('../', $lancamento['capa']);

echo "<img src='resize_img.php?img={$capa_n[1]}&width=100&height=0' /> <br/>":

}

 

o while.. faz a execuçao enquanto existir resultado.. se n existir.. ele nao faz nada.. se existir vai fazendo ate atingir o limite q estabelecemos... e como limitamos para 4 .. ele fara isso 4 vezes... nao causando erro...

 

e dentro do while.. você pega os valores.. q estao na array $lancamento ... da um print_r ($lancamento ); para você saber quais sao.. caso nao saiba :S

 

fique ciente da logica do while.... ele repete comandos... entao imprimimos a imagem dentro dele... pq ele vai repetir e imprimir ele todas as vezes q for executado, como um loop ... ou seja.. coisas q devem aparecer so uma vez nao devem estar dentro dele.

 

se você insistir no mysql_result... tenta da um isset nele

tipo

isset(mysql_result(...))

nao tenho nem ideia se isso vai funcionar.. nunca tentei... mas nao custa tentar... ;)

 

 

mas eu aconselho 100% em usar o mysql_fetch_array

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela ajuda, conheço toda a lógica do while, fetch.... só não estou conseguindo encaixar no meu layout, mas pode deixar que vou dar um jeito, o melhor possível, isso tu pode ter certeza.

 

Obrigado por ser prestativo cara, o fórum tá precisando de gente assim.

 

Abração.

 

Pode fechar este tópico, já está muito extenso, vou fazendo as coisas por aqui, se surgir qualquer dúvida, lhe prendo o grito.

 

TÓPICO RESOLVIDO.

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.