Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   как каждый новая зпись появлялась вначале списка (http://forum.oszone.net/showthread.php?t=49080)

slaine 09-05-2005 13:39 322810

как каждый новая зпись появлялась вначале списка
 
Хочу, чтоб новая запись появлялась вначале(вверху) списка в 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 322813

PHP код:

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

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

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

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

PHP код:

$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 322824

спасибо, что подсказали.
Правда теперь там стали ругатся
вот такими словами:

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
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 322855

тык 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 323024

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


vadimiron 10-05-2005 17:53 323049

Цитата:

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

Цитата:

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

<? 
$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 323068

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


Время: 12:05.

Время: 12:05.
© OSzone.net 2001-