Pesquisar na Comunidade
Mostrando resultados para as tags ''POO''.
Encontrado 8 registros
-
Bom dia, Preciso de ajuda ajuda para resolver o problema de SIGSEGV, basicamente tennho um zconection dentro de uma classe e recebo erro quando tento acessá-lo. Segue um trecho da classe: unit unt_classconexao; {$mode objfpc}{$H+} interface uses Classes, SysUtils, ZConnection, ZDataset; type { tConexao } tConexao = class private public vConector : TZConnection; function Listar_Usuarios:TZReadOnlyQuery; procedure Conectar_Banco; end; implementation { tConexao } function tConexao.Listar_Usuarios: TZReadOnlyQuery; var zrquery : TZReadOnlyQuery; begin Conectar_Banco; try zrquery := TZReadOnlyQuery.Create(nil); zrquery.Connection := vConector; zrquery.SQL.Clear; zrquery.SQL.Text := 'SELECT * from tbl_profissionais'; zrquery.Open; Listar_Usuarios := zrquery; finally end; end; procedure tConexao.Conectar_Banco; begin //vConector := TZConnection.Create(nil); vConector.HostName := 'localhost'; vConector.Port := 3306; vConector.Database := 'Caps'; vConector.Protocol := 'mysql-5'; vConector.User := 'root'; vConector.Password := ''; vConector.Connected := true; end; end. Após isso tento fazer uso dessa classe para popular um DBGrid: unit unt_frmprincipal; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DB, Forms, Controls, Graphics, Dialogs, Menus, DBGrids, ZConnection, unt_classconexao; type { Tfrm_principal } Tfrm_principal = class(TForm) DataSource1: TDataSource; DBGrid1: TDBGrid; MainMenu_frmPrincipal: TMainMenu; MenuItem_AplicativoSair: TMenuItem; N1: TMenuItem; MenuItem_AplicativoLogin: TMenuItem; MenuItem_Aplicativo: TMenuItem; procedure MenuItem_AplicativoLoginClick(Sender: TObject); private public vConexao : tConexao; end; var frm_principal: Tfrm_principal; implementation {$R *.lfm} { Tfrm_principal } procedure Tfrm_principal.MenuItem_AplicativoLoginClick(Sender: TObject); begin //vConexao := tConexao.Create; DataSource1.DataSet := vConexao.Listar_Usuarios; end; end. A mensagem de erro que recebo dá a entender que o problema ocorre logo que o zconnection começa a ser configurado, como vocês podem ver pelos trechos comentados eu tentei instanciar o componente também sem sucesso. Não tenho experiencia com POO e tenho certeza que estou cometendo um erro bobo, então peço uma explicação sobre como resolver isso. Agradeço de antemão a quem puder me ajudar. PS. Estou usando o Lazarus.
-
Boa tarde a todos, Estou estudando MVC e me deparei com a seguinte situação: Tenho uma View que precisa receber dados de dois Models diferentes, então no controller desta View eu tenho a função abaixo: public function teste($id) { $this->view->a = $this->getOneA($id); $this->loadModel('b'); $this->view->b = $this->model->getOneB($id); $this->view->render('app/teste'); } O cenário acima me retorna o esperado, pega os dados de A e de B e os deixa disponiveis para a View. Está correto utilizar esse método ? Se sim, eu deveria carregar o Model "b" no __construct do controller "a" ou diretamente na função do controller "a" como neste exemplo? Se não, qual a melhor maneira de obter dados de diferentes Models? OBS: todos os controllers são filhos do controller principal e todos os models são filhos do model principal. E me perdoem se eu estiver falando bobagem, como disse, estou aprendendo e a finalidade aqui é didatica e agradeço a quem puder contribuir.
-
Como executar uma classe ou ação somente apos todo o upload ser finalizado?
unset postou um tópico no fórum PHP
Olá, uma dúvida tenho uma classe que faz upload de imagens e cadastra no banco, como eu faço para executar uma outra classe ação função etc somente apos verificar que todo o upload dos arquivos foi realizado com sucesso? -
Boa noite, galera é o seguinte eu estou montando um script que pesquisa no banco de dados e mostrar os resultados em uma página php, bem aí que está o problema eu pesquisei alguns sistemas de paginação e de pesquisa e acabei montando meu script, no meu script a pesquisa aparece na primeira página mas quando passo para a página adiante não me é mostrado resultado nenhum já verifiquei tudo e não consigo encontrar o erro, será que alguém pode me ajudar? <?php #Incluindo a conexão no banco de dados require_once '../dao/conexao/Conexao.php'; $conexao = Conexao::getInstance(); /***********************************************/ #Aqui começa a parte a paginação e pesquisa /**********************************************/ #Limitando o número máximo de resultados que serão mostrados na tela $maximo = 1; #Armazenando o valor da página atual $pagina = isset($_GET["pagina"])? ($_GET["pagina"]): '1'; #Subtraindo 1, porque os registro começam do zero como em um array $inicio = $pagina - 1; #Multiplicamos a quantidade de registros da pagina pelo valor da pagina atual $inicio = $maximo * $inicio; #Agora chega a parte em que fazemos o SELECT para contar os resultados $sql = "SELECT * FROM centroautomotivo"; $stmt = $conexao->prepare($sql); $stmt->execute(); $contagem = $stmt->fetchAll(PDO::FETCH_ASSOC); $total = 0; if(count($contagem)){ foreach ($contagem as $linhas) { #Armazenando o total de registros da tabela para fazer a paginação $total = count($contagem); } } /******************************************************************* * Aqui vai começar a parte da pesquisa, tornando o script em um só ********************************************************************/ #Recebe o termo da pesquisa se existir $termo = (isset($_GET["termo"])) ? ($_GET["termo"]) : ''; #Executa uma pesquisa com o termo pesquisado como parametro - Este SELECT irá servir também para a paginação if(empty($termo)){ //Nada aqui } else{ $sql = "SELECT * FROM centroautomotivo WHERE nomefantasia LIKE :nomefantasia or email LIKE :email ORDER BY idCentro LIMIT $inicio,$maximo"; $stm = $conexao->prepare($sql); $stm->bindValue(':nomefantasia', '%'.$termo.'%'); $stm->bindValue(':email', '%'.$termo.'%'); $stm->execute(); $autocenters = $stm->fetchAll(PDO::FETCH_ASSOC); } <?php require_once '../includes/header.php'; require_once '../controller/paginacaoPesquisaCentro.php'; ?> <div class="container mb-5"> <h1 class="text text-center">Centros Automotivos</h1> <p class="text text-center">Encontre o centro automotivo que mais se encaixa com você</p> <!--Formulário de pesquisa com paginação--> <form method="GET" action=""> <div class="d-flex flex-column bd-highlight mb-3"> <div class="p-2 bd-highlight"><img src="../img/Logotipo.png" class=" img-fluid rounded mx-auto d-block"></div> <div class="p-2 bd-highlight d-flex justify-content-center" style="margin-top: -10px;"><input type="text" name="termo" class="form-control" style=" width: 60%;" placeholder="Pesquise pelo Centro Automotivo!"/></div> <div class="p-2 bd-highlight d-flex justify-content-center"><button type="submit" class="btn btn-outline-primary"><i class="fas fa-search"></i> Pesquisar</button></div> </div> </form> <!--Fim do formuláio de pesquisa--> <!--Início dos resultados da pesquisa--> <?php if(!empty($autocenters)){?> <?php foreach ($autocenters as $autocenter) { ?> <center> <div class="card mb-3" style="max-width: 540px;"> <div class="row no-gutters"> <div class="col-md-4"> <img src="../controller<?php empty($autocenter["foto"])? 'images/pic.png' : $autocenter["foto"] ?>" class="card-img img-fluid" width="150px" height="150px"> </div> <div class="col-md-8"> <div class="card-body"> <p class="card-text text-justify"><?php $autocenter["nomefantasia"]?></p> <p class="card-text text-justify"><small class="text-muted"><?=$autocenter["email"]?></small></p> </div> </div> </div> </div> </center> <?php }//Fechamento do foreach?> <div id="alignpaginacao"> <?php //determina de quantos em quantos links serão adicionados e removidos $max_links = 6; //dados para os botões $previous = $pagina - 1; $next = $pagina + 1; //usa uma funcção "ceil" para arrendondar o numero pra cima, ex 1,01 será 2 $pgs = ceil($total / $maximo); //se a tabela não for vazia, adiciona os botões if($pgs > 1 ){ echo "<br/>"; //botao anterior if($previous > 0){ echo "<div id='botaoanterior'><a href=".$_SERVER['PHP_SELF']."?termo={$termo}?pagina=$previous><input type='submit' name='bt-enviar' id='bt-enviar' value='Anterior' class='button' /></a></div>"; } else{ echo "<div id='botaoanteriorDis'><a href=".$_SERVER['PHP_SELF']."?pagina=$previous><input type='submit' name='bt-enviar' id='bt-enviar' value='Anterior' class='button' disabled='disabled'/></a></div>"; } echo "<div id='numpaginacao'>"; for($i=$pagina-$max_links; $i <= $pgs-1; $i++) { if ($i <= 0){ //enquanto for negativo, não faz nada }else{ //senão adiciona os links para outra pagina if($i != $pagina){ if($i == $pgs){ //se for o final da pagina, coloca tres pontinhos echo "<a href=".$_SERVER['PHP_SELF']."?pagina=".($i).">$i</a> ..."; }else{ echo "<a href=".$_SERVER['PHP_SELF']."?pagina=".($i).">$i</a>"; } } else{ if($i == $pgs){ //se for o final da pagina, coloca tres pontinhos echo "<span class='current'> ".$i."</span> ..."; }else{ echo "<span class='current'> ".$i."</span>"; } } } } echo "</div>"; //botao proximo if($next <= $pgs){ echo " <div id='botaoprox'><a href=".$_SERVER['PHP_SELF']."?termo={$termo}?pagina=$next><input type='submit' name='bt-enviar' id='bt-enviar' value='Proxima' class='button'/></a></div>"; }else{ echo " <div id='botaoproxDis'><a href=".$_SERVER['PHP_SELF']."?pagina=$next><input type='submit' name='bt-enviar' id='bt-enviar' value='Proxima' class='button' disabled='disabled'/></a></div>"; } } ?> </div> <?php }//Fechamento do if?> <!--Fim dos resultados da pesquisa--> <!--Início da paginação--> <!--Fim da paginação--> </div> <?php require_once '../includes/footer.php'; ?> Bem aí está meu código, fico muito agradecido se puderem me ajudar.
-
Acessar um array pegando seu índice dentro de uma classe através de outra página no PHP
Jeovane Carvalho postou um tópico no fórum PHP
Olá pessoal, estou precisando de um help ! Pois eu tenho uma classe assim: DadosComboClasse.php class DadosComboCidades { private $conecta_banco; public function __construct(){ $this->conecta_banco= new Conexao(); $this->conecta_banco->Conectar(); } public $array = array(); public $imoveis_tipo; public $cidade; public $bairro; public $bairro_id2; public $idcidade; public $negocios; public $qtd; public $bairro_id; public $id_cidade; public $id_tipo; public $id_bairro; public $nome_empresa_2; public $nome_empresa_3; public $nome_empresa_4; public $nome_empresa_5; public $titulo_cadastro; public $creci; public $facebook; public $twitter; public $linha_b; public $sloga; public $site; public $sqlT_1; public $sqlT_2; public $sqlT_3; public $sqlT_4; public $row; public $id='1'; function BuscarCidades(){ $result=$this->conecta_banco->banco; $pega_cidade=new ComboCidades();=> instancio os ids ou arrays quando são requisitados tipo assim : finalidade ID:1 Tipo ID:3,9 (array) $pega_cidade->PegarCidadeId(); $ativo='1'; ARRAYS ABAIXO: $this->id_negocio=$pega_cidade->id_negocio; $this->id_tipo=$this->id_cidade=$pega_cidade->id_tipo; $this->id_cidade=$pega_cidade->id_cidade; Acima eu pego os dados do array vindo da pagina combo_cidades.php if($pega_cidade->id_negocio): $negocio_array = explode(",",$pega_cidade->id_negocio); if($pega_cidade->id_tipo): $tipos_array = explode(",", $pega_cidade->id_tipo); if($pega_cidade->id_cidade): $cidades_array = explode(",", $pega_cidade->id_cidade); foreach($negocio_array as $negocio): foreach($tipos_array as $tipos): foreach($cidades_array as $cidades): $sqlT_1 = $result->prepare("SELECT i.id,t.tipo_nome,c.cidade,b.bairro,i.ativo FROM imoveis i LEFT JOIN imoveis_tipo t ON (t.id = i.id_tipo_imovel) LEFT JOIN cidades c ON (c.id = i.id_cidade)LEFT JOIN bairros b ON (b.id = i.bairro) WHERE i.id_tipo_imovel IN ('".$tipos."') AND i.id_cidade IN ('".$cidades."') AND i.ativo=? ORDER BY i.bairro DESC"); $sqlT_1->bind_param('s',$ativo); $sqlT_1->execute(); $this->sqlT_1=$sqlT_1->get_result(); Acima com get_result eu gero os dados que preciso do array abaixo são outras chamadas do sql que vou implementar na solução acima $sqlT_2=$result->prepare("SELECT id, bairro,ativo FROM bairros WHERE id AND ativo=? ORDER BY bairro"); $sqlT_2->bind_param('s',$ativo); $sqlT_2->execute(); $this->sqlT_2=$sqlT_2->get_result(); "'%".$negocio."%'"; $where = " i.ativo =? "; if( $negocio) { $where .="AND i.id_negocio_tipo LIKE ?"; }if( $tipos ) { $where .=" AND i.id_tipo_imovel IN ('".$tipos."')"; } if( $cidades ) { $where .=" AND i.id_cidade IN ('".$cidades."')"; } if($this->bairro_id2) { $where .=" AND i.bairro IN ('".$this->bairro_id2."')"; } $sqlT_3 = $result->prepare("SELECT i.id,i.ativo,n.tipo,b.bairro,t.tipo_nome,c.cidade,i.id_negocio_tipo, COUNT(b.bairro) AS Qtd FROM imoveis i LEFT JOIN negocio_tipo n ON (n.id= i.id_negocio_tipo) LEFT JOIN imoveis_tipo t ON (t.id = i.id_tipo_imovel) LEFT JOIN cidades c ON (c.id = i.id_cidade) LEFT JOIN bairros b ON (b.id = i.bairro) WHERE ".$where." GROUP BY b.bairro HAVING COUNT( b.bairro) > 0 ORDER BY b.bairro "); //EXECUTA A QUERY $conta=$sqlT_3->num_rows(); $sqlT_3->bind_param('ss',$ativo,$negocio); $sqlT_3->execute(); $this->sqlT_3=$sqlT_3->get_result(); endforeach; endforeach; endforeach; endif; endif; endif; } } Abaixo a classe combocidades.php require_once("tags2.php"); //RECEBE PARÃMETRO class ComboCidades{ private $conecta_banco; public function __construct(){ $this->conecta_banco= new Conexao(); $this->conecta_banco->Conectar(); } public $id_negocio; public $id_tipo; public $busca_cidade; public $id_cidade; public function PegarCidadeId(){ function filter( $str ){ return addslashes( $str ); } function getPost( $key ){ return isset( $_GET[ $key ] ) ? filter( $_GET[ $key ] ) : null; } $this->id_negocio = getPost('id_negocio'); $this->id_tipo = getPost('id_tipo'); $this->id_cidade=getPost('id_cidade'); } } class ExibirBairros extends DadosComboCidades{ public function Mostrar(){ extract( $_GET, EXTR_OVERWRITE); $busca_bairro=new DadosComboCidades(); $busca_bairro->BuscarCidades(); $busca_bairro->id_cidade; if($busca_bairro->id_cidade==0): echo "<div class='atencao'></div><div class='atencao_text'>Selecione uma Cidade para pesquisar por Bairros !</div> "."<br />"; endif; echo "<div class='sel'></div>"."<br />"; /* MONTA CRITERIOS DE BUSCA */ //QUERY echo '<br /><div class="botao-modal"><button type="button" class="botao_marcar" title="Todos" id="todos" onclick="marcardesmarcar();">Selecionar Todos</button> </div>'; Aqui onde chamo os array já convertidos pelo foreach na classe DadosComboCidades.php echo'<br /><br /><div style=" font-weight:bold; margin-left:30px;">'.$busca_bairro->imoveis_tipo.' (s) </div>'; echo'<br /><br /><div style=" font-weight:bold; margin-left:30px;">'.$busca_bairro->cidade.'</div>'; echo'<div class="form_modal"><form name="form1">'.'<br /><br />'; echo '<input type="checkbox" id="c'.$bairro.'" class="marcar" value="'.$bairro_id.'" name="bairro[]"/><label for="c'.$bairro_id.'"><span></span></label> '.$bairro.' - '.$cidade.' ('.$qtd.') <br />'; //FECHA IF (row) //PRINTA O RESULTADO if($bairro_id): echo FALSE; else: echo "<div class='atencao'></div><div class='atencao_text'>Não existem imóveis para essa Busca !</div> "."<br />"; echo'</form></div></b><br />'; endif; } } Abaixo onde istancio e chamo a classe DadosComboCidades $f=new ExibirBairros(); $f->Mostrar(); RESUMINDO: O que acontece é que eu não consigo pegar o array no seu índice, ou seja , por exemplo se o id tipo for ID: 1 rola beleza a busca e a impressão dos dados mas se eu for buscar 2 informações no mesmo id tipo , assim => ID: array(5,9) , na outra página só consigo pegar o último id em vez de buscar 5,9 só busca o 9, por eu estar acessando o array de outra página , e pelo que entendi , acessando o array de outra página ele só percorre o último em vez do índice. Mas se eu jogar todo código dentro da classe ai roda beleza , mas não quero misturar objeto com html (isso é má prática na programação), por isso estou remodelando meu código em POO Se alguém tiver uma solução eu agradeço . :) -
bom dia galera, estou usando Vue js com poo, o problema que estou tendo é que eu não estou conseguindo entender de como passar para o button o id para exclusao, segue abaixo a onde eu parei. index.php <div id="modalMostrar"> <div id="descricoes" class="scroll"> <div class="card" v-for="descricao in descricoes"> <div class="card-header"> <h3 class="card-title">{{descricao.desc_data}}</h3> </div> <div class="card-body"> {{descricao.descricao}} <a class="fa fa-times btn btn-danger right ml3" id="removerRegistro" v-bind:data-codigo="descricao.cli_id"></a> <button class="fa fa-edit btn btn-primary right"></button> </div> </div> </div> </div> script.js //exibir registro------- $(document).on('click', '#abrirModal', function(event){ event.preventDefault(); var id = $(this).attr('data-id')//pegando id window.desc = new Vue({ el: '#descricoes', data: { descricoes: [] } }); $.ajax({ url: 'ajax/clienteDescricao.php?id=' + id, type: 'GET', dataType: 'JSON' }).done((e) => { desc.descricoes = e; }) $('#modalMostrar').iziModal('open'); }); //remover Registro--------------------------------------------- $(document).on('click', '#removerRegistro', function(event){ event.preventDefault(); var id = $(this).data('codigo');//pegando id window.desc = new Vue({ el: '#descricoes', data: { descricoes: [] } }); $.ajax({ url: 'ajax/removerRegistro.php?id=' + id, type: 'GET', dataType: 'JSON' }).done((e) => { desc.descricoes = e; }) }); removerRegistro.php <?php require_once "../database/conexao.php"; if(isset($_GET["id"]) && !empty($_GET["id"])){ $conex = new conexao(); echo json_encode($conex->deleteDesc($_GET["id"])); } conexao.php public function deleteDesc($cli_id){ $sql = $this->conexao->prepare("DELETE FROM descricao WHERE cli_id = :cli_id"); $sql->bindValue(':cli_id', $cli_id); $sql->execute(); } ele não está pegando o id.....
-
Pegar variáveis de um array e enviar dentro do bind_param no sql select usando a cláusula IN (?)
Jeovane Carvalho postou um tópico no fórum PHP
Salve pessoal tudo bem ! Depois de muito tempo venho aqui pedir uma ajuda , bem vamos lá... Eu tenho uma classe POO e nela pego algumas variáveis que vem como array e uso o implode para enviar através do load do javascript. Até aí tranquilo, eu resgato com $_GET usando o explode, e depois uso implode para separar elas novamente. Montei essa rotina toda por se tratar de uma o paginação se reload , bem dinâmica , só que ao passar os parâmetros e as variáveis no bind_param da erro de parâmetros, dizendo que : Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement E entendi que o erro diz que o número de parametros não condiz com o número de variáveis, E AI QUE ENTRA A MINHA DOR DE CABEÇA... Mesmo eu usando implode eu consigo separar as variáveis mas dando um var_dump elas ficam juntas e a execução do prepare lê como uma única variável. Segue o código abaixo: <?php class DadosFiltroBusca { private $conecta_banco; public function __construct(){ $this->conecta_banco= new Conexao(); $this->conecta_banco->Conectar(); } public $ativo; public $negocio ; public $tipo; public $cidade; public $bairro; public $id_negocio; public $id_tipo; public $id_cidade; public $id_bairro; public $foto; public $where; public $sqlT_1; public $sqlT_2; public $total; public $current_page; public $get_total_rows; public $item_per_page; public $total_pages; public $total_records; public $pgst; public $page_number; public $page_position ; public $filtro_dados; public $site; public function BuscarFiltroBusca(){ $result=$this->conecta_banco->banco; $this->item_per_page = 4; if(isset($_POST["page"])){ $this->page_number =(isset($_POST['page'])) ? (int)$_POST['page'] : 1; if(!is_numeric($this->page_number)){die('Página inválida!');} //incase of invalid page number }else{ $this->page_number = 1; //if there's no page number, set it to 1 } $negocio = $_GET['negocio']; $this->id_tipo= explode(",",$_GET['tipo']); $this->id_cidade=explode(",",$_GET['cidade']); $this->id_bairro=explode(",",$_GET['bairro']); $idi=implode('', $this->id_tipo); echo "<br /><br />"; $in=(is_array($this->id_tipo) ? count($this->id_tipo):0); $id_tipo = implode(',', array_fill(0, $in, '?')); echo " :: " . $id_tipo_2 =join('', array_fill(0, 1, $idi)); echo " :: ".$types =str_repeat('s',$in); echo "<br /> VAR:: ".$tipo =str_repeat(''.$id_tipo_2.'',1); var_dump ($tipo ); $idi1='5'; $idi2='11'; foreach ($this->id_cidade as $key=> $id_cidade): foreach ($this->id_bairro as $key=> $id_bairro): $ativo='1'; "%".$negocio."%"; $id_tipo; $id_cidade; $id_bairro; echo "<br /><br />RESULTADO :: ". $t='ss'.$types.'ss',$ativo,$negocio,$tipo ,$id_cidade,$id_bairro."<br /><br />"; $where = " i.ativo =? "; if( $negocio) { $where .="AND i.id_negocio_tipo LIKE ?"; }if( $id_tipo ) { $where .=" AND i.id_tipo_imovel IN ($id_tipo)"; } if( $id_cidade ) { $where .=" AND i.id_cidade=?"; } if($id_bairro) { $where .=" AND i.bairro=?"; } $sqlT_1 =$result->prepare("SELECT i.*, t.tipo_nome, b.bairro, n.tipo, c.cidade FROM imoveis i LEFT JOIN negocio_tipo n ON (n.id = i.id_negocio_tipo) LEFT JOIN imoveis_tipo t ON (t.id = i.id_tipo_imovel) LEFT JOIN cidades c ON (c.id = i.id_cidade) LEFT JOIN bairros b ON (b.id = i.bairro) WHERE ".$where.""); $sqlT_1->bind_param('ss'.$types.'ss',$ativo,$negocio,$tipo ,$id_cidade,$id_bairro); $sqlT_1->execute(); $this->sqlT_1 = $sqlT_1->get_result(); $this->get_total_rows+=$this->sqlT_1->num_rows; if($this->get_total_rows >0 ){ $this->total_pages = ceil($this->get_total_rows / $this->item_per_page); } $this->sqlT_1->num_rows; //break records into pages //get starting position to fetch the records if($this->get_total_rows > 0 ){ $this->page_position = (($this->page_number * $this->item_per_page) -$this->item_per_page); $this->pgst = ceil($this->get_total_rows / $this->item_per_page); } $sqlT_1->close(); endforeach; endforeach; $sqlT_2 =$result->prepare("SELECT i.id, i.valor,i.locacao, i.foto_exibicao,i.latitude,i.longitude, i.quartos, i.garagem,i.mapa, i.codigo, t.tipo_nome, n.tipo AS negocio, c.cidade, c.uf, b.bairro FROM imoveis i LEFT JOIN negocio_tipo n ON (n.id = i.id_negocio_tipo) LEFT JOIN imoveis_tipo t ON (t.id = i.id_tipo_imovel) LEFT JOIN cidades c ON (c.id = i.id_cidade) LEFT JOIN bairros b ON (b.id = i.bairro) WHERE ".$where." ORDER BY i.id DESC LIMIT ?,?"); $sqlT_2->bind_param('sssssss',$ativo,$negocio,$idi,$id_cidade,$id_bairro,$this->page_position,$this->item_per_page); $sqlT_2->execute(); $this->sqlT_2=$sqlT_2->get_result(); } } ?> Vejam no código que existem 2 consultas, um select é para montar a páginação sem reflesh e a outra é para buscar os dados do filtro de busca , e para deixar mais claro, se eu colocar no lugar cláusula IN em vez de IN (?) colocar IN ($variavel ) que já foi separada com o implode ela busca perfeitamente as informações , exemplo abaixo: $where = " i.ativo =? "; if( $negocio) { $where .="AND i.id_negocio_tipo LIKE ?"; }if( $id_tipo ) { $where .=" AND i.id_tipo_imovel IN (?)"; AQUI É AONDE TEM O ARRAY, E AS OUTRAS ESTÃO SEM ARRAYS PARA TESTAR APENAS ESSA VARIÁVEL } if( $id_cidade ) { $where .=" AND i.id_cidade=?"; } if($id_bairro) { $where .=" AND i.bairro=?"; } Acima da aquele erro de; Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement Mas agora logo abaixo vai de boa e forma a paginação e trás os valores: $where = " i.ativo =? "; if( $negocio) { $where .="AND i.id_negocio_tipo LIKE ?"; }if( $id_tipo ) { $where .=" AND i.id_tipo_imovel IN ($id_tipo)"; } if( $id_cidade ) { $where .=" AND i.id_cidade=$id_cidade"; } if($id_bairro) { $where .=" AND i.bairro=$id_bairro"; } E vi que o problema esta aqui abaixo: $sqlT_1->bind_param('ss'.$types.'ss',$ativo,$negocio,AQUI É A VARIÁVEL COM ARRAY -> $tipo ,$id_cidade,$id_bairro); Notem que esta variável dentro dos parâmetros ($types) ela trás o número de parâmetros conforme o critério de busca do filtro de busca, E este parametro como variável eu pego com o str_repeat E se eu montar as variáveis manualmente tipo > $tipo1=15'; e $tipo2='11'; e jogar lá no bind param ela chama de boa tipo assim : $tipo1='15'; $tipo2='11' $sqlT_1->bind_param('ss'.$types.'ss',$ativo,$negocio,$tipo1,$tipo2 ,$id_cidade,$id_bairro); se eu fizer desta forma chama perfeitamente, e vi que o problema é na hora de separar as variáveis do array. Já usei serialize, join, json_decode e nada . Se alguém souber de como contornar agradeço. E desculpe pela imensa explicação , mas é para entederem melhor :) Obrigado !-
- php
- javascript
-
(e mais 2 )
Tags:
-
Olá pessoal! Acredito que alguns daqui do grupo conhece o sistema de Ordens de Serviço MAPOS, que foi desenvolvido em CodeIgniter. Estou fazendo uma alteração nele, para que quando o usuário for receber uma parte de um pagamento do cliente, o restante apareça no cadastro de cliente. Por exemplo: O Cliente X tinha um débito de R$ 500,00. Más no dia Y ele pagou R$ 100,00, restando então R$ 400,00. No Models do Financeiro, fiz essa alteração abaixo na linha do "function edit": <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Financeiro_model extends CI_Model { function __construct() { parent::__construct(); } function get($table,$fields,$where='',$perpage=0,$start=0,$one=false,$array='array'){ $this->db->select($fields); $this->db->from($table); $this->db->order_by('data_vencimento', 'asc'); $this->db->limit($perpage,$start); if($where){ $this->db->where($where); } $query = $this->db->get(); $result = !$one ? $query->result() : $query->row(); return $result; } function getById($id){ $this->db->where('idClientes',$id); $this->db->limit(1); return $this->db->get('clientes')->row(); } function add($table,$data){ $this->db->insert($table, $data); if ($this->db->affected_rows() == '1') { return TRUE; } return FALSE; } function edit($table,$data,$fieldID,$ID){ $this->db->select('clientes.saldoDevedor, lancamentos.clientes_id, lancamentos.valor, lancamentos.idLancamentos'); $this->db->from('lancamentos,clientes'); $this->db->where($fieldID,$ID); $this->db->update($table, $data); if ($this->db->affected_rows() >= 0) { return TRUE; } return FALSE; } function delete($table,$fieldID,$ID){ $this->db->where($fieldID,$ID); $this->db->delete($table); if ($this->db->affected_rows() == '1') { return TRUE; } return FALSE; } function count($table) { return $this->db->count_all($table); } } E no Views do lançamento criei esse campo, dentro do Modal de Editar Lançamento: <div class="span4" style="margin-left: 0"> <label for="valor-pagar">Valor a Receber/Pagar</label> <input type="text" name="tipoPagar" value="" /> <input type="hidden" id="Pagar" name="idPagar" value="" /> </div> E no Controlers na função Editar, alterei com essas informações: Eu so inseri esses comandos que vocês odem olhar no codigo abaixo: public function editar(){ if(!$this->permission-> checkPermission($this->session->userdata('permissao'),'eLancamento')){ $this->session->set_flashdata('error','Você não tem permissão para editar lançamentos.'); redirect(base_url()); } $this->load->library('form_validation'); $this->data['custom_error'] = ''; $urlAtual = $this->input->post('urlAtual'); $this->form_validation->set_rules('descricao', '', 'trim|required|xss_clean'); $this->form_validation->set_rules('fornecedor', '', 'trim|required|xss_clean'); $this->form_validation->set_rules('valor', '', 'trim|required|xss_clean'); $this->form_validation->set_rules('vencimento', '', 'trim|required|xss_clean'); $this->form_validation->set_rules('pagamento', '', 'trim|xss_clean'); if ($this->form_validation->run() == false) { $this->data['custom_error'] = (validation_errors() ? '<div class="form_error">' . validation_errors() . '</div>' : false); } else { $vencimento = $this->input->post('vencimento'); $pagamento = $this->input->post('pagamento'); try { $vencimento = explode('/', $vencimento); $vencimento = $vencimento[2].'-'.$vencimento[1].'-'.$vencimento[0]; $pagamento = explode('/', $pagamento); $pagamento = $pagamento[2].'-'.$pagamento[1].'-'.$pagamento[0]; } catch (Exception $e) { $vencimento = date('Y/m/d'); } $capturaValorTotal = $this->input->post('valor'); $capturaValorPagar = $this->input->post('valor-pagar'); $valorDevido = $capturaValorTotal - $capturaValorPagar; $inserindoBanco = "INSERT INTO `clientes` set `saldoDevedor`='".$valorDevido."'"; $executandoQuery = mysql_query($inserindoBanco); $data = array( 'descricao' => $this->input->post('descricao'), 'valor' => $this->input->post('valor'), 'valor-pagar' => $this->input->post('valor-pagar'), 'data_vencimento' => $vencimento, 'data_pagamento' => $pagamento, 'baixado' => $this->input->post('pago'), 'cliente_fornecedor' => $this->input->post('fornecedor'), 'forma_pgto' => $this->input->post('formaPgto'), 'numCheque' => $this->input->post('numCheque'), 'numCartao' => $this->input->post('numCartao'), 'valCartao' => $this->input->post('valCartao'), 'tipo' => $this->input->post('tipo') ); if ($this->financeiro_model->edit('lancamentos',$data,'idLancamentos',$this->input->post('id')) == TRUE) { $this->session->set_flashdata('success','lançamento editado com sucesso!'); redirect($urlAtual); } else { $this->session->set_flashdata('error','Ocorreu um erro ao tentar editar lançamento!'); redirect($urlAtual); } } $this->session->set_flashdata('error','Ocorreu um erro ao tentar editar lançamento.'); redirect($urlAtual); $data = array( 'descricao' => $this->input->post('descricao'), 'valor' => $this->input->post('valor'), 'data_vencimento' => $this->input->post('vencimento'), 'data_pagamento' => $this->input->post('pagamento'), 'baixado' => $this->input->post('pago'), 'cliente_fornecedor' => set_value('fornecedor'), 'forma_pgto' => $this->input->post('formaPgto'), 'tipo' => $this->input->post('tipo') ); print_r($data); } public function editar(){ if(!$this->permission->checkPermission($this->session->userdata('permissao'),'eLancamento')){ $this->session->set_flashdata('error','Você não tem permissão para editar lançamentos.'); redirect(base_url()); } $this->load->library('form_validation'); $this->data['custom_error'] = ''; $urlAtual = $this->input->post('urlAtual'); $this->form_validation->set_rules('descricao', '', 'trim|required|xss_clean'); $this->form_validation->set_rules('fornecedor', '', 'trim|required|xss_clean'); $this->form_validation->set_rules('valor', '', 'trim|required|xss_clean'); $this->form_validation->set_rules('vencimento', '', 'trim|required|xss_clean'); $this->form_validation->set_rules('pagamento', '', 'trim|xss_clean'); if ($this->form_validation->run() == false) { $this->data['custom_error'] = (validation_errors() ? '<div class="form_error">' . validation_errors() . '</div>' : false); } else { $vencimento = $this->input->post('vencimento'); $pagamento = $this->input->post('pagamento'); try { $vencimento = explode('/', $vencimento); $vencimento = $vencimento[2].'-'.$vencimento[1].'-'.$vencimento[0]; $pagamento = explode('/', $pagamento); $pagamento = $pagamento[2].'-'.$pagamento[1].'-'.$pagamento[0]; } catch (Exception $e) { $vencimento = date('Y/m/d'); } $capturaValorTotal = $this->input->post('valor'); $capturaValorPagar = $this->input->post('valor-pagar'); $valorDevido = $capturaValorTotal - $capturaValorPagar; $inserindoBanco = "INSERT INTO `clientes` set `saldoDevedor`='".$valorDevido."'"; $executandoQuery = mysql_query($inserindoBanco); $data = array( 'descricao' => $this->input->post('descricao'), 'valor' => $this->input->post('valor'), 'valor-pagar' => $this->input->post('valor-pagar'), 'data_vencimento' => $vencimento, 'data_pagamento' => $pagamento, 'baixado' => $this->input->post('pago'), 'cliente_fornecedor' => $this->input->post('fornecedor'), 'forma_pgto' => $this->input->post('formaPgto'), 'numCheque' => $this->input->post('numCheque'), 'numCartao' => $this->input->post('numCartao'), 'valCartao' => $this->input->post('valCartao'), 'tipo' => $this->input->post('tipo') ); if ($this->financeiro_model->edit('lancamentos',$data,'idLancamentos',$this->input->post('id')) == TRUE) { $this->session->set_flashdata('success','lançamento editado com sucesso!'); redirect($urlAtual); } else { $this->session->set_flashdata('error','Ocorreu um erro ao tentar editar lançamento!'); redirect($urlAtual); } } $this->session->set_flashdata('error','Ocorreu um erro ao tentar editar lançamento.'); redirect($urlAtual); $data = array( 'descricao' => $this->input->post('descricao'), 'valor' => $this->input->post('valor'), 'data_vencimento' => $this->input->post('vencimento'), 'data_pagamento' => $this->input->post('pagamento'), 'baixado' => $this->input->post('pago'), 'cliente_fornecedor' => set_value('fornecedor'), 'forma_pgto' => $this->input->post('formaPgto'), 'tipo' => $this->input->post('tipo') ); print_r($data); } O que eu não estou entendendo é onde esta ou onde estão os meus erros, pois não grava nada no Banco de Dados, sendo q eu criei na tablea clienes o campo saldoDevedor. E ainda por cima, quando faço o teste, utilizando o debito de cliente já existente, informo o valor que foi pago, e diz que foi alterando com sucesso, más na realidade nada acontece. Fico no aguardo se alguém puder me ajudar!