Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]dane z pliku txt na stronie www za pomocą php
amatorph
post
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 29.11.2014

Ostrzeżenie: (0%)
-----


Witam,
Mam takie pytanie: w zaki sposób można umieścić dane na stronie www z pliku txt. Chodzi mi o meta tagi, title i jakieś drobne informacje.
kod strony to:
  1. <?php
  2. // zmienna potrzebna do prawidlowego wczytania includowanych plikow
  3. $add_site = true;
  4. ?>
  5. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  6. <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2" />
  7. <meta http-equiv="Reply-to" content="kess@snug.pl" />
  8. <meta name="Author" content="Krzysztof Szypulski" />
  9. <title>Szablon strony WWW z wykorzystaniem PHP</title>
  10.  
  11.  
  12. </head>
  13.  
  14. </body>
  15. </html>


Jesto szablon pobrany ze strony http://www.kess.snug.pl/?pid=23&sid=10

i teraz chciałbym aby metatagi były wczytywane z pliku meta.txt:
  1. id|description|keywords|title|tekst1|tekst2|tekst3
  2. 1|description1|keywords1|title1|1tekst1|1tekst2|1tekst3
  3. 2|description2|keywords2|title2|2tekst1|2tekst2|2tekst3

Jak narazie utknąłem na tym że trzeba taki plik otworzyć w następujący sposób
  1. <?php
  2. $fp = fopen("meta.txt", "r");
  3. ?>

i siedzę nad tym już 2 dni.
Proszę o pomoc i z góry dziękuję

Ten post edytował amatorph 29.11.2014, 17:36:51
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 16)
johny_s
post
Post #2





Grupa: Zarejestrowani
Postów: 594
Pomógł: 122
Dołączył: 17.07.2005
Skąd: P-na

Ostrzeżenie: (0%)
-----


http://php.net/manual/en/function.fgetcsv.php
Go to the top of the page
+Quote Post
amatorph
post
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 29.11.2014

Ostrzeżenie: (0%)
-----


Cytat(johny_s @ 29.11.2014, 16:56:09 ) *


To nie może być aż tak skomplikowane.


Jeśli dobrze rozumiem działanie tego całego php to żeby wstawić tytuł strony myszę użyc funkcji echo:

  1. <title><?php echo $title ?></title>


a $title to zmienna i bedzie się ona zmieniała w zależności od id strony.

Pytanie moje jest takie czy ja nie zaczynam od końca i czy powyższe wnioski sa prawidłowe?

Go to the top of the page
+Quote Post
fate
post
Post #4





Grupa: Zarejestrowani
Postów: 824
Pomógł: 106
Dołączył: 14.03.2012
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Oj 2 dni
http://phpkurs.pl/operacje-na-plikach/

Najlepiej ugryź to od nowa
http://php.net/manual/pl/function.file.php
http://php.net/manual/en/function.explode.php

U mnie to wyglada tak bez zewn pliku:
  1. <?php
  2. switch ($_GET['page'])
  3. {
  4. case "home":
  5. $title= "Ardfgdfgdfgdfstyle "; echo $title;
  6. break;
  7. case "sklep":
  8. $title= "Ardgdfgdfgdfarszawa"; echo $title;
  9. break;
  10. case "marka":
  11. $title= "Ardfgdfgdfgd"; echo $title;
  12. break;
  13. }
  14. ?>


--------------------
Go to the top of the page
+Quote Post
amatorph
post
Post #5





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 29.11.2014

Ostrzeżenie: (0%)
-----


Dziękuję za odpowiedź. Mimo że nie jest to sposób w jaki chciałbym to zrobić, po zapoznaniu sie z treścią pod wskazanymi linkami dochodzę do wniosku żeby "zapoznać" konkretną stronę z komórką w tabeli muszę zastosować wyrażenie $_GET['go'];

  1. <?php
  2. $go = $_GET['go'];
  3. echo $go;
  4. ?>

