Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

sEnte

Dropdown menu dúvida técnica

Recommended Posts

sEnte

Isto é mais uma dúvida de como fazer...

Passo a explicar.

No caso de um blog, posso adicionar posts a determinadas categorias.

Código HTML para uma dropdown

<select>
		   <option value = "1">-- SELECT--</option>
		   <option value = "2">one</option>
		   <option value = "3">two</option>
		   <option value = "4">three</option>
		   <option value = "5">four</option>
		 </select>

Em relação a BD posso adicionar os campos à BD inclusivé o -- SELECT --

A ideia é por exemplo quando estiver selecionado o -- SELECT -- dar uma mensagem do tipo seleciona a categoria.

É mais simples fazer um if onde mysql-query $row será comparado a -- SELECT -- e se for true dar mensagem de erro ou haverá outra maneira mais simples de o fazer.

Não tenho código feito neste PC mas mais tarde posso colocar um exemplo prático


"If It Ain't Broke, Break it and build something Cooler!" Unknown

Share this post


Link to post
Share on other sites
brunoais

Nunca entendi se está correto, mas eu sempre fiz assim (desde que o HTML5 passou a ser suficientemente suportado):

<select class="requiredCheckbox" required>
<option value="" selected>-- SELECT--</option>
<option value="1">one</option>
<option value="2">two</option>
<option value="3">three</option>
<option value="4">four</option>
</select>

Se não receber um inteiro neste, limito-me a rejeitar o formulário. Tão simples como isso. Não é preciso andar a ligar à BD e comparar valores... N sei de aonde é que veio essa tua ideia.

Não sei de aonde é que veio essa tua ideia de até considerares que é o conteúdo da opção que é enviado e não o valor (@value). É ao contrário.


"[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
sEnte

Bem se calhar expliquei-me mail.

Isso em HTML5 está correcto, mas no meu caso eu tenho as <option> numa BD e depois populo através de um query que me vai buscar as diferentes categorias à BD

<select name="category">
 <?php
  foreach(get_categories() as $category){
 ?>
  <option value="<?php echo $category['id']; ?>"> <?php echo $category['name']; ?> </option>
 <?php
  }
 ?>
</select>

ou seja vou buscar as categorias dentro de BD. Por isso é que falei nessa trapalhada de andar a comparar valores.

Actualmente tenho 3 categorias "Uncategorised", "Categoria1" e "Categoria2".

A minha ideia era ter por defeito a -- SELECT -- mas caso do user se esquecesse de mudar de categoria ia dar um erro a dizer Por favor escolha uma categoria para publicar a mensagem

Edited by sEnte

"If It Ain't Broke, Break it and build something Cooler!" Unknown

Share this post


Link to post
Share on other sites
HappyHippyHippo

o que queres é registar uma função de javascript ao submit do form que valide o valor do select ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
brunoais

@HappyHippyHippo

É o que parece

Mais uma situação em que quem pede "não sabe o que pede". Escreve que quer saber alhos mas pergunta bugalhos.


"[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
sEnte

Eu não quero javascript/jquery nenhum. É PHP.

Na Base de dados tenho uma tabela de categorias, onde tem os campos cat_id e category

Como já disse antes o campo category tem 3 opções. "Uncategorised", "Categoria1" e "Categoria2" e quero juntar outra. " -- SELECT --", mas a select quero que seja a que é selecionada por defeito. Até aqui sem problemas.

Agora quero numa <option> ter essas categorias todas, mas quero que essa "-- SELECT --" seja nulo.tal como se fossemos a fazer a validação de um campo de inserção de dados.

A ideia é caso a categoria seja selecionada seja "-- SELECT --" dá erro caso contrário adiciona tudo como deve ser.

Será que se pode fazer assim?

if($category["name"] === "-- SELECT--"){
  echo 'Please choose a category';
}

Perguntei noutro forum e deram-me alguns exemplos mas queria saber quel a melhor maneira de fazer.

<select name="category">
   <option value="0">-Select-</option>
<?php
  foreach(get_categories() as $category){
?>
  <option value="<?php echo $category["id"]; ?>"> <?php echo $category["name"]; ?> </option>
<?php
}
?>
</select>

e depois comparar num if fazer algo do tipo $_POST["category"] == 0

Outra opção dada é meter o "-- SELECT -- " dentro de um array e depois usar o in_array e caso esteja dá erro

Edited by sEnte

"If It Ain't Broke, Break it and build something Cooler!" Unknown

Share this post


Link to post
Share on other sites
brunoais

Perguntei noutro forum e deram-me alguns exemplos mas queria saber quel a melhor maneira de fazer.

Melhor opção entre as duas? Esta:

<select name="category">
   <option value="0">-Select-</option>
<?php
  foreach(get_categories() as $category){
?>
  <option value="<?php echo $category["id"]; ?>"> <?php echo $category["name"]; ?> </option>
<?php
}
?>
</select>

e depois comparar num if fazer algo do tipo $_POST["category"] == 0

Sem dúvida!

Eu acho que ainda há melhor mas essa já é boa.


"[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
panickz

A forma mais simples que tens para fazer é usar jquery ou javascript..

<form onsubmit="check();">
<select id="id_select">
<option value="null">--SELECT--</option>
<option value="1">2</option>
</select>
<input type="submit">

Neste caso fazes onsubmit check() e tens de criar a função check.

function check(){
if($("id_select").val()=="null"){
alert("Deve escolher uma opção");
return false;
}else{
document.id_select.submit();
}
}

Algo deste genero.. ta uma mistura de jquery com javascript não é muito o meu forte. Acho que é a forma mais viavel do que ires verificar em php. Se tiver null ele não faz submit e manda um alerta senão não faz. Podes verificar em php mas a pagina tera sempre de fazer refresh.

Se queres mesmo fazer a verificaçao em php tens de usar um IF.

if($_POST["categoria"]=="null") { //por exemplo
//Aqui dentro estaria a query que nao vai correr porque esta null.
}else{
$warning = "Tem de escolher uma opção.";
// OU
echo ""Tem de escolher uma opção.""
}

Se tu tiveres a query na mesma pagina do formulario. Podes defenir um input type=hidden por exemplo com o nome action e value "query" depois o que fazes é que o formulario envia para a pagina onde se encontra caso a verificação falhe colocas a variavel "$warning" aonde quiseres no codigo e caso ela exista o warning aparece caso ele seja enviado não aparece. Terias de acrescentar outro IF:

if($_POST["action"]=="query"){
if($_POST["categoria"]=="null") { //por exemplo
//Aqui dentro estaria a query que nao vai correr porque esta null.
}else{
$warning = "Tem de escolher uma opção.";
// OU
echo ""Tem de escolher uma opção.""
}
}

Não sei se me fiz entender ou se é isto que pretendes mas ta ai. ;)

Edited by apocsantos
geshi

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

×

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.