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

DropDown box com multipla escolha e tratamento do $_POST

Discussão em 'Web Development' iniciada por eXcept, 19 de Abril de 2006. (Respostas: 10; Visualizações: 2708)

  1. eXcept

    eXcept Power Member

    Viva

    Tenho uma dropdown box criada, com multipla escolha, assim:

    Código:
    <form method="POST" action="teste.php">
    	<p><select size="8" name="D1" multiple>
    	<option>a</option>
    	<option>d</option>
    	<option>e</option>
    	<option>f</option>
    	<option>g</option>
    	<option>h</option>
    	<option>i</option>
    	<option>j</option>
    	<option>k</option>
    	<option>m</option>
    	<option>n</option>
    	<option>b</option>
    	<option>c</option>
    	</select></p>
    	<p><input type="submit" value="Submit" name="B1"></p>
    </form>
    
    no teste.php tenho

    Código:
    <?
    print_r($_POST['D1']);
    ?>
    
    no entanto, o $_POST['D1'] só tem o último valor seleccionado da dropdown box.

    Como é que posso "apanhar" todas as variáveis seleccionadas?

    TIA
     
  2. eXcept

    eXcept Power Member

    Um outro teste

    Código:
    <?
    $valor = $_POST['D1'];
    foreach ($valor as $a) {
        echo $a;
    }
    ?>
    Warning: Invalid argument supplied for foreach() in C:\Program Files\xampp\htdocs\tes2\teste.php on line 3

    :-(
     
  3. mcog_blaster

    mcog_blaster Power Member

    tavas quase lá...
    Código:
    <form method="POST" action="teste.php">
    	<p><select size="8" name="D1[]" multiple>
    	<option>a</option>
    	<option>d</option>
    	<option>e</option>
    	<option>f</option>
    	<option>g</option>
    	<option>h</option>
    	<option>i</option>
    	<option>j</option>
    	<option>k</option>
    	<option>m</option>
    	<option>n</option>
    	<option>b</option>
    	<option>c</option>
    	</select></p>
    	<p><input type="submit" value="Submit" name="B1"></p>
    </form>
    
    PHP:
    <?
    print_r($_POST['D1']);


    foreach(
    $_POST['D1'] as $key => $value)
    {
        echo 
    $value.'<br />';
    }
        
    ?>
     
  4. eXcept

    eXcept Power Member

    Vou experimentar amanha.

    cumpz
     
  5. eXcept

    eXcept Power Member

    Código:
    j
    Warning: Invalid argument supplied for foreach() in C:\Program Files\xampp\htdocs\tes2\teste.php on line 5
    
    :-(
     
  6. mcog_blaster

    mcog_blaster Power Member

    hummm...?
    so te da esse erro quando nao escolhes nenhum valor, correcto?
    È que aki ta a funcionar direito, só da esse erro caso nao se escolha nehum valor


    PHP:
    if($_POST['D1'])

      
    //foreach loop
    }
    else
    {
      
    //mensagem de erro
    }
     
  7. eXcept

    eXcept Power Member

    esse erro dá-me qualquer que seja o valor introduzido. uma selecção ou várias

    o print_r() dá-me sempre a ultima variavel seleccionada

    com esse código dá-me na mesma o erro.

    Estão-me a dizer que tenho de declarar a D1 como um array, mas não percebo nem como nem porquê...
     
  8. eXcept

    eXcept Power Member

    ele só me mostra *sempre* o ultimo valor seleccionado, quer por echo da variavel, quer pelo print_r() do post!
     
  9. mcog_blaster

    mcog_blaster Power Member

    axo que ja sei qual é o problema...lol.
    Olha bem pra o codigo do form que te enviei, vais ver que a variavél está definida como um array.

    Código:
    <p><select size="8" name="D1[]" multiple>
    esta definida como uma array para que possa realmente guardar varios valores, caso contrario D1 apenas te mostra a ultima selecçao.
     
  10. eXcept

    eXcept Power Member

    damn, pormenor de caca mas mt importante!

    tks, ja bomba ;)
     
  11. CrazyBomber

    CrazyBomber Power Member

    já agora só acrescentava algo ao código de verificação de selecção:

    Código:
    if( isset( $_POST['D1']) )
    { 
      //foreach loop
    }
    else
    {
      //mensagem de erro
    }  
    
    o isset() vai ver se o dito campo está lá ou não. Assim não dá erro nenhum :)
     

Partilhar esta Página