echo $go jest narazie tylko do sprawdzenia czy dobrze rozumiem działanie tej funkcji. I faktycznie po kliknięciu ma link do strony np: /testphp/index.php?go=3 po zastosowaniu powyższego skryptu pojawia się na stronie "3". Wnioskuję z tego, że php będzie wiedziało z której linii id będzie miało pobierać informację.
Kolejne działania:
Sprawdzić w jaki sposób wczytać plik meta.txt
Eksplodować ten plik - czyli tak jakby przeformatować funkcją explode (chyba) na czytelny dla php jako tabela lub baza danych
Znaleźć sposób aby uzyskać z tabeli: $description, $keywords, $title, $tekst, $tekst2, $tekst3
Efekt będzie taki, że na stronie będę mógł zastosować skrypty:
echo $description, echo $keywords, echo $title, echo $tekst, echo $tekst2, echo $tekst3...
Proszę o pomoc: czy te działania i ich kolejność jest prawidlowa?
Jeszcze raz dziękuję.



Go to the top of the page
+Quote Post
fate
post
Post #6





Grupa: Zarejestrowani
Postów: 824
Pomógł: 106
Dołączył: 14.03.2012
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Widzę że raczkujemy graduated.gif
php będzie wiedziało z której linii id będzie miało pobierać informację.
Trzeba bedzie je nakierować

Sprawdzić w jaki sposób wczytać plik meta.txt
http://php.net/manual/pl/function.file.php
Za jej pomoca otrzymasz tablice zmiennych, $tablica[0] bedzie 1 linijka pliku $tablica[1] 2 linijka itd
nazwy plikow masz 1.html 2.html pamietaj ze gdy $_GET['go']=1 - 1 strona ty pobierasz z pliku 1 linijke ale w tablicy liczone jest od zera.
Mozesz to obejść i nazwać sobie plik 0.html wtedy bedziesz miał bez problemu sekret.gif

Eksplodować ten plik - czyli tak jakby przeformatować funkcją explode (chyba) na czytelny dla php jako tabela lub baza danych
explodowac $tablica[0] po znaku ktorym rozdzielasz"|" w wyniku otrzymasz tablice "zagnieżdzoną" (rozgałęzienie) $tablica[0][0] 1 wyraz 1 linijki $tablica[0][1] 2 wyraz 1 linijki
no i potem mozesz przypisac te wartosci do $description, $keywords, $title, $tekst, $tekst2, $tekst3

Sposoby które bedziesz wykorzystywał nie są super optymalne ale polecam przebrnąć je na początek, naucz się rozróżniać czym jest zmienna, tablica, funkcja, bazydanych to oddzielny temat ty narazie drążysz pliki tekstowe, życzę owocnej nauki.


--------------------
Go to the top of the page
+Quote Post
zielu001
post
Post #7





Grupa: Zarejestrowani
Postów: 87
Pomógł: 3
Dołączył: 15.08.2009

Ostrzeżenie: (0%)
-----


Użyj sscanfa, jedna linijka kodu, a dane potem wyciagasz z tablicy, zero kombinowania z prehistoruycznym kodem


--------------------
"Zło do triumfu potrzebuje tylko tego, aby dobrzy ludzie nic nie robili"
Go to the top of the page
+Quote Post
amatorph
post
Post #8





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 29.11.2014

Ostrzeżenie: (0%)
-----


Profesorze fate - wielkie dzięki za porady smile.gif

