Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Salve lista, senhores estou com um scrip que pega uma lista de numero de titulos(boletos) e forma um array depois eu queria fazer uma consulta em uma banco de dados sql para ver se o boleto esta la no banco o arquivo txt tem 1200 linhas cada uma com um codigo de titulo mas quando faço a consulta ele retorna somente o ultima !! veja
parte do arquivo texte:
8768
6104
5993
5873
6297
5064
4783
5619
6523
8764
8758
6648
5878
6013
8726
6463
parte do script php:
$arquivo = file('titulos.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach ($arquivo as $item) {
//echo $item .'<br>';
}
//$arquivo = "3148";
$server = 'localhost';
$user = 'root';
$pass = 'xxxxxxx';
$database = 'mkradius';
$link = mysqli_connect($server, $user, $pass, $database)
or die('Nao foi possivel conectar a base' . mysqli_errno($link));
$select = mysqli_select_db($link, $database);
$sql = "select nome,formapag,datavenc,status,deltitulo,gerourem,valor,nossonum,";
$sql .= "titulo,linhadig,codigo_barras from vtab_titulos where titulo like '$item'";
Ainda tem mais codigo onde formo o boleto novamente para ser pago coso encontrado o restante esta ok mas essa parte ta complicada !!
se alguem puder me ajudar fico grato !!!Ola EdCesar obrigado por sua resposta amigo, fiz como citado acima mas nao deu resultado agora nem a ultima linha ele mostra, veja so eu tenho um arquivo texto com 1200 linhas cada um e um codigo de um titulo oque eu preciso e so gerar um array e fazer a consulta mas nao esta funcionando assim ! da forma que esta ele mostra somente o ultimo boleto quando dou um vardump na variavel ele mostra o array com todas as linhas e titulos !!
A solução do @EdCesar faz todo sentido, conforme exemplo abaixo, estou utilizando o PDO com o SQLITE como banco, porem o exemplo é só prova de conceito.
<?php
///Cria e conecta ao banco na memória.
$pdo = new PDO('sqlite::memory:');
///Cria a tabela de teste
$pdo->exec('CREATE TABLE vtab_titulos(id integer primary key, nome varchar(255), titulo varchar(255))');
///Insere os dados
$pdo->exec('INSERT INTO vtab_titulos(id, nome, titulo) VALUES (1, "primeiro", 1111), (2, "segundo", 2222), (3, "terceiro", 3333), (4, "quarto", 4444)');
///Lê o conteúdo do arquivo
//$linhas = file("arquivo.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
///Simula o retorno da função file
$linhas = ['2222', '4444'];
///remove os espaços, necessário apenas caso o arquivo possua espaços em branco nas linhas e/ou exista algum problema na leitura devido ao final de linha do arquivo.
$linhas = array_map('trim', $linhas);
///Trata o conteúdo e adiciona as aspas, em principio adicionar as aspas é desnecessário, mas estou assumindo que no seu banco o campo titulo seja do tipo texto e isso possa estar causando algum problema.
$linhas = array_map([$pdo, 'quote'], $linhas);
///Equivalente a linha anterior
//$linhas = array_map(function($v) use ($pdo) { return $pdo->quote($v); }, $linhas);//$linhas = array_map(function($v) use($link) { return "'".mysqli_real_escape_string($link, $v)."'"; }, $linhas);
//Concatena todos os valores do array separados por virgula
$itens = implode(', ', $linhas);
//Monta a consulta
$sql = "SELECT * FROM vtab_titulos WHERE titulo IN ($itens)";
//Executa a consulta
$st = $pdo->query($sql);
//Carrega os resultados
$rows = $st->fetchAll(PDO::FETCH_ASSOC);
//Imprime a consulta utilizada
echo $sql;
//Imprime o resultado da consulta
echo '<pre>', print_r($rows, true), '</pre>';
?>
Pode testá-lo em [http://phpfiddle.org/](http://phpfiddle.org/).
Acredito que exista algum detalhe adicional no arquivo e/ou código posterior ao seu exemplo.Vou postar todo o meu codigo aqui veja , esse script le um arquivo texto e gera um lista dos boletos com codigo de barras:
<html>
<title></title>
<head>
<!-- Estilos necessários para o tema do tablesorter -->
<link rel="stylesheet" href="css/blue/style.css">
<!-- jQuery e Tablesorter -->
<script src="js/jquery-latest.js"></script>
<script src="js/jquery.tablesorter.min.js"></script>
<!-- Meu script -->
<script src="js/scripts.js"></script>
</head><p>
<table class="tablesorter" border="1" width="1300" align="center">
<thead>
<tr>
<th>Nome</th>
<th>forma pago</th>
<th>Data pago</th>
<th>Status</th>
<th>Deletado?</th>
<th>Gerou Remessa</th>
<th>Valor</th>
<th>Nosso Numero</th>
<th>Numero Titulo</th>
<th>Linha Digitavel / Codigo Barras</th>
<th>Status</th>
</tr>
</thead>
<tbody>
<?php
$arquivo = file('titulos.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach ($arquivo as $item) {
//echo $item .'<br>';
}
//$arquivo = "3148";
$server = 'localhost';
$user = 'root';
$pass = 'xxxxxxxx';
$database = 'xxxxxxxx';
$link = mysqli_connect($server, $user, $pass, $database)
or die('Nao foi possivel conectar a base' . mysqli_errno($link));
$select = mysqli_select_db($link, $database);
$sql = "select nome,formapag,datavenc,status,deltitulo,gerourem,valor,nossonum,";
$sql .= "titulo,linhadig,codigo_barras from vtab_titulos where titulo like '$item'";
//print_r($arquivo);
?>
<?php
$result = mysqli_query($link, $sql);
while ($tbl = mysqli_fetch_array($result)) {
$nome = $tbl["nome"];
$formapag = $tbl["formapag"];
$datavenc = $tbl["datavenc"];
$status = $tbl["status"];
$deltitulo = $tbl["deltitulo"];
$gerourem = $tbl["gerourem"];
$valor = $tbl["valor"];
$nossonum = $tbl["nossonum"];
$titulo = $tbl["titulo"];
$linhadig = $tbl["linhadig"];
$codigo_barras = $tbl["codigo_barras"];
echo "<tr>";
echo "<td>$nome</td>";
echo "<td>$formapag</td>";
echo "<td>$datavenc</td>";
echo "<td>$status</td>";
echo "<td>";
if ($deltitulo == '0') {
echo "Nao";
} else {
echo "Sim";
}
echo "</td>";
echo "<td>$gerourem</td>";
echo "<td>R$$valor</td>";
echo "<td>$nossonum</td>";
echo "<td>$titulo</td>";
echo "<td>$linhadig<br>";
echo fbarcode($codigo_barras);
echo "</td>";
echo "<td>";
if (in_array($titulo, $arquivo)) {
echo "<font color=red><b>ESTA NO BANCO !</b></font>";
} else {
echo "<font color=gren><b>NAO ESTA NO BANCO</b></font>";
}
echo "</td>";
echo "</tr>";
}
//var_dump($arquivo);
?>
</tbody>
</table>
<?php
function fbarcode($valor2) {
$fino = 1;
$largo = 3;
$altura = 50;
$barcodes[0] = "00110";
$barcodes[1] = "10001";
$barcodes[2] = "01001";
$barcodes[3] = "11000";
$barcodes[4] = "00101";
$barcodes[5] = "10100";
$barcodes[6] = "01100";
$barcodes[7] = "00011";
$barcodes[8] = "10010";
$barcodes[9] = "01010";
for ($f1 = 9; $f1 >= 0; $f1--) {
for ($f2 = 9; $f2 >= 0; $f2--) {
$f = ($f1 * 10) + $f2;
$texto = "";
for ($i = 1; $i < 6; $i++) {
$texto .= substr($barcodes[$f1], ($i - 1), 1) . substr($barcodes[$f2], ($i - 1), 1);
}
$barcodes[$f] = $texto;
}
}
//Desenho da barra
//Guarda inicial
?>
<html>
<head>
<title>Código de Barras 2 of 5 em PHP</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<br>
<img src=p.gif width=<?= $fino ?> height=<?= $altura ?> border=0><img
src=b.gif width=<?= $fino ?> height=<?= $altura ?> border=0><img
src=p.gif width=<?= $fino ?> height=<?= $altura ?> border=0><img
src=b.gif width=<?= $fino ?> height=<?= $altura ?> border=0><img
<?php
$texto = $valor2;
if ((strlen($texto) % 2) <> 0) {
$texto = "0" . $texto;
}
// Draw dos dados
while (strlen($texto) > 0) {
$i = round(esquerda($texto, 2));
$texto = direita($texto, strlen($texto) - 2);
$f = $barcodes[$i];
for ($i = 1; $i < 11; $i += 2) {
if (substr($f, ($i - 1), 1) == "0") {
$f1 = $fino;
} else {
$f1 = $largo;
}
?>
src=p.gif width=<?= $f1 ?> height=<?= $altura ?> border=0><img
<?php
if (substr($f, $i, 1) == "0") {
$f2 = $fino;
} else {
$f2 = $largo;
}
?>
src=b.gif width=<?= $f2 ?> height=<?= $altura ?> border=0><img
<?php
}
}
// Draw guarda final
?>
src=p.gif width=<?= $largo ?> height=<?= $altura ?> border=0><img
src=b.gif width=<?= $fino ?> height=<?= $altura ?> border=0><img
src=p.gif width=<?= 1 ?> height=<?= $altura ?> border=0>
<?php
}
//Fim da função
function esquerda($entra, $comp) {
return substr($entra, 0, $comp);
}
function direita($entra, $comp) {
return substr($entra, strlen($entra) - $comp, $comp);
}
ini_set('display_errors', true);
error_reporting(E_ALL);
?>
</p>
</html>
No meu caso as linhas estao abaixo uma da outra assim veja :
2708
2827
2658
3326
3512
3593
2705
2485
2832
3089
2618
2930
2819
3571
3560
3508
3101
3563
3411
3344
3293
3091
2891
3390
3289
3389
2585
3020Faça as alterações que o @EdCesar sugeriu e altere a seguinte linha
$result = mysqli_query($link, $sql);
Para
echo '<pre>-----Inicio das informações-----';
var_dump($sql);
$result = mysqli_query($link, $sql);
var_dump($result);
echo mysqli_error($link);
echo '-----Fim das informações-----</pre>';
E se possível poste o que for impresso entre -----Inicio das informações----- e -----Fim das informações-----.@Rodrigo Ferreira Santos, @HwapX beleza!
HwapX, parece que ele precisa fazer a buscar na base, com like mesmo
Rodrigo, o primeiro exemplo que o HwapX deu funciona perfeitamente!
Caso você realmente precise de um like, então apenas faça as modificações abaixo, na sugestão que lhe dei. E, caso funcione, sugiro revisar esse modelo de negocio, pois nesse caso, me parece que os dados estão sujeitos a distorções, por exemplo:
Se no arquivo contiver o valor 222, e na base existir 222, 2222, 11222 Então ira trazer os três resultados, isso estaria correto?
$itens = implode($arquivo, '|');
E
WHERE titulo REGEXP '$itens'
Edcesar pois e , neste caso os números sao sequencias e nao se repetem, sao sempre de 4 dígitos ! mas eu poderia usar = ao inves de like nao tem problema vou fazer as alterações e postar o resultado aqui !
uauauauau FUNFIONOUUUUU srrsr caramba que alegria cara Obrigado Edcesar obrigado mesmo Hwapx deu certo eu e que estava errando o nome da variavel onde era itens eu coloquei no sql item olha fico muito grato pela ajuda de voces !!!!
Fundamental mesmo !!!!
@Rodrigo Ferreira Santos, joia!
Se entendi o problema, basta trocar isso:
WHERE titulo in ($itens)