![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 3.10.2002 Ostrzeżenie: (0%) ![]() ![]() |
Witam wszystkich.
Jestem poczatkujacym "programista" php... Mam problem ze zrobieniem skryptu: 1 - Skrypt musi pobierac dane z pliku cennik.csv, w ktorym sa 2 kolumny z danymi (w pierwszej kolumnie znajduje sie nazwa towaru, a w drugiej jego cena) oddzielone znakiem ";". Wygląda on tak: produkt;cena produkt;71.2 produkt;74.6 Dodam, ze w cenniku jest ponad 1700 pozycji (linii) i ta wartosc sie zmienia. 2 - Musi sprawdzac baze danych i jak znajdzie produkt o tej samej nazwie co w cenniku, to musi uaktualnic jego cene, cena z cennika. 3 - Byloby dobrze gdyby wyswietlal tez dane ktore zostaly zaktualizowane oraz ktore pozostaly bez zmian. Struktura tabeli podz_podzespoly: pid = ID produktu cid = ID kategorii produktu name = nazwa produktu cena = cena produktu opis = opis produktu Oto moj skrypt: <?php require ("config.php"); mysql_connect ($dbhost, $dbuname, $dbpass) or die ("Nie można poł±czyć się z MySQL"); mysql_select_db ($dbname) or die ("Nie można poł±czyć się z baz± '$dbname'."); $row = 1; $fp = fopen ("cennik.csv","r"); while ($data = fgetcsv ($fp, 1000, ";")) { $num = count ($data); $row++; for ($c=0; $c<$num; $c++) { $data[$c]; $query = "UPDATE podz_podzespoly SET cena='$data[$c]' WHERE name like '$row++'"; $wynik = mysql_query ($query); } } fclose ($fp); ?> Po 30sek dzialania mojego skryptu, wyskakuje blad: "Fatal error: Maximum execution time of 30 seconds exceeded in c:foxservwwwadminupdate1.php on line 19" Oczywiscie nie zmienia on cen w bazie danych ... Prosze pomozcie mi ... Kontakt ze mna: seba_wp@wp.pl gg: 2332 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Przyjaciele php.pl Postów: 398 Pomógł: 0 Dołączył: -- Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Rozumiem, że cennik zmienia się co jakiś czas i stary plik CSV zastępowany jest nowym plikiem CSV zawierającym aktualne dane?
Napiszę ci jak jak ja bym to rozwiązał. Co prawda pracujesz pod Windows'em i ten sposób Ci się nie sprawdzi (wymaga Linuxa) - ale byćmoże masz możliwość zmiany systemu lub skorzysta na tym opisie ktoś prócz Ciebie. Pierwsza sprawa: kiedy pojawia się nowy plik CSV nie nadpisujemy nim poprzedniego, tylko wykonujemy kopię aktualnego pod inną nazwą i dopiero wtedy wrzucamy nowy. Chodzi o to, by zawsze w katalogu były 2 pliki - cennik w wersji aktualnej i jego poprzednia wersja. Wykonujemy diff'a i wyjście przekierowujemy do osobnego pliku. Kod diff nowy_cennik.csv stary_cennik.csv > roznice.txt
Jaki będzie tego efekt? Przyjmijmy, że cenniki wyglądają tak: stary_cennik.csv: Kod towar_1;100.00
towar_2;200.00 towar_3;300.00 towar_4;400.00 towar_5;500.00 towar_6;600.00 towar_7;700.00 towar_8;800.00 nowy_cennik.csv: Kod towar_1;100.00
towar_2;200.00 towar_2_1;900.00 towar_3;300.00 towar_4;400.00 towar_5;950.00 towar_6;600.00 towar_8;800.00 Czyli w nowym cenniku zaszły 3 zmiany: 1. dodano nowy 'towar_2_1;900.00' 2. zmieniono cenę 'towar_5' z 500.00 na 950.00 3. usunięto 'towar_7' Co więc znajdziemy w pliku wynikowym? roznice.txt: Kod 2a3
> towar_2_1;900.00 5c6 < towar_5;500.00 --- > towar_5;950.00 7d7 < towar_7;700.00 Interpretacja tego pliku nie nastręcza chyba trudności. Kwestię użycia pliku roznice.txt do sporządzenia z poziomu php odpowiednich modyfikacji w bazie pominę - parę ifów i po sprawie. Jakie są zalety tego rozwiązania? Diff wykonuje operację porównania 2 plików w piorunującym tempie - możecie mi wierzyć, a my nie obciążamy niepotrzebnie bazy danych - na pewno taka modyfikacja nie przekroczy 30 sekund... Wsjo. :wink: -------------------- cease this long, long rest / wake and risk a foul weakness to live / when it all comes down / watch the smoke and bury the past again / sit and think what will come / raise your fears and cast them all away
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 3.10.2002 Ostrzeżenie: (0%) ![]() ![]() |
A nie da sie tego zrobic inaczej
![]() Kurcze, raczej nie mam mozliwosci przejscia na Linuxa ![]() Prosze o pomoc ... |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 26.06.2025 - 17:46 |