Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: uciekające znaczniki podziału ogłoszeń w pliku txt:(
Forum PHP.pl > Forum > Gotowe rozwiązania
andre991
Poniżej przedstawie problem.
wszystko gra, lecz w momecie usuwania dowolnego ogloszenia (np 5-go ogłoszenia z pliku z danymi ) uciekają gdzieś wszystkie znaczniki oddzielające te ogłoszenia.
Przedstawie ponizej kody plików:

Plik: do usuwania ogloszenia:
[php:1:7415147dcc]<?php
$linia = addslashes($_REQUEST['linia']);
$table=file("adv/dane_data.php");
unset($table[$linia]);
for($n=0;$n<count($table);$n++)
{
$table[$n]=chop($table[$n]);
}
$cale=implode("rn"$table);
$open=fopen("adv/dane_data.php", "w");
fwrite($open,chop($cale));
fclose($open);

?>[/php:1:7415147dcc]

plik do zapisywania ogloszenia:
[php:1:7415147dcc]<?php
$url="http://adres ulr";
$base="adv/dane_data.php"; // zczytuje plik do zmiennej
$table=file($base); // wczytuje plik to tablicy

// zliczanie ogloszen
for($i=0; $i<count($table); $i++)// petla kreci na ostatnia linie
{
$wiersz=explode("*|*", $table[$i]);// wiersz przypisujemy ostatnia linie
}
$id = $wiersz[4]+1; //powieksza o jeden id z odtatniego wiersza
// koniec zliczania

$date=date("d-m-Y"); // przypisuje zmiennej date dzien miesiac i rok
$data="$id_og*|*$kontakt*|*$tekst*|*$date*|*$id*|*$cena"; //przypisuje
zmiennej data wszystkie dane z formularza
$data=str_replace("rn", "<br>", $data);
$data="$datan";
$f=fopen($base, a); // otwiera plik z base
flock($f, 2); // blokuje plik
fputs($f, $data); // zapisuje zmienne data
flock($f, 3); // odblokowuje plik
fclose($f); // zapisuje plik
echo "Wpis został dodany...<br><a href=$url>Pokaż wpisy</a>"; // wyswietla napis

?>[/php:1:7415147dcc]

Pozdrwaim
zombie
Zgubiłeś przecinek. w linii 9 masz:
[php:1:2f63cb6620]<?php
$cale=implode("rn"$table);
?>[/php:1:2f63cb6620]
a powinno być
[php:1:2f63cb6620]<?php
$cale=implode("rn", $table);
?>[/php:1:2f63cb6620]
andre991
Cytat
Zgubiłeś przecinek. w linii 9 masz:
[php:1:f5a0398982]<?php
$cale=implode("rn"$table);
?>[/php:1:f5a0398982]
a powinno być
[php:1:f5a0398982]<?php
$cale=implode("rn", $table);
?>[/php:1:f5a0398982]


faktycznie zpomniałem dodać przecinka;] ale problem pozostaje:( doszedłem do wniosku iż plik odpowiadający za zapisanie danych do pliku dodaje go i na końcu umieszcza znacznik nowej lini "/n"" , a plik usuwający: dzieli dane z pliku na linie, i usuwa ten znacznik. No i w związku z tym proszę o pomoc.
zombie
[php:1:6553689da3]<?php
fwrite($open,chop($cale));
?>[/php:1:6553689da3]
wywal chop()
[php:1:6553689da3]<?php
fwrite($open,$cale);
?>[/php:1:6553689da3]
andre991
Cytat
[php:1:0622b2593d]<?php
fwrite($open,chop($cale));  
?>[/php:1:0622b2593d]
wywal chop()
[php:1:0622b2593d]<?php
fwrite($open,$cale);  
?>[/php:1:0622b2593d]


W sumie to nic nie zmieniło:) ale już chyba sobie poradziłem:
problem leżał w złym zapisywaniu danych do pliku przy usuwaniu, a konkretnie trzeba było dodać znak przejscia o linie nizej;]:

[php:1:0622b2593d]<?php
$linia = addslashes($_REQUEST['linia']);
$table=file("adv/dane_data.php");
unset($table[$linia]);
for($n=0;$n<count($table);$n++)
{
$table[$n]=chop($table[$n]);
}
$cale=implode("rn"$table);
$cale="$calern";
$open=fopen("adv/dane_data.php", "w");
fwrite($open,$cale);
fclose($open);
?>[/php:1:0622b2593d]

w kazdym bądź razie dziękuję za pomoc;]
pozdrawiam
zombie
Cytat
W sumie to nic nie zmieniło:) ale już chyba sobie poradziłem:  
problem leżał w złym zapisywaniu danych do pliku przy usuwaniu, a konkretnie trzeba było dodać znak przejscia o linie nizej;]:
[php:1:eabad096fc]<?php    
$cale="$calern";
?>[/php:1:eabad096fc]

a ja się upieram, że to przecinek przy implode. powyżej dodałeś tylko znak przejścia do linię niżej od ostatniej linii.
andre991
Cytat
Cytat
W sumie to nic nie zmieniło:) ale już chyba sobie poradziłem:  
problem leżał w złym zapisywaniu danych do pliku przy usuwaniu, a konkretnie trzeba było dodać znak przejscia o linie nizej;]:
[php:1:d5fe4d9c0b]<?php    
$cale="$calern";
?>[/php:1:d5fe4d9c0b]

a ja się upieram, że to przecinek przy implode. powyżej dodałeś tylko znak przejścia do linię niżej od ostatniej linii.


Przyznaję rację ,że przecinek powinien się tam znajdować (i się już znalazł 8) ) ale poprostu człowiek zapomniał;]hehe No i dodałem znak końca lini ponieważ w momencie gdy usuwałem ostanie ogłoszenie to ten sktrypt usuwał wraz z nim ostatni znak przejścia do następnej lini i w konsekwencji w chwili dopisywania nowego ogłoszenia, zostawało ono dopisane do ostatniego ogłoszenia w pliku a nie w nowej ninii;]

teraz już wszystko gra i trąbi;]

[php:1:d5fe4d9c0b]<?php

$linia = addslashes($_REQUEST['linia']);
$table=file("adv/dane_data.php");
unset($table[$linia]);
for($n=0;$n<count($table);$n++)
{
$table[$n]=chop($table[$n]);
}
$cale=implode("rn",$table);
$cale="$calern";
$open=fopen("adv/dane_data.php", "w");
fwrite($open,$cale);
fclose($open);

?>[/php:1:d5fe4d9c0b]

pozdrawiam

Ps. powiedz mi jeszcze czemu wcześniej ten chop miał być usunięty??
zombie
[manual:5f49d98689]chop[/manual:5f49d98689] to alias do [manual:5f49d98689]rtrim[/manual:5f49d98689], a więc usuwa znaki podziału /r/n. Dodawałeś je, a później usuwałeś przy zapisie. :wink:
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-2024 Invision Power Services, Inc.