Jump to content
diabolickman

Select onchange c/ PHP

Recommended Posts

diabolickman

Boas.

Tenho 2 select's que são preenchidos através de uma tabela da base de dados:

<select name="ano_inicio" style="width:154px">
                    		<option>Indiferente</option>
						<?php $db=mysql_connect("localhost","root","");
							if (!$db){
								die('Não foi possível conectar á Base de Dados');
							}								
							mysql_select_db("stand");
							$query= "SELECT `ano` FROM `ano` where 1";
							$result=mysql_query($query,$db) or die ("Bad Operation"); 
							while($row = mysql_fetch_row($result)){
									echo '<OPTION VALUE="'.$row[0].'">'.$row[0].'</OPTION>';
							}
							mysql_close($db);
						?>
					</select> at&eacute:
                        <select name="ano_fim" style="width:154px">
                    		<option>Indiferente</option>
						<?php $db=mysql_connect("localhost","root","");
							if (!$db){
								die('Não foi possível conectar á Base de Dados');
							}
							mysql_select_db("stand");
							$query= "SELECT `ano` FROM `ano` where 1";
							$result=mysql_query($query,$db) or die ("Bad Operation"); 								//Codigo por Nuno Ribeiro
							while($row = mysql_fetch_row($result)){
									echo '<OPTION VALUE="'.$row[0].'">'.$row[0].'</OPTION>';
							}
							mysql_close($db);
						?>
					</select>

Ambos os select vão buscar valores entre 1940 e 2011, referentes a anos. Queria preencher o 2º select (ano_fim) apenas com valores superiores ao escolhido no 1º (ano_inicio).

Caso o utilizador escolha 2001 no primeiro select, no 2º apenas seriam mostrados anos entre o 2001 e o 2011.

Já tive a tentar com o onchange a enviar para uma função javascript, mas não estava a resultar.

Alguém sabe alguma forma eficaz de fazer isto?

Cumps

Share this post


Link to post
Share on other sites
brunoais

Estás com azar, então. Não tens outra hipotese senão usar AJAX ou teres os option ordenados de modo que o javascript saiba quais fazer aparecer e quais deve fazer desaparecer. Consegues confirmar algum destes métodos? (eu gosto + do 2º)


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
brunoais

O problema é saber fazer isso na prática LOL

Eu só te ajudo a fazer um dos dois métodos q te indiquei. Se queres a minha ajuda, preciso de saber qual dos métodos preferes usar.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
diabolickman

Hmmm, qual é o que dá menos trabalho e é mais simples? É que não conheço nem um nem outro  :down:

Share this post


Link to post
Share on other sites
brunoais

Não sei... Um requer um query ao servidor (AJAX), o outro, faz tudo na própria página através de testes e ciclos. De qq modo, se alterares um pouco o output do php, podes tornar este 2º método mais fácil de se fazer.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
diabolickman

Hmmm, escolhe :) .. Porque eu não faço mesmo ideia de qual o mais fácil :) ...Obrigado pela paciencia :)

Se fosses tu qual usavas? Pronto, quero esse  ;)

Share this post


Link to post
Share on other sites
brunoais

Para começar, por cada execução, salvo situações raras, só pode existir 1 único *_connect() como o mysql_connect().

Esta função é mesmo muito lenta para executar e só deve ser usada quando necessário (como agora) e só, no max, 1 vez.

A não ser que tenhas uma boa razão para fazer isto usar o *_close() como o mysql_close() é inútil teres sequer isso no código.

Por isso o q escreveste está mal e devia de ser, no mínimo:

<select name="ano_inicio" style="width:154px">
                    		<option>Indiferente</option>
						<?php $db=mysql_connect("localhost","root","");
							if (!$db){
								die('Não foi possível conectar á Base de Dados');
							}								
							mysql_select_db("stand");
							$query= "SELECT `ano` FROM `ano` where 1";
							$result=mysql_query($query,$db) or die ("Bad Operation"); 
							while($row = mysql_fetch_row($result)){
									echo '<OPTION VALUE="'.$row[0].'">'.$row[0].'</OPTION>';
							}
						?>
					</select> at&eacute:
                        <select name="ano_fim" style="width:154px">
                    		<option>Indiferente</option>
						<?php 
							$query= "SELECT `ano` FROM `ano` where 1";
							$result=mysql_query($query,$db) or die ("Bad Operation"); 								//Codigo por Nuno Ribeiro
							while($row = mysql_fetch_row($result)){
									echo '<OPTION VALUE="'.$row[0].'">'.$row[0].'</OPTION>';
							}
						?>
					</select>

Até está melhor, não?

De qq modo, para te ajudar vou precisar de:

O código todo php dessa página

Um exemplo de output desse script (o código fonte (só o HTML e javascript) de uma página criada por esse código)


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
diabolickman

Hmmm, tens razão. Se não te importares prefiro enviar por PM.. Vou-te enviar a página completa e o sql da tabela a que vai buscar os valores ;)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.