Skrypt juz powstał i działa. Ma on kilka rzeczy, które są dla mnie niezrozumiałe ale na małą amatorską stronkę www wystarczy.




  1. <?php
  2. $go = $_GET['go'];// php wie na której jest stronie
  3. $fp = fopen('meta.txt', 'r'); // otwarcie pliku tylko do odczytu ("r")
  4. flock($fp, 1); // blokowanie pliku do odczytu - czy trzeba tą funkcję uruchamiać i jakie są skutki uruchomienia bądź zaniechania
  5. $i = 0; // nie rozumiem dlaczego pojawia się ta zmienna i jakie są skutki uruchomienia bądź zaniechania
  6. while(!feof($fp) && $i < $go) { // do póki nie ma końca pliku lub nie ma linii z numeru strony
  7. $linia = fgets($fp, 2048); // pobranie jednej linii do zmiennej $linia
  8. $i++; // podwyższenie zmiennej $i o jeden - chyba dlatego, że php numeruje linie od 0 - czyli linia np linia 2 to dla php linia 1
  9. }
  10. flock($fp, 3); // odblokowanie pliku - dlaczego?
  11. fclose($fp); // zamknięcie pliku - dlaczego?
  12. $field = explode ('|', $linia); //eksplodowanie linii
  13. echo $field[0]; //test działania
  14. echo $field[1];
  15. echo $field[3];
  16. echo $field[4];
  17. echo $field[5];
  18. echo $field[6];
  19. echo $field[7];
  20. echo $field[8];
  21. ?>
  22. <?php echo $field[0];?> //test działania
  23. <?php echo $field[1];?>
  24. <?php echo $field[3];?>
  25. <?php echo $field[4];?>
  26. <?php echo $field[5];?>
  27. <?php echo $field[6];?>
  28. <?php echo $field[7];?>
  29. <?php echo $field[8];?>


a tutaj baza danych:
  1. 1|description1|keywords1|title1|tekstpierwszy1|tekstdrugi1|teksttrzeci1|stopka1
  2. 2|description2|keywords2|title2|tekstpierwszy2|tekstdrugi2|teksttrzeci2|stopka2
  3. 3|description3|keywords3|title3|tekstpierwszy3|tekstdrugi3|teksttrzeci3|stopka3
  4. 4|description4|keywords4|title4|tekstpierwszy4|tekstdrugi4|teksttrzeci4|stopka4
  5. 5|description5|keywords5|title5|tekstpierwszy5|tekstdrugi5|teksttrzeci5|stopka5
  6. 6|description6|keywords6|title6|tekstpierwszy6|tekstdrugi6|teksttrzeci6|stopka6
  7. 7|description7|keywords7|title7|tekstpierwszy7|tekstdrugi7|teksttrzeci7|stopka7
  8. 8|description8|keywords8|title8|tekstpierwszy8|tekstdrugi8|teksttrzeci8|stopka8

Proszę o krótkie skomentowanie wątpliwości, które umieściłem w opisach do linii skryptu.


Ten post edytował amatorph 30.11.2014, 14:56:34
Go to the top of the page
+Quote Post
fate
post
Post #9





Grupa: Zarejestrowani
Postów: 824
Pomógł: 106
Dołączył: 14.03.2012
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


$go = $_GET['go'];
mam wrazenie ze źle to pojmujesz i bez tego php bedzie "wiedziec" na ktorej jest stronie wystarczy ze $_GET['go'] istnieje mogloby byc np
$twojastara= $_GET['go']; i bedzie tak samo. Istnieja 2 metody przekazywania zmiannych miedzy stronami $_POST - formlaurze oraz $_GET w linku to bardzo ważny temat
Wstepne info:
http://webhosting.pl/GET.i.POST.Ktora.meto...naszych.potrzeb

blokowanie pliku do odczytu jest porzebne gdyby istaniala mozliwosc "publicznego" zapisu danych w tym pliku, czyli dopoki jest zablokowany inna osoba nie moze wejsc i zapisac swoich danych w miedzyczasie gdyby inna rowniez to robila, tylko tylko odczytujesz wiec nie dotyczy ale zostaw jako nawyk

$i = 0;
http://www.wykop.pl/wpis/8944814/zagadka-p...l-5-jablek-3-j/
dobry nawyk zerować, nawet i w php choc tu nie jest to konieczne zeby działało

