Ola Srs,
Estou aprendendo PHP e SQL ainda e tentando trabalhar com ambos, tenho um sisteminha que faz uma busca de pacientes e usa essa busca para imprimir as etiquetas.
Tudo funcionando desde que eu não faça a busca ele imprime normalmente, se eu colocar qualquer nome na busca ele coloca no codigo os dois %% da query e da erro 400.
A busca arquivo pesquisa_ajax.php
<?php
$_GET['pesquisa'] = utf8_decode ( htmlspecialchars( utf8_encode($_GET['pesquisa']) , ENT_QUOTES | ENT_COMPAT, 'utf-8') );
$pacientes = new TPacientes();
if($_GET[campo] == 'nascimento') {
if ( strlen ( $_GET['pesquisa'] ) <= 2 ) {
$where .= "MONTH(nascimento) = '".$_GET['pesquisa']."'";
} else {
$pesq = explode ( '_' , $_GET['pesquisa'] );
foreach ( $pesq as $k => $v ) {
$v = explode ( '-' , $v );
$v[1] = str_pad($v[1], 2, '0', STR_PAD_LEFT);
$pesq[$k] = implode ( '-' , $v );
}
$where = "RIGHT(nascimento, 5) = '".$pesq[0]."'";
if ( count ( $pesq ) > 1 ) {
$where = "DATE_FORMAT(nascimento, '%m-%d') BETWEEN '".$pesq[0]."' AND '".$pesq[1]."'";
}
}
} elseif($_GET[campo] == 'nome') {
$where = "nome LIKE '%".$_GET[pesquisa]."%'";
} elseif($_GET[campo] == 'telefone') {
$where = "telefone1 = '".$_GET[pesquisa]."' OR telefone2 = '".$_GET[pesquisa]."' OR celular = '".$_GET[pesquisa]."'";
} elseif($_GET[campo] == 'matricula') {
$where = "codigo = '".$_GET[pesquisa]."'";
} elseif($_GET[campo] == 'cidade') {
$where = "cidade LIKE '".$_GET[pesquisa]."%'";
} elseif($_GET[campo] == 'cep') {
$where = "cep LIKE '".$_GET[pesquisa]."%'";
} elseif($_GET[campo] == 'profissao') {
$where = "profissao LIKE '%".$_GET[pesquisa]."%'";
} elseif($_GET[campo] == 'area') {
$where = "tratamento LIKE '%".$_GET[pesquisa]."%'";
} elseif($_GET[campo] == 'procurado') {
$where = "codigo_dentistaprocurado = '".$_GET[pesquisa]."'";
} elseif($_GET[campo] == 'atendido') {
$where = "codigo_dentistaatendido = '".$_GET[pesquisa]."'";
} elseif($_GET[campo] == 'indicacao') {
$where = "indicadopor LIKE '%".$_GET[pesquisa]."%'";
} elseif($_GET[campo] == 'endereco') {
$where = "endereco LIKE '%".$_GET[pesquisa]."%'";
}
if($_GET[pg] != '') {
$limit = ($_GET[pg]-1)*PG_MAX;
} else {
$limit = 0;
$_GET[pg] = 1;
}
$sql = "SELECT * FROM `pacientes` WHERE ".$where." ORDER BY `nome` ASC";
if($_GET['campo'] == 'debito') {
$sql = "SELECT DISTINCT(vo.codigo_paciente), tp.* FROM pacientes tp INNER JOIN v_orcamento vo ON tp.codigo = vo.codigo_paciente WHERE data < '".date('Y-m-d')."' AND pago = 'Não' AND confirmado = 'Sim' AND baixa = 'Não' ORDER BY `nome` ASC";
}
if($_GET['campo'] == 'agendados') {
$sql = "SELECT DISTINCT ta.codigo_paciente, tp.* FROM agenda ta INNER JOIN pacientes tp ON ta.codigo_paciente = tp.codigo WHERE ta.data = CURDATE()";
}
$lista = $pacientes->ListPacientes($sql.' LIMIT '.$limit.', '.PG_MAX);
$total_regs = $pacientes->ListPacientes($sql);
$par = $odev = "F0F0F0";
$impar = "F8F8F8";
for($i = 0; $i < count($lista); $i++) {
if($i % 2 == 0) {
$odev = $par;
} else {
$odev = $impar;
}
?>
Quando rodo a busca e mando imprimir ele puxa essa query do sql:
<td width="43%" align="right">
<a href="relatorios/pacientes.php?sql=<?php echo $sql;?>" target="_blank" style="text-decoration:none;">
<button class="btn btn-warning">
<span class="glyphicon glyphicon-print"></span> <?php echo $LANG['patients']['print_report']?>
</button>
</a>
<a href="etiquetas/print_etiqueta.php?sql=<?php echo $sql; ?><?php echo ($_GET['campo']=='nascimento' ? '&nasc=true' : '')?>" target="_blank">
<button class="btn btn-warning">
<span class="glyphicon glyphicon-print"></span> <?php echo $LANG['patients']['print_labels']?>
</button>
</a>
</td>
Apresenta esse resultado na barra de endereços o que gera o erro.
pacientes.php?sql=SELECT%20*%20FROM%20`pacientes`%20WHERE%20nome%20LIKE%20%27%%%27%20ORDER%20BY%20`nome`%20ASC
Espero que possam me ajudar já pesquisei e já estou rodando aqui mais meu conhecimento ainda e pouco.