Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]dane z pliku txt na stronie www za pomocą php
Forum PHP.pl > Forum > Przedszkole
amatorph
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ę
johny_s
http://php.net/manual/en/function.fgetcsv.php
amatorph
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?

fate
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. ?>
amatorph
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ę.



fate
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.
zielu001
Użyj sscanfa, jedna linijka kodu, a dane potem wyciagasz z tablicy, zero kombinowania z prehistoruycznym kodem
amatorph
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.
fate
$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
amatorph
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?
viking
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?
amatorph
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ć?
viking
Przy wyświetlaniu używaj htmlentities lub projekty typu htmlpurifier.
amatorph
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ć?
viking
  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.
amatorph
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?
viking
Zostawiłem niepotrzebnie. Zastąp linię 30, 29 wyrzuć:

$conf=explode ('|', $file[$go-1]);
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.