Veja o retorno dessa variável $qtd_projetos_prop.
Guto id é uma chave primária auto-increment?
Se for ela é única e se for única você nunca terá um COUNT > 1, use > 0 .
Veja o retorno dessa variável $qtd_projetos_prop.
Guto id é uma chave primária auto-increment?
Se for ela é única e se for única você nunca terá um COUNT > 1, use > 0 .
Guto,
Vamos lá: Como eu não vejo a sua aplicação, fica difícil apontar onde está o erro, mas vendo teu código, posso dar algumas sugestões:
1 - Verifique se na tabela PROJETOS os campos ID e STATUS estão mesmo com os dados gravados;
2 - Verifique se no campo STATUS o que está gravado é realmente “Submetido” ou se está “submetido” ou mesmo “SUBMETIDO”, pois uma letra sendo diferente (caixa alta ou caixa baixa) pode causar o problema.
3 - Apenas um palpite: Tente trocar isto:
if ($qtd_projetos_prop > 1)
por isto:
if ($qtd_projetos_prop > "1")
Meu código está assim em onValidate:
/**
* Recuperando o número de projetos submetidos do proponente
*/
$check_sql = "SELECT COUNT(id_proponentes)"
. " FROM projetos"
. " WHERE id_proponentes = '" . {proponente} . "' AND status = 'Submetido'";
sc_lookup(rs, $check_sql);
if (!empty({rs}))
{
$qtd_projetos_prop = {rs[0][0]};
}
if ($qtd_projetos_prop > 1)
{
sc_error_message('Este proponente já submeteu o máximo de projetos permitidos.');
}
/**
* Outras verificações
*/
// Error parameters
$error_test1 = {documentacao} == '0'; // Error test
$error_test2 = {documentacao_especifica} == '0';
$error_test3 = {declaracao_resposta} == '0';
$error_message = 'Se você não anexou a documentação exigida no edital ou não concorda com a declaração, não será possível submeter o projeto à comissão de avaliação.'; // Error message
// Redirection
if ($error_test1 or $error_test2 or $error_test3)
{
sc_error_message($error_message);
}
No código anterior tinha colocado e na clásula WHERE um id e na verdade era id_proponentes, mas isso não interfere em nada. O código agora está certo. Mas não emite o erro. Os demais erros que verificam apenas se o usuário marcou não em algumas das três perguntas que faço, estão apresentando o erro, que o código mostrado mais abaixo.
É formulário controle em que o primeiro campo é do tipo select em que seleciona os proponentes com o processamento ajax no próximo campo que é o nome do projeto, para exibir apenas os projetos do proponente selecionado.
O retorno da contagem do dataset é um string ou um inteiro? alguém sabe de me dizer isso? Se for string como eu converto aqui no SC é da mesma forma que em PHP tipo colocando int($qtd_projetos_prop)?
Já verifiquei e os dados estão gravados da foram que eu coloquei no código, ou seja, “Submetido”. Tanto que se eu fizer essa consulta no SQL Builder ele retorna 1, 2 ou o número de projetos do proponente que tenha o status Submetido.
O Sql está sendo executado, to achando que tem haver com fato do tipo do dado retornado no select count.
Mais alguma ideia? Obrigado pela atenção de todos.
Chequei os dados e eles estão certos e fiz a mudança em “1” e deu na mesma, não chega no erro.
Tentou o 0?
A qual id te referes? no código ique tinha colocado WHERE id, na verdade é WHERE id_proponentes.
id_proponentes é um campo que armazena o número do id do proponentes da tabela proponentes na tabela projetos, onde é feito o select.
O fato é que colocando o 0 funcionou. Mas to achando isso estranho. Minha dúvida é estando colocado “> 1” significa que só emitir o erro a partir do 3º…ainda não testei…hehehe… Obrigado.
Guto, o problema que eu acho é que sempre está retornando 1.
Vamos lá vou tentar entender a estrutura da sua tabela.
id_proponente status
1 Submetido
id_proponente status
1 Submetido
Isso é possível? Essa tabela possui 2 proponentes diferentes?
Ou
id_proponente status
1 Submetido
id_proponente status
2 Submetido
id_proponente status
3 Submetido
id_proponente status
4 NULL
Ou essa chave nesta tabela é única?
Já tentou colocar a em modo de debug pegar o SQL e jogar no Administrador?
Vamos tentar entender isso, pois não acho possível.
Teria como colocar o sql da tabela projetos, para gente fazer os testes.
Att Arquimedes
O proponente poder ter vários projetos, mas só poderá submeter um, ou seja, na tabela projetos o campo id_proponentes vai poder ter repetições, por exemplo:
tabela projetos:
id id_proponentes status
1 1 Em inscrição
2 1 Submetido
3 1 Em execução
4 1 Submetido
O que é chave única é o id que identifica o projeto.
No exemplo acima, se fizer esse mesmo select que está no meu código no sql builder, ele retorna 2, ou seja, existem dois projeto do proponente 1 com status Submetido.
Tenho que entender isso pq depois vou colocar esse número máximo de projetos através de uma variável, pq hoje o limite para submissão é 1, mas pode mudar pra 2 ou 3 sei lá.
Obrigado!
Guto, tem skype? Me adicione: robertewem.
Não uso skype…tenho msn… o msn q tá no teu perfil é esse mesmo…vou te adicionar lá.
Mas uma vez quero agradecer a todos que me ajudaram. Consegui resolver o meu problema. Vou postar agora como ficou o código do meu onValidate:
//Selecionando o limite de projetos que podem ser submetidos da tabela edital
$sql_limite = "SELECT lim_projetos FROM edital";
sc_lookup(ds, $sql_limite);
if (!empty({ds}))
{
$maximo_projetos = {ds[0][0]} - 1;
}
/**
* Recuperando o número de projetos submetidos do proponente
*/
$check_sql = "SELECT COUNT(id_proponentes)"
. " FROM projetos"
. " WHERE id_proponentes = '" . {proponente} . "' AND status = 'Submetido'";
sc_lookup(rs, $check_sql);
if (!empty({rs}))
{
$qtd_projetos_prop = {rs[0][0]};
}
if ($qtd_projetos_prop > $maximo_projetos)
{
sc_error_message('Este proponente já submeteu o máximo de projetos permitidos.');
sc_error_exit();
}
Um mudança em relação aos códigos postados anteriormente por mim é que faço um select em uma tabela que contem o máximo de projetos, porque assim tem como tá mudando isso via aplicação, sem precisar mexer no código.
Percebi que basta eu subtrair 1 do número máximo de projetos que podem ser submetidos e funcionou. Testei aumentando, ou seja, ao invés de no máximo um projeto, dois e assim por diante, está funcionando. Quando o usuário tenta submeter um projeto além do máximo permitido, não submete e exibe o erro.
Grato a todos!
Boa Guto, as vezes a solução é parar de programar um pouco e voltar com a cabeça mais arejada.