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

PHP, Select não devolve valores,,,

Discussão em 'Web Development' iniciada por silvino, 30 de Janeiro de 2008. (Respostas: 8; Visualizações: 2612)

  1. silvino

    silvino Power Member

    Olá, tenho a seguinte form,

    PHP:
    if(additem() || empty($_POST)){
            echo 
    '
                <form action="?a=livro_add.php" method="post">
                    <fieldset>
                    <legend>Adicionar Livro</legend>    
                    <dl>
                        <dt><label for="titulo">Titulo</label></dt>
                        <dd><input type="text" size="25" name="titulo" value="'
    .$_POST["titulo"].'"></dd>
                        
                        <dt><label for="descricao">Descrição</label></dt>
                        <dd><textarea rows="5" cols="50" name="descricao">'
    .$_POST["descricao"].'</textarea></dd>
                        
                        <dt><label for="local">Local</label></dt>
                        <dd><input type="text" name="local" value="'
    .$_POST["local"].'"></dd>
                        
                        <dt><label for="ficheiro">Ficheiro</label></dt>
                        <dd><input type="text" name="ficheiro" value="'
    .$_POST["ficheiro"].'"></dd>                        
                        
                        <dt><label for="idtopico">Tópico</label></dt>
            '
    ;

            
    $con=ligabd();
            
    mysql_select_db('docs',$con);
            
            
    $result=mysql_query("SELECT * FROM topicos");
            
            echo 
    '<select name="idtopico">';
            while(
    $linha=mysql_fetch_array($result)){
                echo 
    '<option value="'.$linha["id"].'">'.$linha["titulo"].'</option>'."\n";;
            }

            echo 
    '
                        </select>            
                    <dt><input type="submit" name="livros" value="Adicionar"></dt>
                 </dl>
            </form>'
    ;
            
    }
    Que passa os valores para a função additem

    PHP:
    function additem(){

    $vazio $post = array();
    foreach (
    $_POST as $variavel => $valor) {
        if(empty(
    $valor)){
            
    $vazio[$variavel] = $valor;
            echo 
    $variavel;
        } else {
            
    $post[$variavel] = $valor;
               if(
    $valor="Adicionar"){
                    
    $op=$variavel;
            }
        }
    }

    if(
    count($vazio)==0){
        echo 
    $op;
    }else{
        return 
    TRUE;
    }
    }
    Funciona tudo bem menos o campo select com as option, não sei o que se passa para o foreach ($_POST as $variavel => $valor) não detectar o select option ,,,

    Obrigado.
     
  2. anjo2

    anjo2 Power Member

    tenta fazer
    PHP:
    print_r($result);
     
  3. silvino

    silvino Power Member

    Desculpa :), Onde ? o objectivo é que detecte na função additem que não foi preenchido um determinado campo, neste caso, se
    a selectbox não tiver nenhum valor o script deixa passar, eu não quero isso...
     
  4. anjo2

    anjo2 Power Member

    Podias ser mais explicito? O que está mal? Onde são chamadas as coisas?
     
  5. BMCouto

    BMCouto Power Member

    Estás a ser pouco especifico, não percebo bem o que queres.. queres isto?

    if ($linha[0]==''] {
    die("vazio");
    } else {
    //fazes o que quiseres
    }

    Se não é isso explica lá melhor com calma o que pretendes...
     
  6. silvino

    silvino Power Member

    Olá,
    Antes de mais Obrigado,

    Chamo a form, que tem a seguinte condição,

    PHP:
    if(additem() || empty($_POST))
    portanto se uma ou outra condição forem verdade, imprimo a from, a função additem é a seguinte

    Crio dois arrays,
    $vazio = $post = array();

    Atribuo a $variável todas as que são passadas pelo post assim como o seu valor,
    foreach ($_POST as $variavel => $valor) {

    se o seu valor estiver vazio, a variável vazio toma valor de algo,,, só para saber mais a frente,,,
    if(empty($valor)){
    $vazio[$variavel] = $valor;
    echo $variavel;

    se não
    } else {

    o array $post no índice $variável toma o valor passado pelo $_POST
    $post[$variavel] = $valor;

    se valor for Adicionar então é porque é o botão submit, quero guardar o seu valor para ser usado
    no futuro
    if($valor="Adicionar"){
    $op=$variavel;
    }
    }
    }

    Se o array vazio estiver vazio,,, vou realizar tarefas
    if(count($vazio)==0){
    echo $op;


    Se não retorno o valor a form de verdade para que se apresente a fim de preencher
    os campos em falta
    }else{
    return TRUE;
    }

    Funciona quase na perfeição embora não seja a melhor solução,,, apenas falha nas combobox

    podem testar aqui http://debiminho.no-ip.org/?a=topico_add.php ,,, não precisam de login ;) Funciona
    Mas este com Combo já não
    http://debiminho.no-ip.org/?a=doc_add.php
     
    Última edição: 30 de Janeiro de 2008
  7. p3dro

    p3dro Power Member

    não respondendo directamente à tua pergunta, chamava só a tua atenção para este pequeno typo

    PHP:
    if($valor="Adicionar")
    deverá ser
    PHP:
    if($valor=="Adicionar")
     
  8. anjo2

    anjo2 Power Member

    Além disso não sei se não precisas de por no inicio da função
    PHP:
    global $_POST;
     
  9. silvino

    silvino Power Member

    Olá, já detectei o problema, não estava na função mas sim na Form,

    Pois esta tinha o seguinte código,

    PHP:
        $con=ligabd();
        
    mysql_select_db('docs',$con);
        
        
    $result=mysql_query("SELECT * FROM livros");
        
        echo 
    '<select name="idlivro">';
        while(
    $linha=mysql_fetch_array($result)){
            echo 
    '<option value="'.$linha["id"].'">'.$linha["titulo"].'</option>';
        }
        echo 
    '</select>
    Claro que na função não podia detectar que não tinham sido introduzido dados se estes tb não tinham sido
    declarados na form, pois a tabela esta vazia quando quando se da o preenchimento do select :nocom8le: ,,,, Obrigado pelas dicas,,,
     

Partilhar esta Página