$i++; //podwyższenie numeru żeby przejechać kolejny raz od poczatku pętlą, czyli wykonac funkcje na kolejnej linii i kolejnej, po opuszczeniu petli ze zmiennej $i mozna wyciagnac info ile razy wykonała się petla

flock($fp, 3); // odblokowanie pliku - wytlumaczone przy blokowaniu
fclose($fp); // zamknięcie pliku - zeby mozna bylo go otworzyc ponownie


--------------------
Go to the top of the page
+Quote Post
amatorph
post
Post #10





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 29.11.2014

Ostrzeżenie: (0%)
-----


Dzięki za pomoc. skrypt działa poprawnie. Napisałem też do mojej stronki małego CMSa.
Mam z nim jeden problem. Do każdej komórki bazy danych dodaje spację przy edycji. Jaka jest przyczyna?
index.php
  1. <?php
  2. // zmienna potrzebna do prawidlowego wczytania includowanych plikow
  3. $add_site = true;
  4. ?>
  5. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  6. <html>
  7. <?php
  8. $go = $_GET['go'];
  9. $fp = fopen('meta.csv', 'r'); // otwarcie pliku tylko do odczytu ("r")
  10. flock($fp, 1); // blokowanie pliku do odczytu
  11. $i = 0;
  12. while(!feof($fp) && $i < $go) { // do póki nie ma końca pliku lub nie ma linii
  13. $linia = fgets($fp, 25000); // pobranie jednej linii do zmiennej $linia
  14. $i++; // podwyższenie zmiennej $i o jeden
  15. }
  16. flock($fp, 3); // odblokowanie pliku
  17. fclose($fp); // zamknięcie pliku
  18. $conf=explode ('|', $linia);
  19.  
  20. echo "<form action='edit.php' method='POST'>
  21. CZĘŚĆ NIEWIDOCZNA - SEKCJA HEAD<br>
  22. <table>
  23. <tr>
  24. <td>id<br><textarea name='id' cols='25' rows='7'>$conf[0] </textarea></td>
  25. <td>description<br><textarea name='description' cols='40' rows='7'>$conf[1] </textarea></td>
  26. <td>keywords<br><textarea name='keywords' cols='40' rows='7'>$conf[2] </textarea></td>
  27. <td>title<br><textarea name='title' cols='40' rows='7'>$conf[3] </textarea><td></tr></table>
  28. CZĘŚĆ WIDOCZNA<br><br>
  29. Tytuł lewego dolnego tekstu - lewydolnytyt<br><textarea name='lewydolnytyt' cols='50' rows='1'>$conf[4] </textarea><br><br>
  30. Lewy dolny tekst - lewydolnytxt<br><textarea name='lewydolnytxt' cols='150' rows='7'>$conf[5] </textarea><br><br>
  31. <input type='submit' name='submit' value='zapisz' />"
  32. ?>


i plik edit.php
  1. <?
  2. $new=
  3. $_POST['id']. '|' .
  4. $_POST['description']. '|' .
  5. $_POST['keywords']. '|' .
  6. $_POST['title']. '|' .
  7. $_POST['lewydolnytyt']. '|' .
  8. $_POST['lewydolnytxt']. '|' .
  9.  
  10.  
  11. $new=stripslashes($new);
  12.  
  13.  
  14. function edycja_linii ($filename, $index, $line) {
  15. $file = file ($filename);
  16. $file[$index] = $line;//usunięty fragment powodował dodawanie linii . "\r\n";
  17. $fp = fopen ($filename, "w");
  18. flock($fp, LOCK_EX);
  19. for( $w = 0; $w < count($file); $w++ )
  20. {
  21. fwrite ($fp, $file[$w]);
  22. }
  23. flock($fp, LOCK_UN);
  24. fclose($fp);
  25. }
  26. //określenie która linia ma być zmieniona
  27. $nr = $_POST['nr'];
  28. $nrl=$nr-1;
  29. //uruchomienie funkcji zmiany danych w linii:
  30. edycja_linii ('meta.csv', $nrl , $new);
  31.  
  32. //zamienia linię pliku meta.csv na ciąg $new - czyli ciąg danych z formularza
  33.  
  34. echo '<a href="http://', $_SERVER['SERVER_NAME'], '/edycja/', $_POST['id'],'">Powrót do edycji ', $_POST['id'], '</a><br>';
  35. echo '<a href="http://', $_SERVER['SERVER_NAME'], '/', $_POST['id'],'" target=_blank>Sprawdzenie efektu zmian na stronie w nowym oknie ', $_POST['id'], '</a><br>';
  36. ?>


