Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia!
Depois de muita pesquisa e tentativas-e-erros, resolvi perguntar aqui no fórum se alguém tem uma dica para minha dúvida.
Tenho um arquivo texto que contém uma query de busca no banco. Nesta query há uma variável "codigo", que será atribuída pelo usuário.
Porém essa query pode ser alterada para outros parâmetros de busca (mas a variável código não mudará).
Eu poderia criar uma procedure no banco, mas é inviável.
O que preciso: que o PHP leia o conteúdo do arquivo texto e atribua um valor vindo do formulário (estou usando POST) para essa variável "codigo".
Segue o que tenho:
CONTEÚDO DO ARQUIVO TEXTO (consulta.txt):
SELECT CODIGO, NOME, CPF FROM ALUNOS WHERE CODIGO = '$codigo';
MEU CÓDIGO PHP:
<html>
<head>
<title>Pesquisa</title>
</head>
<form method="post" action="pesquisa.php" name="hilario">
<font face="Arial">
<p>
Digite o codigo do aluno:
<table style="text-align: left; width: 266px; height: 27px;" border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td style="vertical-align: top;"><br></td>
</tr>
<tr>
<td style="vertical-align: top;">Codigo:</td>
<td><input id="txtCod" name="txtCod" type="text" autofocus required ></td>
</tr>
</tbody>
</table>
<p><input name="buscarDados" value="Buscar!" type="submit">
</form>
<?
ini_set('display_errors', true);
error_reporting(E_ALL);
include "conexao_db.php";
//Pega o conteúdo do arquivo:
$arquivo = file_get_contents('consulta.txt');
//Pega o código do formulário:
$codigo = $_POST["txtCod"];
//Atribui o conteúdo do arquivo na variável $consulta:
$consulta = $arquivo;
//Apenas para testes
//echo $consulta."<br>";
//echo $codigo;
if (isset($codigo)){
if (!$conn){
print "FALHA AO CONECTAR AO DB!<p>";
print $erro['message'];
} else {
$stid = oci_parse($conn, $consulta);
oci_execute($stid);
while ($row = oci_fetch_array($stid))
{
echo $row["CODIGO"]."<br>";
echo $row["NOME"]."<br>";
echo $row["CPF"]."<br>";
}
$numeroderegistros = oci_num_rows($stid);
echo "<p>Linhas >> " . $numeroderegistros . "<br>";
oci_close($conn);
}
}else{
echo "Faca a pesquisa.";
}
?>
</html>Já tentei colocar as tags de PHP no arquivo texto, na esperança que ele interpretasse como um código PHP:
<? SELECT CODIGO, NOME, CPF FROM ALUNOS WHERE CODIGO = '$codigo'; ?>
<? echo "SELECT CODIGO, NOME, CPF FROM ALUNOS WHERE CODIGO = '$codigo'"; ?>
SELECT CODIGO, NOME, CPF FROM ALUNOS WHERE CODIGO = <? echo '$codigo'; ?>
Mas sem sucesso...
Alguém tem uma ideia de como isso pode funcionar?
Muito obtigado!
>
$consulta = str_replace('$codigo', $codigo, $arquivo);
DSerma, perfeito! Funcionou!
Porém retornou os seguintes erros vindos do banco:
Warning: oci_execute() [function.oci-execute0]: ORA-00911: invalid character in /var/www/html/users/antoniopaduapit/testes/pesquisa.php on line 47
Warning: oci_fetch_array() [function.oci-fetch-array0]: ORA-24374: define not done before fetch or execute and fetch in /var/www/html/users/antoniopaduapit/testes/pesquisa.php on line 50
Creio que eu teria que fazer uma conversão de caracteres também, né?
O erro está alertando para algum caracter inválido na sua query.
De um echo nela e veja o que é.
>
O erro está alertando para algum caracter inválido na sua query.
De um echo nela e veja o que é.
O echo saiu como deveria ser a consulta mesmo:
SELECT CODIGO, NOME, CPF FROM ALUNOS WHERE CODIGO = '5263';
O 5263 foi o valor vindo via POST do FORM...Qual é a linha 47, que o erro aponta?
Qual é a linha 47, que o erro aponta?
#47 oci_execute($stid);
é justamente a que faz a chamada no banco.
RESOLVIDO!
Utilizei a dica do DSerma e para resolver o problema de caracteres inválidos, retirei no final do conteúdo do arquivo texto o "ponto-e-vírgula" e converti a variável $codigo em inteiro, utilizando:
$codigo = $_POST["txtCod"];
$consulta = str_replace('$codigo', $codigo, $arquivo);
//Converte em inteiro:
$codigo = (int)$codigo;
Obrigado pela ajuda DSerma!
$consulta = str_replace('$codigo', $codigo, $arquivo);