NemoXP
13th January 2006, 00:37
am si eu nevoie de un script php care sa ia intr-un .txt tot ce este intre <endline>
mai exact:
vreau sa fac o pagina dinamica de bancuri... ele sa se ia dintr-un .txt si sa stie ca vine alt banc prin functia <endline> si pe pagina sa fie afisate 5 bancuri... si sa faca si pagini.. cum este pe www.nautilus.lx.ro/index_ro.php?url=flash_games_ro.php asta ia dintr-un folder toate swf-urile si le listeaza... ceva de genu vreau si eu doar ca sa listeze text (nu file)
multumesc anticipat
cosminnuss
13th January 2006, 01:17
de ce nu folosesti o baza de date si sa iei de acolo bancurile?
E cea mai simpla solutie si cel mai usor de administrat
cosminnuss
13th January 2006, 01:37
Si un raspuns la intrebarea ta, daca am inteles ce vrei
CODE
$lines=file("fisierul_tau_cu bancuri.txt");
foreach($lines as $line)
{
echo "<p>".str_replace(Array("\n","\r"),"",$line)."</p>";
}
Vei avea o problema totusi... Nu vei putea folosi "\n" in bancuri... totodata ce este un banc pe o linie. Incearca un delimitator sau direct niste <br>-uri inainte sa bagi bancurile in fisier.
NemoXP
13th January 2006, 10:35
oka, imi ia tot dintr-un txt, le afiseaza corespunzator.. dar... ca sa faca si pagini? sa puna 5 / pagina ?
mutumesc pt ajutorul de pana acu 
cosminnuss: pt mine e mai usor cu .txt
add
13th January 2006, 10:49
use databases...
ada80ro
13th January 2006, 13:38
Pentru paginatie vezi scriptul asta:
CODE
<html>
<head>
<title> </title>
</head>
<body>
<?php
$lines = file('text_sample.txt');
//numarul de valori afisat pe pagina
$numPerPage = 4;
//seteaza numarul paginii-default 1
$page = isset($_GET['page']) ? $_GET['page'] : 1;
//seteaza elementul din $lines de la care incepe sa citeasca
$start = ($page-1) * $numPerPage;
//afiseaza continutul liniei
for ($i=$start; $i<$start+$numPerPage; $i++) {
if (isset($lines[$i])) {
//proceseaza linie text
list($nume,$descriere,$url,$tag)=explode('|',$lines[$i]);//$nume,$descriere,$url,$tag sunt campurile corespunzatoare unei linii-ex: name1|description1|url1|tag1
echo 'Numele '.$nume.'<br>';
echo 'Descriere '.$descriere.'<br>';
echo 'Url '.$url.'<br>';
echo 'Tag '.$tag.'<br>';
echo '<hr>';
}
}#end for
//calculeaza numarul total de pagini
$totalPages = ceil(count($lines) / $numPerPage);
$script_page=$_SERVER['PHP_SELF'];
//afiseaza link inapoi
if ($page!=1) {
echo '<a href="'.$script_page.'?page='.($page-1).'">Previous</a> ';}
//afiseaza numerele paginilor
for ($i=1; $i<=$totalPages; $i++) {
echo ($i==$page) ? $page.' ' : '<a href="'.$script_page.'?page='.$i.'">'.$i.'</a> ';
}//end for
//afiseaza link inainte
if ($page!=$totalPages){
echo '<a href="'.$script_page.'?page='.($page+1).'">Next</a>';}
?>
</body>
</html>
cosminnuss
13th January 2006, 17:21
Si daca are un "new line" in descriere la banc? Ce faci? 
QUOTE
echo 'Descriere '.$descriere.'<br>';
incearca
CODE
echo 'Descriere '.nl2br($descriere).'<br>';
...si ar mai fi si alte workaround-uri
A, vezi ca $tag s-ar putea sa aiba un "\n" la capat....
zuppy
13th January 2006, 17:32
de ce nu postati problemele de php pe aria de php ?
ada80ro
13th January 2006, 17:37
QUOTE(cosminnuss @ Jan 13 2006, 17:21)

Si daca are un "new line" in descriere la banc? Ce faci?

incearca
CODE
echo 'Descriere '.nl2br($descriere).'<br>';
...si ar mai fi si alte workaround-uri
A, vezi ca $tag s-ar putea sa aiba un "\n" la capat....