Własciwie to dodawanie spacji przy edycji nie miałoby znaczenia, jednak następujący warunek:
  1. <?if ( $src1l == NULL )
  2. {
  3. echo '';
  4. }
  5. else
  6. {
  7. echo '<img style="border: 0px solid ; width: ', $width1l , '; height: ', $height1l ,'; float: left" alt="',$alt1l,'" src="',$src1l, '">';
  8. }
  9. ?>


powoduje, że wkonywana jest część "else ....".
Tak się zaztanawiam jakby to ominąć. Czy jest możliwość żeby napisać ten warunek wg następującego schematu?

<?if ( $src1l == NULL lub same spacje )...
Może ktoś pomóc?



Zlecę poprwakę tego kodu.

Udało się ustalić dlaczego do komórek w tabeli jest dodawana spacja. Tam gdzie w pilku index.php jest $conf[1] itd ze spacją powinno się tą spację usunąć.
prawidłowy kod wygląda następująco:
  1. <?php
  2. // zmienna potrzebna do prawidlowego wczytania includowanych plikow
  3. $add_site = true;
  4. ?>
  5. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  6. <html>
  7. <?php
  8. $go = $_GET['go'];
  9. $fp = fopen('meta.csv', 'r'); // otwarcie pliku tylko do odczytu ("r")
  10. flock($fp, 1); // blokowanie pliku do odczytu
  11. $i = 0;
  12. while(!feof($fp) && $i < $go) { // do póki nie ma końca pliku lub nie ma linii
  13. $linia = fgets($fp, 25000); // pobranie jednej linii do zmiennej $linia
  14. $i++; // podwyższenie zmiennej $i o jeden
  15. }
  16. flock($fp, 3); // odblokowanie pliku
  17. fclose($fp); // zamknięcie pliku
  18. $conf=explode ('|', $linia);
  19.  
  20. echo "<form action='edit.php' method='POST'>
  21. CZĘŚĆ NIEWIDOCZNA - SEKCJA HEAD<br>
  22. <table>
  23. <tr>
  24. <td>id<br><textarea name='id' cols='25' rows='7'>$conf[0]</textarea></td>
  25. <td>description<br><textarea name='description' cols='40' rows='7'>$conf[1]</textarea></td>
  26. <td>keywords<br><textarea name='keywords' cols='40' rows='7'>$conf[2]</textarea></td>
  27. <td>title<br><textarea name='title' cols='40' rows='7'>$conf[3]</textarea><td></tr></table>
  28. CZĘŚĆ WIDOCZNA<br><br>
  29. Tytuł lewego dolnego tekstu - lewydolnytyt<br><textarea name='lewydolnytyt' cols='50' rows='1'>$conf[4]</textarea><br><br>
  30. Lewy dolny tekst - lewydolnytxt<br><textarea name='lewydolnytxt' cols='150' rows='7'>$conf[5]</textarea><br><br>
  31. <input type='submit' name='submit' value='zapisz' />"
  32. ?>

