21. září bude sraz! Od 18.00 v restauraci Tradice v Praze u Anděla
Autor Zpráva
Truuhlik
Profil
Opět zdravím,

$soubor = file("data.txt");

foreach($soubor as $line){
$data = explode("||", $line);
if($data[0] == $_GET['id'] continue;
else{
$id = $data[0];
$nazev_novinky = $data[1];
$obsah_novinky = $data[2];

echo "tady si to všechno pěkně vypíšu pod sebe";
}
}


takhle mi to vypíše všechny novinky pod sebe - při představě že v souboru bude 50 řádků, tak mi to nahání hrůzu - 50 novinek na jedné stránce

nevěděl by někdo jak nastránkovat tento výstup třeba v podobě nekonečného stránkování 1 2 3 4 5 6 7 8 ...? z mysql databáze vím jak na to, ale u tohoto nemám páru, hledal jsem i na netu kde se dalo, ale najít něco pořádnýho a hlavně jednoduchého je umění

a druhý dotaz směřuje k seřazení - v mysql ORDER BY id DESC (nebo ASC) - jak to udělat tady?

předem díky za odpovědi
AM_
Profil
- řazení: php má funkci [url=php.net/sort]sort[/url], případně další mutace jako ksort, asort, rsort atd... Pokud to chceš mít seřazené tak, jak je to ve vstupním souboru, tak tak už to seřazené je když to načteš :)
Pokud řadíš složitější záznamy podle určitého kritéria (ID příspěvku), jsou dvě řešení:
- udělat si funkci na porovnání dvou záznamů podle ID a řadit funkcí usort, která si pro porovnání zavolá tvojí funkci
- vytvořit asociativní pole, kde klíče budou ID a pak třídit přes ksort
//edit: pokud třídíš pole polí podle prvního prvku zanořeného pole, myslím, že si s tím poradí obyčejný sort()

- stránkování: úplně stejně jako nad databází, jen klauzuli LIMIT start, pocet si budeš muset naimplementovat - velice jednoduše, prvních start řádků přeskoč a dalších pocet vypiš.
Truuhlik
Profil
v mysql je to o dost jednodušší - vlastně si spočítám všechny řádky určím po kolika vypast

používám tohle: (nevěděl bys jak to aplikovat právě na můj problém?)

$radku = mysql_num_rows(mysql_query("SELECT id FROM tabulka;"));


$po = 15; /* počet řádků na stránku */
$max_stranek = ceil($radku / $po); /* počet stránek */
$url_stranka = ($_GET["stranka"] / $po) + 1; /* Aktuální stránka */


for($i=0; $i  < $max_stranek; $i++) {
$cislo = ($i + 1);
$url_cislo = ($cislo * $po) - $po;
if($url_stranka != $cislo) {
echo "<a href=\"?stranka=".$url_cislo."\">".$cislo."</a>\n";
} else 
echo "<strong>".$cislo."</strong>\n";
}
}


if(empty($_GET["stranka"])) {$stranka = 0;} else {$stranka = $_GET["stranka"];}
$cist = mysql_query("SELECT * FROM tabulka ORDER BY id DESC LIMIT ".intval($stranka).",$po");
while($data = mysql_fetch_assoc($cist)) {
…
}
AM_
Profil
$radku = mysql_num_rows(mysql_query("SELECT id FROM tabulka;"));
čistější je toto:
list($radku) = mysql_fetch_row(mysql_query("SELECT COUNT(id) FROM tabulka"));


v případě souboru:
$soubor = file("data.txt");
$radku = count($soubor); //neni nic jednodussiho :)

//kod pro vypocet stranek je naprosto stejny

//algoritmus pro vypis
//nahrazuje:
//$cist = mysql_query("SELECT * FROM tabulka ORDER BY id DESC LIMIT ".intval($stranka).",$po");
//while($data = mysql_fetch_assoc($cist))
//nahradit timto:
//vypis $soubor[$stranka] az $soubor[$stranka+$po]
for ($i = $stranka; $i < $stranka+$po; $i++){
...
}
Truuhlik
Profil
takže dělám na svém malém projektíku, ale vůbec nejsem schopen dát to do kupy, podařilo se mi vypsat žádaný počet řádků, dokonce to i nastránkovat, ale problém je v nastránkovaném výsledku - pořád mi to stránkuje jenom 1 řádek (tzn. mám 3 stránky, na každé 10 řádků, ale každý ten řádek je pořád to samé)

prosím vás nevěděl byste někdo kde by mohl být problém?

header("Content-Type: text/html; charset=utf-8");

$soubor = file("data/soubory.txt");

$radku = count($soubor);
$po = 10;
$max_stranek = ceil($radku/$po);
$url_stranka = ($_GET['stranka']/$po)+1;

if(empty($_GET['stranka'])){$stranka = 0;}
else{$stranka = $_GET['stranka'];}

foreach($soubor as $line){
$data = explode("||", $line);
if($data[0] == $_GET['id'])continue;
else{
$idecko = $data[0];
$nazev = $data[1];
$url = $data[2];
}
}

/*tady je ten největší problém - docílil jsem vytáhnutí 10ti řádků to jo, 
ale ten řádek je pořád stejný - nevěděl by někdo jak na to?*/
echo "<table>";
for($a = $stranka; $a<$stranka+$po; $a++){

echo "<tr>
        <td>$nazev</td>
        <td><a href='$url'>Stáhnout</a></td>
    </tr>";
}
echo "</table>";





//tady si vypíšu číslování 1, 2, 3... atd plně funkční
for($i=0; $i<$max_stranek; $i++){
$cislo = ($i+1);
$url_cislo = ($cislo*$po)-$po;

if($url_stranka!=$cislo){
echo "<a href='?stranka=$url_cislo'>$cislo</a>";
}
else{
echo "<strong>$cislo</strong>";
}
}
AM_
Profil
Truuhlik:
for($a = $stranka; $a<$stranka+$po; $a++){
>
echo "<tr>
<td>$nazev</td>
<td><a href='$url'>Stáhnout</a></td>
</tr>";
}
echo "</
Jak by to mohlo nebýt stejné, když v každé iteraci znovu vypíšeš $nazev a $url a mezitím je nijak nezměníš? Ty data třeba nacpi do pole a z něj vypisuj, když v cyklu pořád dokola vypisuješ jednu proměnnou, samozřejmě to vypíše několikrát to samé.
Truuhlik
Profil
já jenom nevím jak - napadlo mě dát výpis do

foreache, konktrétně do části else {}, ale nepodařilo se, opět ten stejný problém - fakt nevím jak dál - něvěděl bys jak na to? samozřejmě že jsem hledal i na netu, strejda google, ale flat files a stránkování to je asi nadlidský výkon

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0