Ala e un cod sample pentru partea de paginatie, nu stiu ce dracu are el in fisierul text, poate sa aiba si taguri html in fisierul text, nu stiu cum sunt delimitate campurile etc.
NemoXP
13th January 2006, 20:54
nu am nici o descriere, nici url, nici nume, nici tag... ideea e sa afiseze 4 bancuri intregi... ele sunt separate intre ele prin <endline> (un banc are mai multe randuri...)
ada80ro
13th January 2006, 21:27
QUOTE(NemoXP @ Jan 13 2006, 20:54)

nu am nici o descriere, nici url, nici nume, nici tag... ideea e sa afiseze 4 bancuri intregi... ele sunt separate intre ele prin <endline> (un banc are mai multe randuri...)
Doamne, e asa greu de priceput. Ala era un script sample de paginatie printr-un array. Am folosit un fisier text de-al meu.
In fine, sa revin.
Dupa
$lines = file('text_sample.txt');
da un print_r($lines); si vezi daca bancurile alea se gasesc fiecare intr-un element din array.
Daca da atunci foloseste ceva de genul:
CODE
//afiseaza continutul liniei
for ($i=$start; $i<$start+$numPerPage; $i++) {
if (isset($lines[$i])) {
echo '<p>'.$lines[$i].'</p>';
}
}#end for
cosminnuss
13th January 2006, 23:01
@ada80ro: Ideea este ca functia file() va include la fiecare element din array-ul format si un "/n" la sfarsit. La asta ma refeream
ada80ro
13th January 2006, 23:07
QUOTE(cosminnuss @ Jan 13 2006, 23:01)

@ada80ro: Ideea este ca functia file() va include la fiecare element din array-ul format si un "/n" la sfarsit. La asta ma refeream

Si? Care e faza? Tu afisezi alea intr-o pagina html, in html nu conteaza ws-urile. Doar daca vrei sa folosesti nl2br care oricum pastreaza "\n" de la sfarsit insa nu vad rostul in cazul de fata, presupun ca bancurile alea or sa fie delimitate intr-un mod mai vizibil cu ajutorul unor taguri html.
cosminnuss
13th January 2006, 23:21
QUOTE
Si? Care e faza? Tu afisezi alea intr-o pagina
Era doar ceva in genu FYI, sa nu-si puna problema de ce are \n la sfarsit.
NemoXP
13th January 2006, 23:23
da.. vad ca merge cat de cat.. dar imi afiseaza numai 4 randuri in banc...
ex:
http://85.186.128.161/~nautilus/nautilus/banc2.php?page=1
cosminnuss
13th January 2006, 23:27
si codul folosit pana la urma care este?
Eventual si fisierul txt...
Verifica cum ai "\n"-urile in .txt. Sa ai "\n"(ending line) doar la capatul bancurilor caci altfel nu stie scriptu unde se termina un banc.
NemoXP
13th January 2006, 23:34
<html>
<head>
<title> </title>
</head>
<body>
<?php
$lines = file('text.txt');
//numarul de valori afisat pe pagina
$numPerPage = 4;
//seteaza numarul paginii-default 1
$page = isset($_GET['page']) ? $_GET['page'] : 1;
//seteaza elementul din $lines de la care incepe sa citeasca
$start = ($page-1) * $numPerPage;
//afiseaza continutul liniei
for ($i=$start; $i<$start+$numPerPage; $i++) {
if (isset($lines[$i])) {
echo '<p>'.$lines[$i].'</p>';
}
}#end for
//calculeaza numarul total de pagini
$totalPages = ceil(count($lines) / $numPerPage);
$script_page=$_SERVER['PHP_SELF'];
//afiseaza link inapoi
if ($page!=1) {
echo '<a href="'.$script_page.'?page='.($page-1).'">Previous</a> ';}
//afiseaza numerele paginilor
for ($i=1; $i<=$totalPages; $i++) {
echo ($i==$page) ? $page.' ' : '<a href="'.$script_page.'?page='.$i.'">'.$i.'</a> ';
}//end for
//afiseaza link inainte
if ($page!=$totalPages){
echo '<a href="'.$script_page.'?page='.($page+1).'">Next</a>';}
?>
</body>
</html>
asta e scriptul.... txt-ul e aici: http://85.186.128.161/~nautilus/nautilus/text.txt
nu se poate face sa ia ca banc urmator cand citeste "<endline>" sau altceva??
ada80ro
13th January 2006, 23:39
QUOTE(NemoXP @ Jan 13 2006, 23:23)

