• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Prpblem z odczytywaniem enterów w pliku "*.txt"

Object Storage Arubacloud
0 głosów
327 wizyt
pytanie zadane 5 stycznia 2016 w PHP przez SkilletSS Nowicjusz (240 p.)
zamknięte 6 stycznia 2016 przez SkilletSS

Witam... Mam problem, a mianowocie: 

Mam plik index.php który wygląda tak:

<?php

	session_start();
?>
<!DOCTYPE HTML>
<html>
	<head>
		<meta charset="utf-8" />
		<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
		<meta author="SkiLLet_sS" />
		<meta keywords="Opowiadania, SkiLLet_sS" />
		<link rel="stylesheet" href="/styles/mainstyle.css" />
		<link rel="stylesheet" href="/styles/mainstylehistory.css" />
		<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
		<style>
			#commentbox
			{
				border: 2px double Blue;
			}
		</style>
		<title>
			SkiLLet_sS - Love with bad End
		</title>
	</head>
	<body>
<?php
if($_SESSION['user']=="Skillet")
{
echo<<<ENDADMIN
<form align="center" method="post" action="addop.php">
<textarea warp=" physical " cols="100" rows="20" name="kom"></textarea><br />
<input type="submit" value="Dodaj"/>
</form>
ENDADMIN;
}
$fp = fopen("op.txt" , "r");
while(!feof($fp))
{
$linia = fgets($fp);
if($linia == "\n")
{
$linia = "<br />";
}
if($linia == "#com#\n")
{
$linia = '<div style="color: White; background-color: Black;">';
}
if($linia == "#ecom#\n")
{
$linia = '</div>';
}
$zawartosc .= $linia; 
} 
echo $zawartosc;
?>
	</body>
</Html>

I mam także plik addop.php : 

<?php

session_start();
$komentarz = $_POST['kom'];
$kpp = "#com#\n".$komentarz."\n"."#ecom#\n";
$f = fopen("op.txt" , "a");
fwrite($f , $kpp);
header('Location: /opowiadania/lwbe');
exit();
?>

plik op.txt jest pusty.

Jak w pole o nazwie "kom" wpisuje tekst z enterami, to plik index.php, który odczutuje plik op.txt, nie czyta enterów i nie daje "br'ów", choć w pliku op.txt są linijki z "\n"... Jakby ktoś mógł mi pomóc, ponieważ mam zamiar zrobić z tego skryptu blog na mojej stronie, a bez tych "br'ów" będzie ciężko...

Edit dla @kantekand: Tekst, który wpisuje w polu tekstowym to: Lorum ipsum
Lorumipsum
Lorumipsum
W pliku op.txt pojawia się:
#com#
Lorum ipsum
Lorumipsum
Lorumipsum
#ecom#
, a na stronie widnieje:
Lorum ipsum Lorumipsum Lorumipsum
(
Lorum ipsum

Lorumipsum

Lorumipsum

)
a ma być:
Lorum ipsum
Lorumipsum
Lorumipsum
(
 Lorum ipsum


Lorumipsum
Lorumipsum
komentarz zamknięcia: Problem rozwiązany

3 odpowiedzi

0 głosów
odpowiedź 6 stycznia 2016 przez SkilletSS Nowicjusz (240 p.)
 
Najlepsza
Już rozwiązałem... Usunąłem linię if($linia =="\n") $linia = '
< br /> '; i w ostatniej linijce zamieniłem z "echo $zawartosc;" na "echo nl2br($zawartosc);"
0 głosów
odpowiedź 6 stycznia 2016 przez kantekand Obywatel (1,180 p.)
zamieść parę linijek tego op.txt chciałbym zobaczyć jakie tam są znaki

poza tym myślę, że lepiej tu użyć coś takiego

 

$file = file('op.txt'); //dane z pliku są teraz w tablicy

$nowe_wartosci = array();   //tablica na nowe przetworzone dane

foreach ($file as $wiersz)
{

  $wiersz = trim($wiersz);

     switch($wiersz)

   {

       case "\n":

          $nowe_wartosci[] = "<br />";

      break;

  ..... // kolejne opcje

 

      //linia która ma być bez zmiany

     default:

        $nowe_wartosci[] = $wiersz;

    break;

   }

}
komentarz 6 stycznia 2016 przez efiku Szeryf (75,160 p.)

Brak TDD :)  wszystkie znaki końca nowej linii będą usunięte, a puste nowe linie zamienione na "".  Co oznacza, że w switch raczej może nie wejść. +1 za foreach. $nowe_wartosci = [] ;  Jest funkcja nl2br; Zamiast tego switcha dałbym in_array .

https://php-kurs.gitbooks.io/phpkurs/content/czesc-i/tablice.html

https://github.com/efiku/SimpleParser

 

...............................
serialize()  i unserialize() :)

