Войти

Показать полную графическую версию : как каждый новая зпись появлялась вначале списка


slaine
09-05-2005, 13:39
Хочу, чтоб новая запись появлялась вначале(вверху) списка в 1.php,
как мне это проделать?
Пробовал end() & prev(), плохо получается.
Помогите ктонибудь.

Вот эти два фйла:

Здесь читаю файл aaa.txt.
1.php
=====
<a href="2.php">Back</a>
<BR>
<BR>
<?
$file = file("aaa.txt");
$count = count($file);
echo "<table width=360 border=1><tr>";
for ($i = 0; $i < $count; $i ++){
$line = explode("\t", $file[$i]);
echo "<tr valign=top>";
echo "<td bgColor=#ffffff>".$line[0]."</td>";
echo "<td bgColor=#ffffff>".$line[1]."</td>";
echo "<td bgColor=#ffffff>".$line[2]."</td>";
echo "</tr>";
}
echo "</table>";
?>
<BR>
<a href="2.php">Back</a>

А здесь провожу запись в него.

2.php
=====

<?
if (isset($_GET['name']) && isset($_GET['city']) && isset($_GET['country'])){
$a = ucfirst(htmlspecialchars($_GET['name']));
$b = ucfirst(htmlspecialchars($_GET['city']));
$c = ucfirst(htmlspecialchars($_GET['country']));
if (empty($a) || empty($b) || empty($c)){
echo " ";
} else {
$file = fopen("aaa.txt", "a+");
fwrite($file, $a."\t".$b."\t".$c."\n");
fclose($file);
echo "<html><head>";
echo "<META HTTP-EQUIV='Refresh' CONTENT='0; URL=1.php'>";
echo "</html></head>";
}
}
?>
<table border=0 cellspacing=0 cellpadding=0>
<form action=2.php method=get>
<tr>
<td>Name:</td>
<td><input type="text" name=name size=20 maxlength=20></td>
</tr>
<tr>
<td>City:</td>
<td><input type="text" name=city size=20 maxlength=20></td>
</tr>
<tr>
<td>Country:</td>
<td><input type="text" name=country size=20 maxlength=20></td>
</tr>
<tr>
<td colspan=2 align=right><input type="submit" value=" OK "></td>
</tr>
</form>
</table>
<BR>
<a href="1.php">View results</a>

E-mail
09-05-2005, 13:47
$file=file("aaa.txt");

for($i=count($file);$i>-1;$i++)
echo $file[$i];


самое простое из чтения из файла наоборот.

можно еще в середину цыкла добавить разделение строки:


$file=file("aaa.txt");

for($i=count($file);$i>-1;$i++)
foreach(explode("\t",$file[$i]) as $a)
echo $a."***";
echo "<br>";

slaine
09-05-2005, 16:31
спасибо, что подсказали.
Правда теперь там стали ругатся
вот такими словами:

Notice: Undefined offset: 5 in z:\home\test1.ru\www\1\1.php on line 9

Notice: Undefined offset: 1 in z:\home\test1.ru\www\1\1.php on line 12

Notice: Undefined offset: 2 in z:\home\test1.ru\www\1\1.php on line 13

Notice: Undefined offset: 3 in z:\home\test1.ru\www\1\1.php on line 14

это в 1.php
<a href="2.php">Back</a>
<BR>
<BR>
<?
$file = file("aaa.txt");
$count = count($file);
echo "<table width=360 border=1><tr>";
for ($i = $count; $i > -1; $i --){
$line = explode("\t", $file[$i]);
echo "<tr valign=top>";
echo "<td bgColor=#ffffff>".$line[0]."</td>";
echo "<td bgColor=#ffffff>".$line[1]."</td>";
echo "<td bgColor=#ffffff>".$line[2]."</td>";
echo "<td bgColor=#ffffff>".$line[3]."</td>";
echo "</tr>";
}
echo "</table>";
?>
<BR>
<a href="2.php">Back</a>

vadimiron
09-05-2005, 20:48
тык count считает количество элементов, но в массиве счёт начинается с 0 !!!, то есть
for ($i = $count; $i > -1; $i --) надо переписать в for ($i = $count; $i > 0; $i --)

PS:
это кому как, но обычно я вижу что люди пишут этот for по-другому:
for ($i = 0; $i < $count; $i ++)
а для переворачивания массива есть одна встроенная функция, array_reverse вроде

slaine
10-05-2005, 16:48
for ($i = $count; $i > 0; $i --) при таком цикле $line[0] невыводится.
надо так "-1" или ">=0".
И array_reverse делает не то, что надо.
Я слышал, что krsort вроде может сортировать массиа в обратном порядке,
но я не знаю, как с ней работать. кто в этом шарит подчкажите.

vadimiron
10-05-2005, 17:53
for ($i = $count; $i > 0; $i --) при таком цикле $line[0] невыводится.
надо так "-1" или ">=0"
Да согласен, моя ошибка, только в этом случае и $i должно равняться $count-1 в первом цикле

И array_reverse делает не то, что надо
Эта функция как раз для того и сделана, чтобы первую запись в массиве сделать последней и наоборот, просто в этом случае в цикле вывод надо начинать с нулевого элемента, а не с конца, так как массива уже перевёрнут

<?
$file = file("aaa.txt");
$count = count($file);
$file=array_reverse($file);
echo "<table width=360 border=1><tr>";
for ($i = 0; $i > $count; $i ++){
$line = explode("\t", $file[$i]);
echo "<tr valign=top>";
echo "<td bgColor=#ffffff>".$line[0]."</td>";
echo "<td bgColor=#ffffff>".$line[1]."</td>";
echo "<td bgColor=#ffffff>".$line[2]."</td>";
echo "<td bgColor=#ffffff>".$line[3]."</td>";
echo "</tr>";
}
echo "</table>";
?>


Попробуйте так, если не получиться, наверно, я вопроса не могу понять

И ещё: можно же сразу писать в файл с начала, то есть самые новые записи будут в начале файла и соответственно в начале массива, в который вы этот файл построчно загоняете, для этого надо поставить режим 'r+' в функции fopen записи в файл

slaine
10-05-2005, 19:06
- Да спасибо всё работает!
как я сразу не смог этого сделать? - вобще, стрём и позор.




© OSzone.net 2001-2012