Ir para conteúdo
lendadomato

Montar Array fora do laço vindo do banco de dados

Recommended Posts

Olá pessoal,

 

estou precisando montar um array fora do laço de uma consulta vinda do banco de dados, segue o formato do array que tenho:

 

var feriado=new Array();
feriado['25/12/2017']='25/12/2017';
feriado['1/1/2018']='1/1/2018';
feriado['13/2/2018']='13/2/2018';
feriado['30/3/2018']='30/3/2018';
feriado['1/4/2018']='1/4/2018';
feriado['21/4/2018']='21/4/2018';
feriado['1/5/2018']='1/5/2018';
feriado['31/5/2018']='31/5/2018';
feriado['7/9/2018']='7/9/2018';
feriado['12/10/2018']='12/10/2018';
feriado['2/11/2018']='2/11/2018';
feriado['15/11/2018']='15/11/2018';
feriado['25/12/2018']='25/12/2018';

com esse array eu faço uma comparação que funciona da seguinte maneira:
 

if ((numerodasemana === 0) || (numerodasemana === 1) || (datacalendario === feriado[datacalendario])) {
            return true;
        } else {
            return false;
        }

mas só que eu queria substituir esses dados por dados vindos do banco de dados, segue a consulta:

$.ajax({
        data: 'idatendente='+idatendente,
	    type:'post',		//Definimos o método HTTP usado
	    dataType: 'json',	//Definimos o tipo de retorno
		url: 'listar-datas.php',//Definindo o arquivo onde serão buscados os dados
    success: function(dados){
      		  $.each(dados, function(i, obj){
				 feriado = obj.data;

			  })
    }
}); 

 Desde já agradeço a ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu acho que ficou confuso o que quero, na verdade eu preciso desabilitar datas

do calendário do framework7, o atendente precisa desabilitar as datas que não poderá atender

por exemplo: feriado municipal, licença doença, maternidade e outros motivos. Segue o código completo

que desabilita datas do calendário:

var calendarDateFormat = fw7.calendar({
    input: '#calendario',
            dateFormat: 'DD, dia dd de MM',
            minDate: ontem,
// desabilita as datas informadas
            disabled: function(date){  
// formata a data
var numerodasemana= date.getDay();            
var dia= date.getDate();
var mes= date.getMonth() +1;
var ano= date.getFullYear();
var datacalendario = dia+'/'+mes+'/'+ano;

// início consulta que busca as datas gravadas no banco
var idatendente = "10";
$.ajax({
        data: 'idatendente='+idatendente,
	    type:'post',		//Definimos o método HTTP usado
	    dataType: 'json',	//Definimos o tipo de retorno
		url: 'model/Cadastros/Calendario/listar-datas.php',//Definindo o arquivo onde serão buscados os dados
        success: function(dados){
        $.each(dados, function(i, obj){
				 feriado = obj.data;
			  }) 
    },
});
// fim consulta que busca as datas no banco

// array com as datas setadas na mão
var feriado=new Array();
feriado['25/12/2017']='25/12/2017';
feriado['1/1/2018']='1/1/2018';
feriado['13/2/2018']='13/2/2018';
feriado['30/3/2018']='30/3/2018';
feriado['1/4/2018']='1/4/2018';
feriado['21/4/2018']='21/4/2018';
feriado['1/5/2018']='1/5/2018';
feriado['31/5/2018']='31/5/2018';
feriado['7/9/2018']='7/9/2018';
feriado['12/10/2018']='12/10/2018';
feriado['2/11/2018']='2/11/2018';
feriado['15/11/2018']='15/11/2018';
feriado['25/12/2018']='25/12/2018';

// faz a comparação para desabilitar as datas
// aqui eu faço a comparação do dia 0 e a que são domingo e segunda-feira
// e comparo as datas do array que são feriados
if ((numerodasemana === 0) || (numerodasemana === 1) || (datacalendario === feriado[datacalendario])) { 
            return true;
        }else{
            return false;
        }
            },
});

Os valores 0 e 1 representam todos os domingos e segunda-feira de todos os meses que também serão buscados no banco.

vou colocar outro dia qualquer inserido no banco para desabilitar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal,

fiz uma coisa muito doida, para no mínimo mostrar as datas junto com o datepicker ao clicar foi

fazer isso:

