Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal tudo bem? Estou necessitando de uma força com um código aqui, vou tentar ser o mais claro possível. É o seguinte, tem esta tabela em meu banco de dados:
DROP TABLE IF EXISTS `pipeline_documentos`;
CREATE TABLE `pipeline_documentos` (
`documento_id` int(11) NOT NULL auto_increment,
`documento_nome` varchar(255) default NULL,
`documento_nome_original` varchar(255) default NULL,
`documento_type` varchar(255) default NULL,
`documento_tamanho` varchar(255) default NULL,
`documento_especie` varchar(255) default NULL,
`documento_label` varchar(255) default NULL,
`documento_data` varchar(255) default NULL,
`user_id` int(11) default NULL,
`segurado_id` int(11) default NULL,
`negocio_id` int(11) default NULL,
`objeto_id` int(11) default NULL,
PRIMARY KEY (`documento_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
A função dela será armazenar documentos enviados no sistema, o que vai separa um documento do outro são as colunas "documento_especie" e "documento_especie", e seus ID relacionados (segurado_id,negocio_id,objeto_id), em media serão de 5 a 7 documentos enviados, variam por causa da CNH e/ou CPF e RG que podem ou não serem enviados juntos ou apenas um deles.
Então o que preciso é verificar se um documento já foi enviado ou não e retornar um erro para não deixar o usuário avançar caso algum documento não exista no sistema. Comecei a rascunha alguma coisa, porém não senti muita segurança nisso:
function verifica_documentos($segurado_id,$negocio_id,$objeto_id,$retonar=false){
#Documenro Objeto
#Declaração de Ofereta
#Proposta Assinada
#CNH
#CPF e RG
#$documentos = array('Documenro Objeto','Declaração de Ofereta','Proposta Assinada','CNH','CPF','RG');
$erro = Array();
$erros = '0';
$sel_doc_1 = $this->seleciona("SELECT * FROM pipeline_documentos WHERE negocio_id='".$negocio_id."' AND documento_label='negocio'");
$contar_negocio = mysql_num_rows($sel_doc_1);
if($contar_negocio < '2'){
$erro[] = 'Declaração de Ofereta e/ou Proposta Assinada';
$erros++;
}
$sel_doc_2 = $this->seleciona("SELECT * FROM pipeline_documentos WHERE segurado_id='".$segurado_id."' AND documento_label='segurado'");
$contar_segurado = mysql_num_rows($sel_doc_2);
if($contar_segurado < '1'){
$erro[] = 'CNH, CPF e/ou RG';
$erros++;
}
$sel_doc_3 = $this->seleciona("SELECT * FROM pipeline_documentos WHERE negocio_id='".$negocio_id."' AND objeto_id='".$objeto_id."' AND documento_label='objeto'");
$contar_objeto = mysql_num_rows($sel_doc_3);
if($contar_objeto == '0'){
$erro[] = 'Documenro Objeto Segurado';
$erros++;
}
if($retonar == 'lista_erros'){
$sql = implode( ' ),( ',$erro );
return '('.$sql.')';
}else if($retorna = 'numero_erros'){
return $erros;
}
}
Existe uma forma mais simplificada? Onde possa chegar ao mesmo resultado ou a um melhor resultado? Desde já agradeço a colaboração de todos que se prontificarem a ajudar.
Obrigado pelo retorno, então eu percebi o erro de digitação depois, mas as outras dicas são pertinentes e e ja add em meu código, funcionando perfeitamente.
Ainda estou trabalhando em uma forma de retornar qual documento está faltando, o problema é que antes nem todos eram obrigatórios, por exemplo o utilizador poderia enviar tanto uma CHN quanto CPF+RG ou até os 3, o que eu fiz até agora, é que quando a CNH é enviada desabilito o envio dos outros dois e virce-versa.
Queria um resultado meio assim:
$sel_doc_2 = $this->seleciona("SELECT * FROM pipeline_documentos WHERE segurado_id='".$segurado_id."' AND documento_label='segurado'");
$contar_segurado = mysql_num_rows($sel_doc_2);
#Para quando nenhum documento for enviado;
if($contar_segurado < '1'){
$erro[] = 'CNH, CPF e/ou RG';
}else{
#Para quando somente o CPF ter sido enviado, que neste caso se torna obrigatório.
if(...){
$erro[] = 'Faltando o RG';
}
}
#OU FORA?
#Para quando somente o CPF ter sido enviado, que neste caso se torna obrigatório.
if(...){
$erro[] = 'Faltando o RG';
}
Esta função de verificar os erros implica no avanço do utilizador no sistema, sem os documentos ele fica impedido de finalizar a negociação.
Fica meio complicado falar se existe uma forma mais simplificada pois não conheço a lógica completa de seu sistema, mas há alguns pontos que eu verifiquei.
1. O mysql_num_rows retorna um int e você está comparando com uma string. O correto mesmo seria você utilizar algo semelhante a isso:
if($contar_objeto === 0)
Os três iguais (===) comparam se o objeto possui o mesmo valor e o mesmo tipo.
2. A variável erros pode ser substituída pelo tamanho do array.
3. Esse é mais uma dica de lógica. Você faz duas comparações antes de retornar o valor, mas se você passar o $retornar como 'lista_erros' ele irá sair da função já que ela irá encontrar um return, assim não faz sentido usar o else.
4. Se você testar sua função passando o $retornar como 'numero_erros' ela não vai retornar nada, certo? Isso acontece porque você esqueceu do "R" no if está $retorna e não $retornar.
Espero ter ajudado!