Ir ao conteúdo

Posts recomendados

Postado

Olá pessoal 

Estou com o seguinte problema e gostaria de ver se podem me ajudar

Tenho um form Pedido de Compra a ser completado pelo fornecedor, com cabeçalho e itens

O cabeçalho para validar é tranquilo o problema são os campos dos itens pois nunca sei quantos itens terá o pedido pois já vem pré-preenchido do ERP

Detalhe, os itens eu crio com um For em PHP em tempo de execução.

E o meu problema é o seguinte:

no item eu tenho os campos abaixo

 

Codigo1 Qtd1 Valor1 TemSt1 (s/n) ValorSt1

Codigo2 Qtd2 Valor2 TemSt2 (s/n) ValorSt2

...

 

O problema: preciso valida o campo ValorSt(x) tem de ser > 0 se o campo TemSt(x) for igual a 'S'

Agradeço qualquer ajuda

  • Moderador
Postado

@Luis Fernando Pereira

Olá seja bem vindo em nosso Clube do Hardware.

Poderia postar o código por favor?

A validação tem de ser feita dentro da estrutura do código.  comparando a variável do ValorSt.

Se possível, também o exemplo de como é o resultado do código... 

Enfim, sem isso não sou capaz de compreender o problema.

É importante dar todos os detalhes. 

Postado

Bom dia DIF

O codigo fica mais ou menos assim:


<?php for ($i = 1; $i <= $nitens; $i++) { ?>

<select class="form-control" name="tst<?php echo $i; ?>" id="tst<?php echo $i; ?>" >

<option value='N' > Não</option>

<option value='S' > Sim</option>

</select>

<input type="text" class="form-control" id="vst<?php echo $i; ?>" name="vst<?php echo $i; ?>">

<?php } ?>

 

Preciso validar o campo vst(x) com base na resposta do campo anterior tst(x), se tst(x) = 'S' vst(x) NÃO pode ser vazio ou 0

As id´s dos dois campos ficariam tst1 e vst1 para o primeiro item variando de acordo com o numero de itens

 

Grato pela resposta

  • Moderador
Postado

@Luis Fernando Pereira

Bem, eu vi o código, mas ainda tenho minhas dúvidas.

Porque você gera o código assim com o for?

De onde tão vindo estes dados?

Pelo que eu vejo no laço,  você já começa em 1...  em que situação o zero iria vir?

 

Postado

Caro Dif

O programa é em PHP 

Quando gero o formulário com FOR é porque estou lendo no banco de dados do ERP os itens do pedido que pode ter de 1 a n itens.

Nunca vai haver a situação de $I ser 0 pois como disse acima sempre vai haver de 1 a n itens.

  • Moderador
Postado

@Luis Fernando Pereira

2 horas atrás, Luis Fernando Pereira disse:

Nunca vai haver a situação de $I ser 0 pois como disse acima sempre vai haver de 1 a n itens.

Então, porque quer comparar se nunca chegará uma situação que será zero.

Ainda não entendi a linha de raciocínio desse programa.

 

22 horas atrás, Luis Fernando Pereira disse:

ValorSt(x) tem de ser > 0 se o campo TemSt(x) for igual a 'S'

Estou me referindo a esta parte.

Me exemplifique uma situação que apareça algo menor que zero.

Alias, que tipo de campo é este?  Varchar? INT?  

Não se pode comparar letras com números. 

 

Infelizmente, tenho que perguntar pois não entendo ainda o objetivo.

 

Postado

Caro DIF

 

<?php for ($i = 1; $i <= $nitens; $i++) { ?> <select class="form-control" name="tst<?php echo $i; ?>" id="tst<?php echo $i; ?>" > <option value='N' > Não</option> <option value='S' > Sim</option> </select> <input type="text" class="form-control" id="vst<?php echo $i; ?>" name="vst<?php echo $i; ?>"> <?php } ?>

 


<input type="text" class="form-control" id="vst<?php echo $i; ?>" name="vst<?php echo $i; ?>">

O que será ZERO é o "value", o conteúdo, do que for digitado no campo "id=vst(x)" como mostrado no código acima

Preciso saber se o usuário escolheu SIM no select "id=tstx" que será = S e se o value da "id=vstx" é maior que zero, se não for tem que dar erro "Precisa informar o valor da ST"

  • Curtir 1
Postado

Olá!
Segue sugestão para validação client-side com jquery:
No select, acrescente o atributo data-target, assim:

<select class="form-control" name="tst<?php echo $i; ?>" id="tst<?php echo $i; ?>" data-target="#vst<?php echo $i; ?>">

E no js, proceda assim:
 

// quando mudar qualquer select que o name comece com "tst"
    $('select[name^="tst"]').on('change', function (e) {

        // define o input alvo
        var target = $('input' +  $(this).data('target'));

        // remove o atributo required
        target.removeAttr('required');

        // se o valor do select for igual a S
        if (this.value == 'S') {
            // então o input alvo terá o atributo required
            target.attr('required', true);
        }
    });

Dessa forma, o form não será submetido se existir algum input[required] vazio

 

Mas é importante também fazer validação server-side

Postado

@washalbano Bom dia amigo

 

Agradeço muito a resposta que já me deu um rumo, o detalhe ai é que esta invertido, o evento somente deverá ser disparado após a digitação do valor de vst(x) pois é esse que precisa ser controlado.

Seguindo o raciocínio quando eu perder o foco de vst(x) preciso ver se tst(x) é= 'S' se for obrigatoriamente vst(x) tem de ser >0 se for 0 ou branco o erro deve ser disparado.

No lado server side já faço a validação mas para ficar "Bonito" do lado client é ideal.

Amigo agradeço a interação.

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!