// início consulta que busca as datas gravadas no banco
var idatendente = "10";
$.ajax({
        data: 'idatendente='+idatendente,
	    type:'post',		//Definimos o método HTTP usado
	    dataType: 'json',	//Definimos o tipo de retorno
		url: 'model/Cadastros/Calendario/listar-datas.php',//Definindo o arquivo onde serão buscados os dados
        success: function(dados){
     
     if (dados.length > 0){	
			  var optionferiado = '';
			  $.each(dados, function(i, obj){
				  optionferiado += '<option value="'+obj.data+'">'+obj.data+'</option>';
			  })
		   }
      $('#selectferiado').html(optionferiado).show();
      

    }
});

$('#seletcdatas').html('<div class="content-block-title">pesquisar</div><ul>'+
    '<li>'+
            '<div class="item-content">'+
              '<div class="item-inner">'+
                '<div class="item-input">'+
                  '<select id="selectferiado"></select>'+
                '</div>'+
              '</div>'+
            '</div>'+
    '</li>'+
'</ul>');

$('#seletcdatas').html('<p id="selectferiado"></p>');
// fim consulta que busca as datas no banco

e no html:

<div class="list-block" id="seletcdatas"></div>

agora como faço para pegar esses valores do select e jogar na comparação dentro do datepicker?

if ((numerodasemana === 0) || (numerodasemana === 1) || (datacalendario === feriado[datacalendario])) { 
            return true;
        }else{
            return false;
        }
            },

o projeto parou por esse motivo e preciso muito de uma ajuda, até mesmo uma ideia

diferente desta que tenho e que funcione, agradeço a ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dessa forma com variável global retorna apenas um registro.

success: function(dados){
     if (dados.length > 0){	
			 $.each(dados, function(i, obj){
				  diaferiado = obj.dataferiado;
			})
		  }
alert(diaferiado);
}

Consulta no banco:

    $qry = mysqli_query($con, "SELECT * FROM calendario where idatendente='$idatendente'");    
    while($resultado = mysqli_fetch_assoc($qry)){
        $vetor[] = array_map('utf8_encode', $resultado); 
    }    
//Passando vetor em forma de json
    echo json_encode($vetor);

Será que há alguma maneira de retornar esses dados como uma string e com um determinado formato em bloco?

Assim eu separo os dados com um split e faço a comparação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, consegui em parte. Gravei no banco as datas separadas com vírgula

e depois a comparação e funcionou:

var idatendente = "10";
$.ajax({
        data: 'idatendente='+idatendente,
	    type:'post',		//Definimos o método HTTP usado
	    dataType: 'json',	//Definimos o tipo de retorno
		url: 'model/Cadastros/Calendario/listar-datas.php',//Definindo o arquivo onde serão buscados os dados
        success: function(dados){
     if (dados.length > 0){	
			 $.each(dados, function(i, obj){
				  diaferiado = (obj.dataferiado).split(',');
			})
		  }
}
});


// faz a comparacao
if ((numerodasemana === 0) || (numerodasemana === 1) || (diaferiado.indexOf(datacalendario) != -1)) { 
            return true;
        }else{
            return false;
        }

Senhor Moderador, por favor deixe este post em aberto caso alguém tenha a solução

e possa me ajudar na opção anterior, pois sei que terei muito trabalho para gravar novas datas