Dodatkowo skrypt z pliku edit.php nie działał prawidłowo ze względu na zapis w 16 linii: $file[$index] = $line;//usunięty fragment powodował dodawanie linii . "\r\n";
Tam powinno być:
  1. $file[$index] = $line. "\n\r";

W zasadzie to nie rozumiem dlaczego po \n nie dodaje linii. Z tego co rozumiem z opisów tak powinno być. Może ktoś doradzić?

A jednak dodaje linię. Sytuacja jest taka, że bez \n linia znajdująca się pod linią edytowaną wskakuje do linii edytowanej, a jak dodam \n to dodaje nową pustą linię. Jak to zrobić żeby było prawidłowo?


Ten post edytował amatorph 25.06.2016, 12:35:02
Go to the top of the page
+Quote Post
viking
post
Post #11





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


W twoim textarea widzę że masz spację po zmiennej.
Używaj pełnej składni <?php zamiast <?
Zamiast \r\n używaj PHP_EOL.
Nie myślałeś żeby zamiast rzeźbić w plikach użyć bazy danych SQLite?


--------------------
Go to the top of the page
+Quote Post
amatorph
post
Post #12





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 29.11.2014

Ostrzeżenie: (0%)
-----


Wielkie dzięki. PHP_EOL bardzo usprawniło całą sprawę. Co do rzeźbienia chyba się wstrzymam i następną modernizację zlecę profesjonaliście, chociaż to całe kodowanie to fajne zajęcie.
Jest jeszcze jedna rzecz, która mnie zastanawia. Czy nie byłoby warto zabezpieczyć plik bazy danych przed wstawieniem ciągu znaków, które nie wyświetlałyby się na stronie, a powodowały wykonywanie php. Jak np. w sytuacji gdy ktoś ma jakiś publicznie dostępny formularz na stronie, to tam można wpisać <?php PHP_EOL> i wtedy się wykona funkcja a oczekuje się żeby formularz przesłał ciąg znaków. Jak się domyślam, takie zabezpieczenie jest nawet na tym forum. Może ktoś skomentować?
Go to the top of the page
+Quote Post
viking
post
Post #13





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Przy wyświetlaniu używaj htmlentities lub projekty typu htmlpurifier.


--------------------
Go to the top of the page
+Quote Post
amatorph
post
Post #14





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 29.11.2014

Ostrzeżenie: (0%)
-----


Jednak PHP_EOL też nie działa prawidłowo. Chodzi o to, że ta funkcja też dodaje dodatkową linię. Poprzednio napisałem, że jest ok bo tak mi się wyświetlały strony. Było to chyba spowodowane zapisywaniem wersji strony w pamięci podręcznej lub może wczytałem stronę zanim zmiany dotarły na serwer.

Chciałbym przeedytować następujący plik meta.csv zmieniając w nim dane w drugiej linii:
  1. dane1|dane2|dane3|dane4|dane5|dane6|dane7|1
  2. dane1|dane2|dane3|dane4|dane5|dane6|dane7|2
  3. dane1|dane2|dane3|dane4|dane5|dane6|dane7|3
  4. dane1|dane2|dane3|dane4|dane5|dane6|dane7|4


