Na verdade eu parti desse outro exemplo que vc mencionou, que eu tinha feito com a tua ajuda (e também a ajuda do Rochinha, que fez a ponte com o uso do DBF). Fiz algumas modificações nesse exemplo anterior para chegar ao atual.
O modelo anterior é este:
<html>
<head>
<title>Consulta</title>
</head>
<body>
<?php
$txtArquivo = $_POST["filtro"];
$txtCampo = $_POST["filtro2"];
$txtPesquisa = strtoupper($_POST["filtro3"]);
$dsn = "DRIVER={Microsoft dBase Driver (*.dbf)};DBQ=".dirname($_SERVER['SCRIPT_FILENAME'])."/agenda/;";
$conn= odbc_connect($dsn,"","");
if(!$conn)
{ exit("conexao falhou: ".odbc_errormsg()); }
if (ctype_digit($txtPesquisa)) {
$sql="SELECT * FROM ".$txtArquivo." WHERE ".$txtCampo." = '".$txtPesquisa."'";
} else {
$sql="SELECT * FROM ".$txtArquivo." WHERE ".$txtCampo." LIKE '%".$txtPesquisa."%'";
}
$rs=odbc_exec($conn,$sql);
if (!$rs)
{exit("Error in SQL");}
$i = 0;
$fieldCount = odbc_num_fields($rs);
echo '<table Border="1"><tr>';
while ($i < $fieldCount)
{
$i++;
$fieldName = odbc_field_name($rs, $i);
echo "<th>$fieldName</th>";
}
echo "</tr>";
while (odbc_fetch_row($rs))
{
echo "<tr>";
$i = 0;
while ($i < $fieldCount)
{
$i++;
$fieldName = odbc_field_name($rs, $i);
$compname=odbc_result($rs,$fieldName);
echo "<td>$compname</td>";
}
echo "</tr>";
}
echo "</table>";
odbc_close($conn);
?>
</body>
</html>
E de fato ele tem alguns dos comandos que vc mencionou agora. Eu os retirei pois não sabia no que eles contribuiriam. Vou estudar melhor para corrigir o problema.
Vou te explicar a razão do "go bottom":
Esta função, que eu já tenho rodando em harbour sem problema, faz uma coisa bem simples: ela pega o último registro de uma base de dados DBF, que tem os seguintes campos: data, materia, quantidade, para descobrir qual será a próxima matéria. São 3 matérias possÃveis: CIVIL - ADM - PENAL, que se sucedem nesta ordem. Em cada registro da base está tem a data sucessiva (todos os dias), a primeira matéria do dia e a quantidade do dia. O objetivo da função é saber qual será a primeira matéria do dia seguinte. Então, se, por exemplo, o último registro está com data de ontem, com matéria inicial ADM e quantidade 4, a matéria de hoje (dia seguinte) será PENAL, pois ontem já foi ADM - PENAL - CIVIL - ADM. Entendeu?
O while é apenas para fazer esse cálculo, ele não visita todos os registros da base. O objetivo da função é pegar o último registro (e daà o go bottom), ver qual foi a matéria inicial e a quantidade, para calcular qual será a próxima matéria. Observe como eu fiz o while:
while ($qtd>2)
{
$qtd==($qtd-3);
}
Como são 3 matérias, a ideia do while é pegar o resto da divisão da quantidade por 3.
Depois disso, eu fiz o if e elseif, assim:
if($qtd=1)
{
if($mat="PENAL")
{ $mat="CIVIL"; }
elseif($mat="CIVIL")
{ $mat="ADM"; }
else
{ $mat="PENAL"; }
}
elseif($qtd=2)
{
if($mat="PENAL")
{ $mat="ADM"; }
elseif($mat="CIVIL")
{ $mat="PENAL"; }
else
{ $mat="CIVIL"; }
}
A ideia desse if/elseif é determinar a matéria de acordo com o resto da divisão pega no while anterior. Então, se o resto da divisão ($qtd) for 1, a matéria será a seguinte à do último registro (outro if/elseif dentro do primeiro: se a matéria do último registro for PENAL, a próxima será CIVIL; se for CIVIL, a próxima será ADM; se for ADM, a próxima será PENAL). Se o resto da divisão for 2, a matéria será duas próximas à do último registro (se for PENAL, será ADM...). Se o resto for 0, não precisa fazer nada, pois a matéria será a mesma.
Entendeu?
Como disse, ainda preciso estudar melhor estas funções. Por enquanto, fiz assim, mas ainda não funcionou:
<html>
<head>
<title>Leitura</title>
</head>
<body>
<?php
$txtArquivo = "LEITURA.DBF";
$dsn = "DRIVER={Microsoft dBase Driver (*.dbf)};DBQ=".dirname($_SERVER['SCRIPT_FILENAME'])."/agenda/;";
$conn= odbc_connect($dsn,"","");
if(!$conn)
{ exit("conexao falhou: ".odbc_errormsg()); }
$sql="SELECT * FROM LEITURA ORDER BY materia DESC"; // go bottom
$rs=odbc_exec($conn,$sql);
if (!$rs)
{exit("Error in SQL");}
echo "</tr>";
while (odbc_fetch_row($rs))
{
echo "<tr>";
$i = 0;
while ($i < $fieldCount)
{
$i++;
$mat = odbc_field_name($rs, $i);
$compname=odbc_result($rs,$fieldName);
echo "<td>$compname</td>";
}
echo "</tr>";
}
$qtd=quantidade;
while ($qtd>2)
{
$qtd==($qtd-3);
}
if($qtd=1)
{
if($mat="PENAL")
{ $mat="CIVIL"; }
elseif($mat="CIVIL")
{ $mat="ADM"; }
else
{ $mat="PENAL"; }
}
elseif($qtd=2)
{
echo 2;
if($mat="PENAL")
{ $mat="ADM"; }
elseif($mat="CIVIL")
{ $mat="PENAL"; }
else
{ $mat="CIVIL"; }
}
echo $mat;
odbc_close($conn);
?>
</body>
</html>