komentarz 6 stycznia 2016 przez SkilletSS Nowicjusz (240 p.)
A da się zrobić tak, aby nie usuwało znaków końca linii?? Czy nie??
komentarz 6 stycznia 2016 przez kantekand Obywatel (1,180 p.)
edycja 6 stycznia 2016 przez kantekand

jak @efik podpowiedział wykorzystaj nl2br i "się da"

<?php
$file = file('op.txt'); 					//dane z pliku są teraz w tablicy
$opowiadanie = implode($file);				//teraz tablica jest stringiem

$stare_otwarcie_diva = '#com#';
$nowe_otwarcie_diva = '<div style="color: White; background-color: Black;">';
$stare_zamkniecie_diva = '#ecom#';
$nowe_zamkniecie_diva = '</div>';

$opowiadanie = str_replace($stare_otwarcie_diva, $nowe_otwarcie_diva, $opowiadanie);
$opowiadanie = str_replace($stare_zamkniecie_diva, $nowe_zamkniecie_diva, $opowiadanie);

echo nl2br($opowiadanie);
?>

komentarz 6 stycznia 2016 przez kantekand Obywatel (1,180 p.)

inna wersja z wykorzystaniem tablic

<?php
$file = file('op.txt'); 					//dane z pliku są teraz w tablicy
$oryginaly = array('#com#','#ecom#');
$zamienniki = array('<div style="color: White; background-color: Black;">','</div>');
$opowiadanie = implode($file);
$opowiadanie = str_replace($oryginaly, $zamienniki, $opowiadanie);
echo nl2br($opowiadanie);
?>

 

komentarz 6 stycznia 2016 przez SkilletSS Nowicjusz (240 p.)
To wklejam i działa? Zamiast tych iifów w index.php?
komentarz 6 stycznia 2016 przez SkilletSS Nowicjusz (240 p.)
Ani jeden, ani drugi sposób nie działa... Nie wyświetla nic...
komentarz 6 stycznia 2016 przez SkilletSS Nowicjusz (240 p.)
edycja 6 stycznia 2016 przez SkilletSS
A jeśli chcecie wiedzieć to strpna, na której to testuje to skilletss.cba.pl/opowiadania/lwbe i na tej stronie mam mój skrypt kpmentarzy działający na tel samej zasadzie co skrypt użyty w index.php ale tam nie ma z tum problemy, no w komentarzu nie można używać u mnie enterów... A jakby ktoś chciał pogadać o problemie poza forum to zapraszam na Chat
0 głosów
odpowiedź 6 stycznia 2016 przez efiku Szeryf (75,160 p.)
Niestety nie umiem czytać kodu pomieszanego z HTML więc zapytam...

Dlaczego zdecydowałeś się na takie rozwiązanie a nie np. PDO + sqlite ( jak już chcesz trzymać w pliku takie komentarze ) ? Wtedy masz do dyspozycji prepared statements by ktoś Ci czegoś nie wstrzyknął na stronę ;)

Bardziej logiczny sposób to ( jeżeli chcesz iść swoją ścieżką ku ciemnej stronie mocy):

Zapis :
 Tablica = [  "username" => "Adam" , "commentDate" => 2016-01-10 23:31:12 , "content" => "postContent blablalba" ]

1. serialize(Tablica);

2. file_put_contents( punkt 1 );

Odczyt

1. file_get_contents( plik )

2 unserialize( punkt 1 )

3 otrzymujesz ponownie zapisaną tablicę z kluczami asocjacyjnymi.
komentarz 6 stycznia 2016 przez SkilletSS Nowicjusz (240 p.)
Tylko, że ten skrypt wpisywania wpisu (podany na samej górze) tulko ja mogę widzieć... (linijka if($_SESSION['user'])) Więc o wstrzykiwanie kodu się nie martwie...
komentarz 6 stycznia 2016 przez SkilletSS Nowicjusz (240 p.)
A poza tum nie wiem jak działa PDO i sqlite... :(
komentarz 6 stycznia 2016 przez efiku Szeryf (75,160 p.)
https://pl.wikibooks.org/wiki/PHP/Biblioteka_PDO no , to warto poczytać w sieci co to jest sqlite i jak ogarnąć z PDO. Bo jak wrócisz za kilka mies do swojego kodu to się złapiesz za głowę ^^ → ale każdy zaczynał kiedyś...

Podobne pytania

0 głosów
1 odpowiedź 105 wizyt
pytanie zadane 8 maja 2018 w PHP przez Browarnik123 Użytkownik (830 p.)
0 głosów
0 odpowiedzi 607 wizyt
pytanie zadane 17 maja 2021 w C i C++ przez ktoś123 Nowicjusz (180 p.)
0 głosów
1 odpowiedź 192 wizyt
pytanie zadane 23 lipca 2020 w Java przez sobussss Początkujący (350 p.)

92,617 zapytań

141,465 odpowiedzi

319,782 komentarzy

61,998 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...