Do tego celu mam formularz index.php:

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  2. <?php
  3. $go = $_GET['go'];
  4. $fp = fopen('meta.csv', 'r');
  5. flock($fp, 1);
  6. $i = 0;
  7. while(!feof($fp) && $i < $go) {
  8. $linia = fgets($fp, 200);
  9. $i++;
  10. }
  11. flock($fp, 3);
  12. fclose($fp);
  13. $conf=explode ('|', $linia);
  14.  
  15. echo "<form action='edit.php' method='POST'>
  16. <tr>
  17. <td>dane1<br><textarea name='dane1' cols='25' rows='7'>$conf[0]</textarea></td>
  18. <td>dane2<br><textarea name='dane2' cols='25' rows='7'>$conf[1]</textarea></td>
  19. <td>dane3<br><textarea name='dane3' cols='25' rows='7'>$conf[2]</textarea></td>
  20. <td>dane4<br><textarea name='dane4' cols='25' rows='7'>$conf[3]</textarea></td>
  21. <td>dane5<br><textarea name='dane5' cols='25' rows='7'>$conf[4]</textarea></td>
  22. <td>dane6<br><textarea name='dane6' cols='25' rows='7'>$conf[5]</textarea></td>
  23. <td>dane7<br><textarea name='dane7' cols='25' rows='7'>$conf[6]</textarea></td>
  24. <td>nr<br><textarea name='nr' cols='25' rows='7'>$conf[7]</textarea></td>
  25. <input type='submit' name='submit' value='zapisz' />"
  26. ?>
  27. </head>
  28.  
  29. <div class="nav">
  30. <a href="index.html" >Strona główna</a>
  31. <a href="strona1.html">strona1</a>
  32. <a href="strona2.html">strona1</a>
  33. <a href="strona3.html">strona1</a>
  34. </div>
  35. </body>
  36. </html>
  37.  


i dalej skrypt edit.php który zmienia dane:

  1. <?php
  2. $new=
  3. $_POST['dane1']. '|' .
  4. $_POST['dane2']. '|' .
  5. $_POST['dane3']. '|' .
  6. $_POST['dane4']. '|' .
  7. $_POST['dane5']. '|' .
  8. $_POST['dane6']. '|' .
  9. $_POST['dane7']. '|' .
  10. $_POST['nr'];
  11.  
  12. $new=stripslashes($new).PHP_EOL;
  13.  
  14.  
  15. function edycja_linii ($filename, $index, $line) {
  16. $file = file ($filename);
  17. $file[$index] = $line;
  18. $fp = fopen ($filename, "w");
  19. flock($fp, LOCK_EX);
  20. for( $w = 0; $w < count($file); $w++ )
  21. {
  22. fwrite ($fp, $file[$w]);
  23. }
  24. flock($fp, LOCK_UN);
  25. fclose($fp);
  26. }
  27. //określenie która linia ma być zmieniona
  28. $nr = $_POST['nr'];
  29. $nrl=$nr-1;
  30. //uruchomienie funkcji zmiany danych w linii:
  31. edycja_linii ('meta.csv', $nrl , $new);
  32. ?>
  33.  


Niestety efekt jest taki, że za każdym razem gdy próbuję edytować dane to przy każdym kolejnym razie skrypt dodaje linię jak poniżej:
1. plik oryginalny

  1. dane1|dane2|dane3|dane4|dane5|dane6|dane7|1[CR][LF]
  2. dane1|dane2|dane3|dane4|dane5|dane6|dane7|2[CR][LF]
  3. dane1|dane2|dane3|dane4|dane5|dane6|dane7|3[CR][LF]
  4. dane1|dane2|dane3|dane4|dane5|dane6|dane7|4[CR][LF]


2. Po zmianie danych w drugiej linii skrypt dodaje nową linię
  1. dane1|dane2|dane3|dane4|dane5|dane6|dane7|1[CR][LF]
  2. zmiana1|dane2|dane3|dane4|dane5|dane6|dane7|2[CR][LF]
  3. [LF]
  4. dane1|dane2|dane3|dane4|dane5|dane6|dane7|3[CR][LF]
  5. dane1|dane2|dane3|dane4|dane5|dane6|dane7|4[CR][LF]


3. Po każdej kolejnej zmianie danych jest tak samo.

  1. dane1|dane2|dane3|dane4|dane5|dane6|dane7|1[CR][LF]
  2. zmiana1|zmiana2|dane3|dane4|dane5|dane6|dane7|2[CR][LF]
  3. [LF]
  4. [LF]
  5. dane1|dane2|dane3|dane4|dane5|dane6|dane7|3[CR][LF]
  6. dane1|dane2|dane3|dane4|dane5|dane6|dane7|4[CR][LF]


