Jump to content

Validar Documentos


John Hebert Trindade

Recommended Posts

Bom dia,

Tenho uma função para validar se os documentos já foram cadastrado com outro técnico. 

Mas preciso verificar o tipo do documento e o número do documento e ignorando o proprio id.

Mas preciso que tudo seja verdadeiro, mas infelizmente não devolve resultado. O que errei?

public function validateDocuments(int $tipodoc, string $docIdentify, string $paisnif, string $nif, bool|null $edit = null, int|null $id = null): void
  {
    $this->tipodoc = $tipodoc;
    $this->docIdentify = $docIdentify;
    $this->paisnif = $paisnif;
    $this->nif = $nif;
    $this->edit = $edit;
    $this->id = $id;

    $verifyDocuments = new \App\adms\helpers\AdmsRead();
    if (($this->edit == true) and (!empty($this->id))) {
      $verifyDocuments->fullRead("SELECT id FROM adms_tecnicos WHERE (tipodoc=:tipodoc AND numero_doc=:numero_doc AND paisnif=:paisnif AND nif=:nif AND id <>:id) LIMIT :limit", "tipodoc={$this->tipodoc}&numero_doc={$this->docIdentify}&paisnif={$this->paisnif}&nif={$this->nif}&id={$this->id}&limit=1");
    } else {
      $verifyDocuments->fullRead("SELECT id FROM adms_tecnicos WHERE id =:id LIMIT :limit", "id={$this->id}&limit=1");
    }

    $this->resultBd = $verifyDocuments->getResult();

    if (!$this->resultBd) {
      $this->result = true;
    } else {
      $this->utils->setSessionMsg('Erro: Técnico já cadastrado, por favor verifique!', 'danger');
      $this->result = false;
    }
  }

 

Link to comment
Share on other sites

Quando executa o script, entra no if que pretendes?

Já tentaste executar o query diretamente no SQL sem ser via PHP? Ou ver a query string que é gerada pelo PHP e executar diretamente?

Ás vezes pode ser um detalhe na query que não recebe uma variável, ou mesmo um typo visto que o método fullRead é só strings, existem margem para erro.

 

Se nada resultar, avisa.

Feito é melhor que perfeito

Link to comment
Share on other sites

Este é o metodo fullRead

public function fullRead(string $query, string|null $parseString = null): void
    {
        $this->select = $query;
        if (!empty($parseString)) {
            $pairs = explode('&', $parseString);
            foreach ($pairs as $pair) {
                list($key, $value) = explode('=', $pair);
                $this->values[$key] = $value;
            }
        }

        $this->exeInstruction();
    }

Se eu coloco somente um campo dá certo, seja o numero do documento ou o tipo.

Exemplo:

$verifyDocuments->fullRead("SELECT id FROM adms_tecnicos WHERE numero_doc=:numero_doc AND id <>:id) LIMIT :limit", "numero_doc={$this->docIdentify}&id={$this->id}&limit=1");
    

 

Link to comment
Share on other sites

Fiz a mesma pesquisa directo no sql e deu certo, como eu transformo-a da forma que preciso?

SELECT *  FROM `adms_tecnicos` WHERE `id` != 2 AND `adms_tipo_doc_id` = 3 AND `numero_doc` LIKE '82Q8J1A23B2' AND `nif_pais` LIKE 'PT' AND `numero_nif` LIKE '234.901.477' ORDER BY `adms_nacionalidade_id` ASC

 

Edited by John Hebert Trindade
Link to comment
Share on other sites

Deixo aqui a forma correcta do select, o restante esta a funcionar correctamente.

 "SELECT id FROM adms_tecnicos WHERE (adms_tipo_doc_id=:tipodoc AND numero_doc=:numero_doc) OR (nif_pais=:paisnif AND numero_nif=:nif) AND id <>:id
                                  LIMIT :limit",
        "tipodoc={$this->tipodoc}&numero_doc={$this->docIdentify}&paisnif={$this->paisnif}&nif={$this->nif}&id={$this->id}&limit=1"
      );

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.