skrypt wyświetla tabelę, wypełnioną danymi pobranymi z bazy danych, daje też możliwość zapisu do pliku tekstowego.
W bazie danych znajduje się więcej rekordów.
Całość składa się z trzech plików:
f_baza.txt
formularz.php
<?php // plik konfiguracyjny include '01_config.php'; // połaczenie z bazą db_connect(); // dane do połączenia if($select_db) { } else { } // zapytanie do bazy $query = "SELECT user_id, user_email FROM users ORDER BY user_id ASC LIMIT 3"; { } { $out[]=$row; } foreach($out as $art) { { } { echo '<tr><td style="text-align:left"><input type="text" name="pole_01" style="width:140px" value="EMAIL;TYPE=INTERNET:"></td>'; echo '<td style="text-align:left"><input type="text" name="pole_02" style="width:200px" value="'.htmlspecialchars($art['user_email'],ENT_QUOTES).'"></td></tr>'; } else { // dane pochodzące z formularza $dane = $pole_01."".$pole_02."\n"; // przypisanie zmniennej $file nazwy pliku $file = "f_baza.txt"; // uchwyt pliku, otwarcie do dopisania // blokada pliku do zapisu // zapisanie danych do pliku // odblokowanie pliku // zamknięcie pliku } } db_close(); ?>
f_podglad.php
<?php /********************************************* * plik podglad.php *********************************************/ // wczytanie zawartości pliku do tablicy // przechodzimy przez tablicę za pomocą pętli foreach foreach($file as $value) { // rozbijamy poszczególne linie na części // wyświetlamy rozbity tekst } ?>
Zapytanie wywołuje wyświetlenie trzech pozycji - wyświetlają się prawidłowo w tabeli. Problem polega na tym, że do pliku tekstowego zapisuje się tylko ostatni rekord. Nie wiem jak to zrobić aby zapisywane były wszystkie pobrane z bazy i wyświetlane dane.
Spędziłem już sporo czasu na poszukiwaniach, ale nic na temat zapisu (wyświetlonych wyników pobranych z bazy danych) do txt nie znalazłem.
Może jeszcze dodam co chciałbym dokładnie osiągnąć:
1. Pobieram dane z bazy
2. Wyświetlam w tabeli (nie koniecznie)
3. Zapisuję do pliku tekstowego wszystkie wyniki (zależne od zapytania)
Skrypt ma tworzyć wizytówki vCard (poprawiłem temat), będę pobierał takie dane:
1. imię
2. nazwisko
3. email
4. nr tel wewnętrznego
5. nr tel komórkowego
w takiej postaci:
BEGIN:VCARD X-LOTUS-CHARSET:windows-1252 VERSION:3.0 ORG:jakas_organizacja EMAIL;TYPE=INTERNET:email_z_bazy@domena.com.pl TEL;TYPE=WORK:nr_kom_z_bazy TEL;TYPE=HOME:8_nr_wewn_z_bazy N:nazwisko_z_bazy;imie_z_bazy;;; FN:imie_z_bazy nazwisko_z_bazy END:VCARD
Proszę o pomoc.
Problem częściowo rozwiązany, pomógł mi kolega e-mega, przepisując mój skrypt na taki:
<?php { 'user_email'=>'jan@brzechwa.pl', 'nr_kom_z_bazy'=>'500500500', 'nr_wewn_z_bazy'=>'627007070', 'nazwisko_z_bazy'=>'Brzechwa', 'imie_z_bazy'=>'Jan', 'organizacja'=>'Poeci' ), 'user_email'=>'adam@mickiewicz.pl', 'nr_kom_z_bazy'=>'500200200', 'nr_wewn_z_bazy'=>'627008080', 'nazwisko_z_bazy'=>'Mickiewicz', 'imie_z_bazy'=>'Adam', 'organizacja'=>'Poeci' ), 'user_email'=>'jan@kochanowski.pl', 'nr_kom_z_bazy'=>'500100100', 'nr_wewn_z_bazy'=>'627005050', 'nazwisko_z_bazy'=>'Kochanowski', 'imie_z_bazy'=>'Jan', 'organizacja'=>'Poeci' ), 'user_email'=>'adam@asnyk.pl', 'nr_kom_z_bazy'=>'50000000', 'nr_wewn_z_bazy'=>'627001010', 'nazwisko_z_bazy'=>'Asnyk', 'imie_z_bazy'=>'Adam', 'organizacja'=>'Poeci' ) ); $i=0; foreach($out as $art){ echo <<<EOT <textarea name="text$i" style="width:450px; height:190px; border: 3px solid #cccccc; font-family: Tahoma, sans-serif; font-size: 12px;"> BEGIN:VCARD X-LOTUS-CHARSET:windows-1250 VERSION:3.0 ORG:{$art['organizacja']} EMAIL;TYPE=INTERNET:{$art['user_email']} TEL;TYPE=WORK:{$art['nr_kom_z_bazy']} TEL;TYPE=HOME:{$art['nr_wewn_z_bazy']} N:{$art['nazwisko_z_bazy']};{$art['imie_z_bazy']};;; FN:{$art['imie_z_bazy']} {$art['nazwisko_z_bazy']} END:VCARD </textarea><br/> EOT; $i++; } // przypisanie zmniennej $file nazwy pliku $file = "f_baza.txt"; // uchwyt pliku, otwarcie do dopisania // blokada pliku do zapisu // zapisanie danych do pliku // odblokowanie pliku // zamknięcie pliku }else{ } ?>
Zamiast tablicy $out umieściłem swój kod z pobieraniem danych z bazy. Wizytówki wyświetlają się prawidłowo (z pobranymi danymi z bazy) zapisują się również poprawnie do pliku tekstowego.
Problem, który pozostał to ilość zapisywanych wizytówek (cztery, ponieważ zapis ogranicza tablica). Wcześniej napisałem, że w bazie mam więcej rekordów z których będę pobierał dane. Z mojego zapytania usunąłem "LIMIT" (który był tylko dla uproszczenia). Ilość rekordów w bazie będzie się z czasem zwiększała.
I tu mam problem, bo nie mogę zastosować tych części powyższego kodu:
oraz
// zapisanie danych do pliku
ponieważ zapisują się tylko 4 wizytówki.
Obecny kod przedstawia się następująco:
<?php // plik konfiguracyjny include '01_config.php'; // połaczenie z bazą db_connect(); // dane do połączenia if($select_db) { } else { } // zapytanie do bazy { $query = "SELECT user_id, user_email, user_firstn, user_lastn, user_kom, user_wew FROM users WHERE user_position = 'yes' ORDER BY user_id ASC"; { } { $out[]=$row; } $i=0; foreach($out as $art){ echo <<<EOT <textarea name="text$i" style="width:450px; height:190px; border: 3px solid #cccccc; font-family: Tahoma, sans-serif; font-size: 12px; padding:15px; background:#eee"> BEGIN:VCARD X-LOTUS-CHARSET:windows-1250 VERSION:3.0 ORG:Plastica EMAIL;TYPE=INTERNET:{$art['user_email']} TEL;TYPE=WORK:{$art['user_kom']} TEL;TYPE=HOME:{$art['user_wew']} N:{$art['user_lastn']};{$art['user_firstn']};;; FN:{$art['user_firstn']} {$art['user_lastn']} END:VCARD </textarea><br/><hr /> EOT; $i++; } // przypisanie zmniennej $file nazwy pliku $file = "f_baza.txt"; // uchwyt pliku, otwarcie do dopisania // blokada pliku do zapisu // zapisanie danych do pliku // odblokowanie pliku // zamknięcie pliku }else{ } db_close(); ?>
W zapytaniu dodałem klauzulę "WHERE" ponieważ chciałbym wyświetlać tylko takie rekordy, które spełniają owy warunek.
Pomyślałem, że może trzeba policzyć ile takich rekordów występuje a następnie pobrać (tylko z nich) i zapisać dane do wizytówek. Niestety nie wiem czy to dobry pomysł i jak sobie z tym poradzić.