W sumie to już próbowałem PHP_EOL w różnych kombinacjach, dodawałem też "\r\n" i same "\r" lub "\n". To nic nie daje.
W jaki sposób sobie z tym poradzić?

Ten post edytował amatorph 10.07.2016, 00:04:06
Go to the top of the page
+Quote Post
viking
post
Post #15





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  2. <html>
  3. <?php
  4. $go = $_GET['go'] ?? 1; //PHP7, if isset dla wcześniejszych
  5. $filename = 'meta.csv';
  6.  
  7. $file = file($filename, FILE_IGNORE_NEW_LINES);
  8.  
  9. if ('POST' === $_SERVER['REQUEST_METHOD'] && isset($_POST['submit'])) {
  10. // tu na szybko
  11. $newData = [
  12. $_POST['dane1'],
  13. $_POST['dane2'],
  14. $_POST['dane3'],
  15. $_POST['dane4'],
  16. $_POST['dane5'],
  17. $_POST['dane6'],
  18. $_POST['dane7'],
  19. $_POST['nr']
  20. ];
  21. $file[$go-1] = implode('|', $newData);
  22. $result = file_put_contents($filename, implode(PHP_EOL, $file));
  23. if ($result !== false) {
  24. echo 'Plik zapisany.';
  25. }
  26.  
  27. }
  28.  
  29. $data = array_map('str_getcsv', $file);
  30. $conf=explode ('|', $data[$go-1][0]);
  31.  
  32. // formularza nie powinno być jeżeli indeks nie został odnaleziony
  33. echo "<form action='' method='POST'>
  34. <table>
  35. <tr>
  36. <td>dane1<br><textarea name='dane1' cols='25' rows='7'>$conf[0]</textarea></td>
  37. <td>dane2<br><textarea name='dane2' cols='25' rows='7'>$conf[1]</textarea></td>
  38. <td>dane3<br><textarea name='dane3' cols='25' rows='7'>$conf[2]</textarea></td>
  39. <td>dane4<br><textarea name='dane4' cols='25' rows='7'>$conf[3]</textarea></td>
  40. <td>dane5<br><textarea name='dane5' cols='25' rows='7'>$conf[4]</textarea></td>
  41. <td>dane6<br><textarea name='dane6' cols='25' rows='7'>$conf[5]</textarea></td>
  42. <td>dane7<br><textarea name='dane7' cols='25' rows='7'>$conf[6]</textarea></td>
  43. <td>nr<br><textarea name='nr' cols='25' rows='7'>$conf[7]</textarea></td>
  44. <input type='submit' name='submit' value='zapisz' />"
  45. ?>
  46. <head>
  47. </head>
  48. <body>
  49.  
  50. <div class="nav">
  51. <a href="index.html" >Strona główna</a>
  52. <a href="strona1.html">strona1</a>
  53. <a href="strona2.html">strona1</a>
  54. <a href="strona3.html">strona1</a>
  55. </div>
  56. </body>
  57. </html>


Chociaż i tak powinieneś do tego użyć SQLite.

Ten post edytował viking 10.07.2016, 09:11:04


--------------------
Go to the top of the page
+Quote Post
amatorph
post
Post #16





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 29.11.2014

Ostrzeżenie: (0%)
-----


Dzięki za pomoc. Tam się pojawia tylko jeden problem. Skrypt pobiera dane do edycji tylko do pojawienia się przecinka. Jeśli w polu np. dane2 pojawi się przecinek zabawa się kończy. Nie wiem jak jest z innymi znakami. Bo dalej nie testowałem. Jaka może być przyczyna?
Go to the top of the page
+Quote Post
viking
post
Post #17





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Zostawiłem niepotrzebnie. Zastąp linię 30, 29 wyrzuć:

$conf=explode ('|', $file[$go-1]);


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 13:04