![]() ![]() |
Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 7.06.2002 Ostrzeżenie: (0%)
|
problem taki:
w pliku dane sa tak zapisywane: nr||nazwa||rodzaj||ile||autor||nr2 i zrobilem skrypt do modyfikacji tego wpisu , teorytycznie wg. mnie jest dobry tylko cos nie dziala o to skrypt: <? $dane="$id||$nazwa||$rodzaj||$cd||$autor||2||n"; $dfile="gry/gry.db"; } $file = file($dfile); $total = count($file); for($i=0; $total > $i; $i++){ $split = explode("||", $file[$i]); if($split[0] == "$id"){ $przed = "$split[0]||$split[1]||$split[2]||$split[3]||$split[4]||$split[5]||n"; $po = "$dane"; $fp = fopen($dfile, "r"); flock($fp,1); $zaw = fread($fp, filesize($dfile)); fclose($fp); $po = str_replace("$przed","$po", $zaw); $fp = fopen($dfile, "w"); flock($fp,2); fwrite($fp, $po); fclose($fp); echo"<center>Zmiany zostały zapisane"; } ?> moze wiecie jak mi pomoc (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) lub znacie jakis inny sposob na modyfikowanie danej linijki ? |
|
|
|
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 7.06.2002 Ostrzeżenie: (0%)
|
nikt mi nie pomoze ;( (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
|
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 296 Pomógł: 0 Dołączył: 9.05.2002 Skąd: Warszawa Ostrzeżenie: (0%)
|
CZ! Najprosciej bedzie zrobic kazda linijke w osobnym pliku, ale skoro sie upierasz...
Kod //linia danych: $id | $nazwa | $costam1 | $costam2 |
$plik = fopen("dane.db", "r"); $nr=0; while (!feof($plik)) { $linia[$nr] = fgets($plik, 4096); $nr++; } fclose($plik); // teraz cały plik mamy w tablicach. zmieniamy wpis o $id = 014 for ($i=0; $i<=$nr: $i++) { if($linia[$i]{0}.$linia[$i]{1}.$linia[$i]{2} == "014"){$ch_ln=$i;} } // znaleźliśmy linię, którą chcemy zmienić $tab = explode(" | ", $linia[$ch_ln]); $linia[$ch_ln]= $tab[0]." | ".$tab[1]." | "."dupa | ".$tab[3]." | "; // nie znam innej metody czyszczenia pliku: $plik = fopen("dane.db", "w"); fclose($plik); // zapisujemy zmieniona tablice $plik = fopen("dane.db", "a"); for ($i=0; $i<=$nr: $i++) { fputs($plik, $linia[$i]."n"); } fclose($plik); Chyba nic nie popieprzylem?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) |
|
|
|
Post
#4
|
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 7.06.2002 Ostrzeżenie: (0%)
|
zle zapytalem...chodzi mi o zmiane jakiegos pola w danej linijce ktore jest oddzielone ||, sprawdz moj skrypt i powiedz czy ci dziala
|
|
|
|
Post
#5
|
|
|
Grupa: Zarejestrowani Postów: 296 Pomógł: 0 Dołączył: 9.05.2002 Skąd: Warszawa Ostrzeżenie: (0%)
|
Cytat zle zapytalem...chodzi mi o zmiane jakiegos pola w danej linijce ktore jest oddzielone ||, sprawdz moj skrypt i powiedz czy ci dziala
Totez napisalem Ci jak ja zmodyfikowac... tyle, ze w moim skrypcie komorki, czy tez wg Ciebie 'pola' sa oddzielona " | ", zamiast tego daj "||" i bedzie po Twojemu. Twój skrypt u mnie tez nie dziala, ale nie bede wnikal dlaczego. |
|
|
|
Post
#6
|
|
|
Grupa: Zarejestrowani Postów: 456 Pomógł: 0 Dołączył: -- Ostrzeżenie: (0%)
|
Cytat problem taki:
w pliku dane sa tak zapisywane: nr||nazwa||rodzaj||ile||autor||nr2 i zrobilem skrypt do modyfikacji tego wpisu , teorytycznie wg. mnie jest dobry tylko cos nie dziala o to skrypt: <? $dane="$id||$nazwa||$rodzaj||$cd||$autor||2||n"; te wszystkie zmienne zakladam ze masz gdzies zadeklarowane? Cytat $dfile="gry/gry.db";
} po co ta klamra? Cytat $file = file($dfile);
$total = count($file); for($i=0; $total > $i; $i++){ $split = explode("||", $file[$i]); if($split[0] == "$id"){ $przed = "$split[0]||$split[1]||$split[2]||$split[3]||$split[4]||$split[5]||n"; jak sie juz uparles tak to dlaczego nie $przed=$file[$i] Cytat $po = "$dane"; $fp = fopen($dfile, "r"); flock($fp,1); $zaw = fread($fp, filesize($dfile)); fclose($fp); $po = str_replace("$przed","$po", $zaw); $fp = fopen($dfile, "w"); flock($fp,2); fwrite($fp, $po); fclose($fp); echo"<center>Zmiany zostały zapisane"; } brakuje zamkniecia klamra petli for() Cytat ?>
moze wiecie jak mi pomoc (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) lub znacie jakis inny sposob na modyfikowanie danej linijki ? strasznie dziwnie do tego podchodzisz 8O np: Kod <? jedna z mozliwosci
$idLiniDoZmiany=13; $daneDoZmiany="13||autor||tytul||cd||cosTamPoZmianien"; $plik='plik.db'; $f=file($plik); for($i=0;$i<count($f);$i++){ $ex=explode('||',$f[$i]); if($ex[0]==$idLiniDoZmiany){ $f[$i]=$daneDoZmiany; break; } } $fp=fopen($plik,"w"); fwrite($fp,implode('',$f)); fclose($fp); ?> :wink: |
|
|
|
Post
#7
|
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 7.06.2002 Ostrzeżenie: (0%)
|
thx man !! dziala ok
|
|
|
|
Post
#8
|
|
|
Grupa: Zarejestrowani Postów: 26 Pomógł: 0 Dołączył: 16.10.2002 Skąd: Kraków Ostrzeżenie: (0%)
|
Naprawde ciekawe.
Cytat Kod $plik = fopen("dane.db", "r"); $nr=0; while (!feof($plik)) { $linia[$nr] = fgets($plik, 4096); $nr++; } fclose($plik); // teraz cały plik mamy w tablicach. Ale chyba cały urok php polega na tym, że "wszystko" zoastało już napisane, sam język posiada duuuuuuużo funkcji a my musimy nauczyć się ich szukać i używać. Więc czy nie prościej będzie: Kod $tablica=file("dane.db");
|
|
|
|
Post
#9
|
|
|
Grupa: Zarejestrowani Postów: 296 Pomógł: 0 Dołączył: 9.05.2002 Skąd: Warszawa Ostrzeżenie: (0%)
|
Cytat Naprawde ciekawe.
Cytat Kod $plik = fopen("dane.db", "r"); $nr=0; while (!feof($plik)) { $linia[$nr] = fgets($plik, 4096); $nr++; } fclose($plik); // teraz cały plik mamy w tablicach. Ale chyba cały urok php polega na tym, że "wszystko" zoastało już napisane, sam język posiada duuuuuuużo funkcji a my musimy nauczyć się ich szukać i używać. Więc czy nie prościej będzie: Kod $tablica=file("dane.db"); Masz racje. Z braku czasu staram sie wykorzystywac znane mi funkcje. Po prostu jak znajde cos, co dziala, nie szukam dalej, ale na dluzsza mete, to oczywiscie blad. Dzieki za lekcje! (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) |
|
|
|
Post
#10
|
|
|
Grupa: Zarejestrowani Postów: 456 Pomógł: 0 Dołączył: -- Ostrzeżenie: (0%)
|
Cytat Naprawde ciekawe.
Cytat Kod $plik = fopen("dane.db", "r"); $nr=0; while (!feof($plik)) { $linia[$nr] = fgets($plik, 4096); $nr++; } fclose($plik); // teraz cały plik mamy w tablicach. Ale chyba cały urok php polega na tym, że "wszystko" zoastało już napisane, sam język posiada duuuuuuużo funkcji a my musimy nauczyć się ich szukać i używać. Więc czy nie prościej będzie: Kod $tablica=file("dane.db"); spoko... ...tylko ze file() przy B.DUZYCH plikach sie czasami wychrzania a zczytywanie po lini pliku nie :wink: |
|
|
|
Post
#11
|
|
|
Grupa: Zarejestrowani Postów: 26 Pomógł: 0 Dołączył: 16.10.2002 Skąd: Kraków Ostrzeżenie: (0%)
|
Cytat spoko...
...tylko ze file() przy B.DUZYCH plikach sie czasami wychrzania a zczytywanie po lini pliku nie :wink: Tak, a co gdy : - w pliku mamy jedną B. DUŻĄ linijkę - linijki są bardzo małe a my marnujemy pamięć (4096) Jak wiadomo niema idealnych rozwiązań a wszystko zależy od problemu. "Punkt widzenia zależy od punktu siedzenia", "wszystko jest względne" |
|
|
|
Post
#12
|
|
|
Grupa: Zarejestrowani Postów: 456 Pomógł: 0 Dołączył: -- Ostrzeżenie: (0%)
|
Cytat Tak, a co gdy :
- w pliku mamy jedną B. DUŻĄ linijkę - linijki są bardzo małe a my marnujemy pamięć (4096) to tylko bufer...a jak zajgladales w zrodla php to wiesz jak pracuje file() :wink: Cytat Jak wiadomo niema idealnych rozwiązań a wszystko zależy od problemu.
"Punkt widzenia zależy od punktu siedzenia", "wszystko jest względne" madre slowa :!: a jak widziales wyzej tez uzylem file() bo jest wygodniej a dodalem to tylko tak co by sie czleczki czasami nie dziwili gdy skrpty sie wychrzani uzywajac file() :wink: |
|
|
|
![]() ![]() |
|
Aktualny czas: 23.12.2025 - 20:40 |