1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

[Ajuda]PHP - Combo Box

Discussão em 'Web Development' iniciada por Majin Vegeta, 8 de Maio de 2008. (Respostas: 27; Visualizações: 4819)

  1. Majin Vegeta

    Majin Vegeta Power Member

    boas, mais uma vez preciso que me ajudem e novamente em PHP.

    O meu problema e o seguinte. Eu tenho um formulario em PHP que tem uma Combo Box. O que eu queria era que ao seleccionar uma das opções da combo box ele aparece-se um campo no formulario para por uma imagem por exemplo, e se seleccionasse outro aparecesse por exemplo,uma input box para escrever quaquer coisa.

    ja tentei com ifs mas nao estou a ter sucesso. deve me faltar qualquer coisa.

    podem-me ajudar?

    cumps
     
  2. cula_ru

    cula_ru Power Member

    metes no select onchange="funcqq()"

    depois é que brincas com a

    function funcqq(){
    if (document.getelementbyID('qqcoisa').selectedindex == 1)
    {
    faz qq coisa;

    }


    }

    get it?
     
    Última edição: 8 de Maio de 2008
  3. hostmake

    hostmake Power Member

    Vegeta, se vais usar um select, e queres ter acções individuais para cada opção tens que criar uma funcção onchange, que leia o conteúdo que esteja seleccionado, e ai efectuar uma acção.


    Ou seja é um onChange, ligado a uma função que recebe o seguinte:

    document.nome_form.nome_select.options[document.nome_form.nome_select.selectedIndex].value;

    que é o valor que está seleccionada, e depois fazes uns if's.
     
  4. Majin Vegeta

    Majin Vegeta Power Member

    entao para fazer as funçoes vai ter de ser em javascrip e nao em PHP ne?

    cumps
     
  5. hostmake

    hostmake Power Member

  6. Majin Vegeta

    Majin Vegeta Power Member

    eu arranjei estas 2 funçoes em que quero que uma chame uma textarea para escrever uma frase e outra um input que e para mais tarde fazer um upload de uma imagem

    <script language="JavaScript">
    function wallpaper()
    {
    document.myform.action="";
    document.myform.submit();
    }
    function frase()
    {
    document.myform.action="";
    document.myform.submit();
    }
    </script>

    so que agora nao sei o que meter no action, nem no onchage.

    help please

    cumps
     
  7. MPalhas

    MPalhas Power Member

    isso é o que vais por a executar ao clicar num item da combobox? se é, não é bem assim.

    na combobox metes:

    Código:
    <select onChange="alterarForm(this.value)">.......</select>
    e crias a função alterarFrom:

    Código:
    function alterarForm(valor) {
       switch (valor) {
          case "valor1": //fazer coisas caso seja esta a opção seleccionada
             break;
          
          case "valor2": //mesma coisa
             break;
    
          case "valor3": //etc, etc
             break;
       }
    }
    não percebi bem a duvida do action. action é o url para onde o browser vai ser encaminhado ao enviar o formulario
     
  8. Majin Vegeta

    Majin Vegeta Power Member

    <script language="JavaScript">
    function alterarForm(valor) {
    switch (valor) {
    case "valor1":"<td><p>Imagem do Concurso</td><td><input name=userfile type=file></td>";
    break;

    case "valor2":"<td><p>Frase</td><td><input type=text name=frase_concurso size=50 maxlength=60></td>";
    break;

    }
    }
    </script>
    <tr>
    <td><p>Tipo de Concurso</td><td><select onChange="alterarForm(this.value)">
    <option value="">Tipo de Concurso:</option>
    <option value=valor1>Melhor Wallpaper</option>
    <option value=valor2>Melhor Frase</option>
    </select></p></td>
    </tr>
    <tr>

    eu meti deste genero mas continua a nao dar

    help!

    P.S. desculpem a ignorancia
     
  9. MPalhas

    MPalhas Power Member

    com Javascript não podes "simplesmente" escrever html. tens primeiro especificar onde é que ele vai ficar e como.
    por exemplo, pelo que tens ai, parece-me que queres inserir um campo de uma form, em que cada titulo/campo está numa celula de uma tabela

    queres apagar um campo existente e substituir por esse? ou queres que apareça o novo campo por baixo dos que já existem? é que estas duas coisas, parecendo que não, são completamentes diferentes de se fazer.

    outra coisa. tu ai estás a abrir um Table Row sem abrir uma tabela primeiro, o que é errado. também te deve faltar um <tr>...</tr> no html que escreveste no javascript, a não ser que queiras mesmo que apareça tudo na mesma linha.

    agora, pensando que queres adicionar o campo novo, sem tirar nenhum dos que existem, penso que possa ser assim:

    Código:
    <script language="javascript">
    function adicionar campo(campo) {
    var tabela = document.getElementById("tabelaForm")
    
      switch (campo) {
        case "primeiro":
          var newElement= document.createElement("tr")
          newElement.innerHTML = "<td>primeiro campo</td> <td><input type='text' /></td>"
          tabela.appendChild(newElement)
          break;
    
        case "segundo":
          var newElement= document.createElement("tr")
          newElement.innerHTML = "<td>segundo campo</td> <td><input type='text' /></td>"
          tabela.appendChild(newElement)
          break;
    
        //etc, etc
      }
    }
    </script>
    
    <table id="tabelaForm">  
      <tr>...</tr>
      <tr>...</tr>
      <!-- aqui irão aparecere os campos novos -->
    </table>
    
     
  10. Majin Vegeta

    Majin Vegeta Power Member

    eu tenho isto

    <script language="javascript">
    function adicionar campo(campo) {
    var tabela = document.getElementById("tabelaForm")

    switch (campo) {
    case "primeiro":
    var newElement= document.createElement("tr")
    newElement.innerHTML = "<td><p>Imagem do Concurso</td><td><input name=userfile type=file></td>"
    tabela.appendChild(newElement)
    break;

    case "segundo":
    var newElement= document.createElement("tr")
    newElement.innerHTML = "<td><p>Frase</td><td><input type=text name=frase_concurso size=50 maxlength=60></td>"
    tabela.appendChild(newElement)
    break;

    //etc, etc
    }
    }
    </script>
    <form name="concurso" method="post" enctype="multipart/form-data" id="tabelaForm">
    <table align="center" border="0">
    <tr>
    <td><p>Nome</td>
    <td><input type="text" name="nome_concurso" size="50" maxlength="60"></p>
    </td>
    </tr>
    <tr>
    <td><p>Data</td>
    <td><input type="text" name="data_concurso" size="50" maxlength="5"></p>
    </td>
    </tr>
    <tr>
    <td><p>Descrição</td>
    <td><textarea name="descricao_concurso" cols="37" rows="5"></textarea></p>
    </td>
    </tr>
    <tr>
    <td><p>Tipo de Concurso</td>
    <td><select onChange="adicionar campo(this.campo)">
    <option value="">Tipo de Concurso:</option>
    <option value="primeiro">Melhor Wallpaper</option>
    <option value="segundo">Melhor Frase</option>
    </select></p>
    </td>
    </tr>


    <?php
    //if ($tipo_concurso==1){
    //echo '<td><p>Imagem do Concurso</td>';
    //echo '<td><input name="userfile" type="file"></td>';
    //}
    //else { if($tipo_concurso==2){
    //echo '<td><p>Frase</td>';
    //echo '<td><input type=text name="frase_concurso size=50 maxlength=60></td>';}
    //}
    ?>

    </table>


    e o que eu quero e ter uma combox em que apareça inicialmente qualquer coisa (exemplo: "Escolha ...")e ao clicar nessa combo vou ter duas opçoes e se clicar na primeira vai me chamar um input para fazer um upload de uma imagem, se clicar na segunda um input para escrever uma frase. eu tentei fazer com o teu exemplo e como tu me explicaste MPalhas e o codigo ficou da maneira que esta acima mas no entanto, a combo continua a nao fazer nada :(:(

    cumps
     
  11. MPalhas

    MPalhas Power Member

    só tens dois erros. o nome da função não pode ter espaços. em vez de "adicionar campo", põe "adicionarCampo" ou "adicionar_campo" por exemplo
    e ao chamar a função com o onChange, o parametro não é this.campo, porque isso não existe. o correcto é this.value, que vai buscar o valor de si mesmo, e via passá-lo para a variavel campo da função

    depois também há outro problema. é que como isso está agora (tirando os erros claro) podes clicar á vontade na combobox e vão sempre aparecer campos novos, além de que pode adicionar os dois tipos de campo. presumo que só queiras que apareça um unico campo.
    para resolver é simples.

    atribuis um ID á combobox, e no fim de cada case da função, metes isto:
    Código:
    document.getElementById('id_da_combo').disabled=true;
     
  12. Majin Vegeta

    Majin Vegeta Power Member

    MPalhas, 5*, :):) funcionou perfeitamente. Agora so tenho um problema de <tr>s e <td>s que tenhp de resolver mas eu depois trato disso. Há só mais uma coisa que te quero perguntar, tipo quando eu seleciono um a cena pa escolher fica bloqueada (disable). Nao ha maneira de se eu quiser seleccionar a outra, desaparecer a input type da que esta seleccionada e aparecer a outra?

    cumps
     
  13. MPalhas

    MPalhas Power Member

    ok, para isso tem que se alterar a função. fica assim:

    Código:
    function adicionarcampo(campo) {
    	var tabela = document.getElementById("tabelaForm")
    
    	if (!document.getElementById('tr_novo_campo')) { //ve se já existe o novo TR, e cria-o se nao houver
    		var newElement= document.createElement("tr")
    		newElement.setAttribute('id', 'tr_novo_campo')
    		tabela.appendChild(newElement)
    	}
    
    	switch (campo) {
    	case "primeiro":
    		document.getElementById('tr_novo_campo').innerHTML='<td>Primeiro<input name="primeiro" ....... /></td>'; //o conteudo do TR muda para o campo escolhido
    	break;
    
    	case "segundo":
    		document.getElementById('tr_novo_campo').innerHTML='<td>Segundo<input name="segundo" ....... /></td>';
    	break;
    
    	//etc, etc
    	}
    }
    
    só tens que alterar o innerHTML de cada case e por o campo que queres. poe os TDs, mas não ponhas o TR, que já foi definido no inicio da função
     
  14. Majin Vegeta

    Majin Vegeta Power Member

    <script language="javascript">
    function adicionar_campo(campo) {
    var tabela = document.getElementById("tabelaForm")

    if (!document.getElementById('tr_novo_campo')) {

    if (!document.getElementById('tr_novo_campo')) { //ve se já existe o novo TR, e cria-o se nao houver
    var newElement= document.createElement("tr")
    newElement.setAttribute('concurso', 'tr_novo_campo')
    tabela.appendChild(newElement)
    }

    switch (campo) {
    case "primeiro":
    document.getElementById('tr_novo_campo').innerHTML='<td><p>Imagem do Concurso</td><td><input name=userfile type=file></td>'; //o conteudo do TR muda para o campo escolhido
    break;

    case "segundo":
    document.getElementById('tr_novo_campo').innerHTML='<td><p>Frase</td><td><input type=text name=frase_concurso size=50 maxlength=60></td>';
    break;

    //etc, etc
    }
    }
    </script>



    <form name="concurso" method="post" enctype="multipart/form-data" id="tabelaForm">
    <table align="center" border="0">
    <tr>
    <td><p>Nome</td>
    <td><input type="text" name="nome_concurso" size="50" maxlength="60"></p>
    </td>
    </tr>
    <tr>
    <td><p>Data</td>
    <td><input type="text" name="data_concurso" size="50" maxlength="5"></p>
    </td>
    </tr>
    <tr>
    <td><p>Descrição</td>
    <td><textarea name="descricao_concurso" cols="37" rows="5"></textarea></p>
    </td>
    </tr>
    <tr>
    <td><p>Prémios</td>
    <td><textarea name="premios_concurso" cols="37" rows="5"></textarea></p>
    </td>
    </tr>
    <tr>
    <td><p>Tipo de Concurso</td>
    <td><select onChange="adicionar_campo(this.value)" id="concurso">
    <option value="">Tipo de Concurso:</option>
    <option value="primeiro">Melhor Wallpaper</option>
    <option value="segundo">Melhor Frase</option>
    </select></p>
    </td>
    </tr>




    </table>
    <br>
    <table border="0" align="center">
    <tr>
    <td colspan="2" align="center"><input type="submit" value="Criar" name="criar"></td>
    </tr>
    </table>
    </form>

    <?php
    }
    if($ligax) mysqli_close($ligax);
    ?>


    eu coloquei como esta acima so que nao estou a perceber o que tenho de meter onde colocaste (tr_novo_campo)

    cumps
     
  15. MPalhas

    MPalhas Power Member

    tr_novo_campo é o id que tem que ser atribuido ao TR que é criado no javascript. podes deixar assim ou então mudas para um ID á tua escolha, mas tens que mudar em todos para ficar tudo igual.
    assim o Javascript vai procurar esse ID no inicio, se encontrar é porque já existe e assim em vez de o criar, muda só o conteudo
     
  16. Majin Vegeta

    Majin Vegeta Power Member

    tenho que por o id em todos os <tr> da pagina com o mesmo nome e isso?

    cumps
     
  17. MPalhas

    MPalhas Power Member

    não, a tual tabela original deixa estar como está. esse id é para o TR que vai ser criado pelo javascript, para que o script possa saber se ele existe ou não. basta deixares o id como eu o pus no script (podes mudar o nome mas tens que mudar em todos)
     
  18. Majin Vegeta

    Majin Vegeta Power Member

    mas assim vai ficar como o ultimo codigo que eu postei neste post e com esse codigo, ao escolher qualquer uma das opçoes ele nao me esta a fazer nada

    ou tenho de por id=tr_novo_campo onde tenho id=concurso?

    cumps
     
    Última edição: 12 de Maio de 2008
  19. MPalhas

    MPalhas Power Member

    e para que é que foste mexer nesta linha? onde tens "concurso" devia estar "id", não podes mexer nisso, que é o que vai atribuir o ID chamado "tr_novo_campo" ao novo TR criado

    o que eu te disse é que podias alterar onde diz "tr_novo_campo", mas novamente, terás que alterar em todos os sitios que dizem "tr_novo_campo"
     
  20. Majin Vegeta

    Majin Vegeta Power Member

    entao so tenho de por id onde esta concurso?

    cumps
     

Partilhar esta Página