e remover datas antigas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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

  • Conteúdo Similar

    • Por lendadomato
      Pessoal,
       
      tenho uma aplicação que funcionava há muitos anos sem problemas, mas percebi que o meu servidor atualizou o PHP 5
      para PHP 7 sem me comunicar. Tenho uma função que contém alguns arrays e essa função parou de funcionar após a atualização.
      Gostaria saber se esse conjunto de arrays funciona dessa forma no PHP 7:
      $msg = array ( 'title' => 'Novo pedido', 'body' => $endereco, 'sound' => 'default' ); $fields = array ( 'to' => $tokenempresa, 'notification' => $msg ); $headers = array ( 'Authorization: key=' . API_ACCESS_KEY, 'Content-Type: application/json' ); Não entendo muito de PHP e não sei se esse código está correto.
       
    • Por gersonab
      há tempos utilizo para cadastrar data no BD a instrução :
      implode('-',array_reverse(explode('/',$data)))
      com isso no input posso colocar 09/02/2019 e no banco de dados grava 2019-02-09 , até ai sem problemas, porém ao atualizar um sistema para pdo, estou com problema no insert dinâmico, onde posso fazer 1 ou mais inserts, da forma abaixo cadastro quantos eu quiser :
      $sql = "INSERT INTO cantos ( id_t, id_c, data, ca, cant, po, des) VALUES (:id_t, :id_c, :data, :ca, :cant, :po, :des)";              $stmt = $pdo->prepare($sql);             foreach($_POST['idp'] as $indice => $valor) {             $stmt->bindParam(':id_t', $_POST['id_tor'][$indice], PDO::PARAM_STR);             $stmt->bindParam(':id_c', $_POST['idp'][$indice], PDO::PARAM_STR);             $stmt->bindParam(':data', $_POST['data'][$indice], PDO::PARAM_STR);             $stmt->bindParam(':ca', $_POST["ca"][$indice], PDO::PARAM_STR);             $stmt->bindParam(':cant', $_POST['cant'][$indice], PDO::PARAM_STR);             $stmt->bindParam(':po', $_POST['po'][$indice], PDO::PARAM_STR);             $stmt->bindParam(':des', $_POST['des'][$indice], PDO::PARAM_STR);                              if ($stmt->execute()){                     echo "Cadastrado com sucesso.";             }
      no entento a data vai no formato do input 09/02/2019.
      caso utilize :
      $stmt->bindParam(':data', implode('-',array_reverse(explode('/',$_POST['data'][$indice]))), PDO::PARAM_STR);
      tenho o erro Strict standards: "Only variables should be passed by reference in "que significa "Apenas as variáveis podem ser passadas por referência"
      qual a melhor forma de se fazer neste caso ?
    • Por alyssonw2silva
      Sou novo aqui e estou com o seguinte código 
      function buscar($query) { include_once 'conn.php'; if ($resulte2 = mysqli_query($conn, $query)) { while($row2 = mysqli_fetch_array($resulte2)) { print "<option value='".$row2[0]."'>".$row2[1]."</option>"; }; }; ele e para preencher os campos do meu select está funcionando mas como tenho outro select o primeiro roda agora o segundo da erro quando eu desabilito o primeiro  o segundo select e preenchido 
       
      estou chamando a mesma função para ambos os selects mas o parâmetro $query e diferente 
       
    • Por Patricia_W
      Olá!
       
      Estou precisando armazenar endereços (completos.. cep, logradouro, numero, cidade, estado..) do Brasil mas também do exterior.
      Como a estrutura de endereçamento é diferente de um país para o outro, como poderia ser feita uma modelagem que armazenasse estes dados sem que fosse necessário criar um conjunto para dados nacionais e outro para dados internacionais?
       
      Obrigada =)
    • Por WictorP
      Olá, tudo bem? Eu espero que esteja!
       
      Estou com um pequeno problema em uma medida de segurança que estou fazendo, acho que vocês podem me ajudar.
       
      Estou tentando criar uma defesa global de todos os valores obtidos através de formulários, ao qual o usuário irá preencher, ou seja, uma pequena defesa contra SQLInjection.
      Sei que isto está longe de resolver o problema, mas acho que é só o que precisa para um projeto de pequeno porte.
      Para esta segurança eu pego tudo que vem por $_POST e passo na função addslashes e verifico se é uma string. Este método funciona, porém tem um defeito.
      Eu também trabalho com envio de Arrays no formulário, e para que a função addslashes funcione, todas as variáveis passadas pelo $_POST deve ser uma string (basicamente todo conteúdo não array de um formulário pode ser tratado como string, até as que contém só números).
       
      Tentei fazer uma verificação nesta função, que caso seja array, ele não faz essa adesão do addslashes e passa o array cru que será tratado mais pra frente na página que o requisitar, porém, não consigo fazer esta verificação com o is_array(), o IF passa como se fosse outra coisa e trata como se fosse string normal.
       
      Segue o código:

              $formulario = $_POST;         foreach($formulario AS $key => $valor) {             if(is_array($_POST[$key])) {                 $_POST[$key] = $_POST[$key];             }else {                 $_POST[$key] = filter_var(addslashes($_POST[$key]), FILTER_SANITIZE_STRING);             }         }
       
      Espero que possam me dar uma luz referente à isto.
      Grato, Wictor Pamplona.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.