da.. vad ca merge cat de cat.. dar imi afiseaza numai 4 randuri in banc...
ex:
http://85.186.128.161/~nautilus/nautilus/banc2.php?page=1
Tie ca sa-ti mearga toata povestea asta in fiecare element din array-ul $lines trebuie sa ai cate un banc.
[0] => banc1
[1]=>banc2
Ca sa se intample asta singurul "\n" trebuie sa fie la sfarsit. In momentul in care introduci text intr-un textarea si apesi enter se introduce cate un "\n"("\r\n") deci in mod normal nu ai doar un singur "\n".
Ca sa elimini "\n" trebuie sa faci ceva de genul:
//cum a zis si @cosminnuss
$banc=nl2br($_POST['banc]);//ca sa le ai afisate corespunzator in html
//elimini preventiv alte dracii care ar putea afecta citirea corecta
$replace = array("\t", "\n", "\r\n", "\f","\r");
$banc=str_replace($replace,'',$banc)."\n";
//dupa care scrii $banc in text file.
cosminnuss
13th January 2006, 23:41
pai exact in fisierul .txt e problema... Scriptu de mai sus considera ca fiind un banc pana acolo unde intalneste un capat de linie...
Incearca ceva de genu:
CODE
Sotia: Ai facut cumparaturile?<br>Sotul: Bad command or filename.<br>Sotia: Dar te-am rugat de dimineata...<br>Sotul: Syntax Error. Abort?<br>Sotia: Nici macar noul televizor?<br>...
...si tot asa
Acolo unde vrei sa se termine bancul pui un capat de linie (un enter, \n... zi-i cum vrei)
Asta este o metoda... Nu cea mai eleganta dar poti sa-ti faci o idee
NemoXP
13th January 2006, 23:46
si ca sa considere capat de banc acolo unde gaseste <br> ?
cosminnuss
13th January 2006, 23:49
va considera capat de banc peste tot pe unde este un "capat de linie" (tot una cu \n)
deci nu-ti mai convine metoda cu file()?
NemoXP
13th January 2006, 23:52
pai sa ia <br> -urile ca capat de banc cum se face? ca e mult prea complicat la fiecare banc sa bag br-uri... inebunesc...
aia cu file() nu prea am inteles-o...
ada80ro
13th January 2006, 23:56
QUOTE(NemoXP @ Jan 13 2006, 23:46)

si ca sa considere capat de banc acolo unde gaseste <br> ?
NU.
Nu ai inteles nimic.
Tu in momenut in care scrii un banc in textarea faci ceva de genul:
Adam, ce zici, ma, îti fac o femeie?[apesi enter]
- Ce-i aia, Doamne?[apesi enter]
- Ah! E-o chestie misto de tot! Frumoasa, desteapta, întelegatoare, iubitoare, temperamentala... ce mai![apesi enter]
etc.
In momenul in care apesi un enter se introduce in text un caracter "\n" ("\r\n") iar functia file() face un array din fisierul respectiv, fiecare element din array reprezentand o linie de text (prin linie intelegand textul pana la un \n inclusiv).
Deci asta inseamna ca daca parcurgi elementele array-ului respectiv cu un for o sa-ti afiseze patru linii pe pagina, nu patru bancuri.
Daca vrei sa-ti afiseze pantru bancuri atunci nu trebuie sa ai alt caracter "\n" in afara de cel de la sfarsitul bancului.
$banc=nl2br($_POST['banc]) introduce niste taguri <br> inaintea "\n" ca sa pastrezi totusi strucutura bancului, altfel era tot pe aceeasi linie daca elimini "\n".
Dupa asta elimini toate ws-urile preventiv si adaugi la sfarsitul bancului caracterul "\n" pentru demarcaj.
$replace = array("\t", "\n", "\r\n", "\f","\r");
$banc=str_replace($replace,'',$banc)."\n";
Este clar acum?
cosminnuss
13th January 2006, 23:59
hmm.... O sa astept un CEC de 1 mil de para de la tine pentru raspunsu asta 
CODE
$bancuri=file_get_contents("file.txt");
//array cu toate bancurile
$bancuri_ar=explode("|",$bancuri);
-adapteaza codu asta la ce ai tu
-foloseste "|" pentru capat de banc
NemoXP
13th January 2006, 23:59
//modified
unde pun asta? dupa $lines = file('text.txt'); ?
si ce ar mai trebui modificat? eu ist mai greu de cap..
Aceasta este o versiune simplificată a paginii originale. Pentru a vizita versiunea originala
click aici.