Witam,
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
  1. <?php
  2. // plik konfiguracyjny
  3. include '01_config.php';
  4. // połaczenie z bazą
  5. db_connect();
  6. // dane do połączenia
  7. define('DB_HOST','localhost');
  8. define('DB_USER','root');
  9. define('DB_PASS','password');
  10. define('DB_NAME','moja_baza');
  11. $select_db = mysql_select_db(DB_NAME);
  12. if($select_db)
  13. {
  14. mysql_query("SET NAMES utf8");
  15. }
  16. else
  17. {
  18. die('Nie można się połączyć z bazą danych !');
  19. }
  20. // zapytanie do bazy
  21. $query = "SELECT user_id, user_email FROM users ORDER BY user_id ASC LIMIT 3";
  22. $result = mysql_query($query);
  23. if($result===false && trim(mysql_error))
  24. {
  25. echo("Błędne zapytanie: \n");
  26. }
  27. while($row = mysql_fetch_assoc($result))
  28. {
  29. $out[]=$row;
  30. }
  31. echo '<form action="" method="post"><table><tr><th>email</th></tr>';
  32. foreach($out as $art)
  33. {
  34. if(isset($_POST['pole_01'], $_POST['pole_02']))
  35. {
  36. $pole_01 = trim($_POST['pole_01']);
  37. $pole_02 = trim($_POST['pole_02']);
  38. }
  39. if(empty($pole_01) and empty($pole_02))
  40. {
  41. echo '<tr><td style="text-align:left"><input type="text" name="pole_01" style="width:140px" value="EMAIL;TYPE=INTERNET:"></td>';
  42. echo '<td style="text-align:left"><input type="text" name="pole_02" style="width:200px" value="'.htmlspecialchars($art['user_email'],ENT_QUOTES).'"></td></tr>';
  43. }
  44. else
  45. {
  46. // dane pochodzące z formularza
  47. $dane = $pole_01."".$pole_02."\n";
  48. // przypisanie zmniennej $file nazwy pliku
  49. $file = "f_baza.txt";
  50. // uchwyt pliku, otwarcie do dopisania
  51. $fp = fopen($file, "w");
  52. // blokada pliku do zapisu
  53. flock($fp, 2);
  54. // zapisanie danych do pliku
  55. fwrite($fp, $dane);
  56. // odblokowanie pliku
  57. flock($fp, 3);
  58. // zamknięcie pliku
  59. fclose($fp);
  60. echo "Dane zostały zapisane!<br />";
  61. echo "<a href=\"f_podglad.php\">Zobacz wpisane dane</a>";
  62. }
  63. }
  64. echo '</table><input type="submit" value="Zapisz do pliku" /></form>';
  65. db_close();
  66. ?>

f_podglad.php
  1. <?php
  2. /*********************************************
  3. * plik podglad.php
  4. *********************************************/
  5.  
  6. // wczytanie zawartości pliku do tablicy
  7. $file = file("f_baza.txt");
  8. // przechodzimy przez tablicę za pomocą pętli foreach
  9. foreach($file as $value) {
  10. // rozbijamy poszczególne linie na części
  11. $exp = explode("||",$value);
  12. // wyświetlamy rozbity tekst
  13. echo $exp[0]."<br /><hr />";
  14. }
  15.  
  16. ?>

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:
  1. BEGIN:VCARD
  2. X-LOTUS-CHARSET:windows-1252
  3. VERSION:3.0
  4. ORG:jakas_organizacja
  5. EMAIL;TYPE=INTERNET:email_z_bazy@domena.com.pl
  6. TEL;TYPE=WORK:nr_kom_z_bazy
  7. TEL;TYPE=HOME:8_nr_wewn_z_bazy
  8. N:nazwisko_z_bazy;imie_z_bazy;;;
  9. FN:imie_z_bazy nazwisko_z_bazy
  10. END:VCARD


Proszę o pomoc.

Problem częściowo rozwiązany, pomógł mi kolega e-mega, przepisując mój skrypt na taki:
  1. <?php
  2. if(empty($_POST))
  3. {
  4.  
  5. $out = array(
  6. 'user_email'=>'jan@brzechwa.pl',
  7. 'nr_kom_z_bazy'=>'500500500',
  8. 'nr_wewn_z_bazy'=>'627007070',
  9. 'nazwisko_z_bazy'=>'Brzechwa',
  10. 'imie_z_bazy'=>'Jan',
  11. 'organizacja'=>'Poeci'
  12. ),
  13. 'user_email'=>'adam@mickiewicz.pl',
  14. 'nr_kom_z_bazy'=>'500200200',
  15. 'nr_wewn_z_bazy'=>'627008080',
  16. 'nazwisko_z_bazy'=>'Mickiewicz',
  17. 'imie_z_bazy'=>'Adam',
  18. 'organizacja'=>'Poeci'
  19. ),
  20. 'user_email'=>'jan@kochanowski.pl',
  21. 'nr_kom_z_bazy'=>'500100100',
  22. 'nr_wewn_z_bazy'=>'627005050',
  23. 'nazwisko_z_bazy'=>'Kochanowski',
  24. 'imie_z_bazy'=>'Jan',
  25. 'organizacja'=>'Poeci'
  26. ),
  27. 'user_email'=>'adam@asnyk.pl',
  28. 'nr_kom_z_bazy'=>'50000000',
  29. 'nr_wewn_z_bazy'=>'627001010',
  30. 'nazwisko_z_bazy'=>'Asnyk',
  31. 'imie_z_bazy'=>'Adam',
  32. 'organizacja'=>'Poeci'
  33. )
  34. );
  35.  
  36. $i=0;
  37. echo "<form action=\"test.php\" method=\"post\">\n";
  38. foreach($out as $art){
  39. $art['user_email'] = htmlspecialchars($art['user_email'],ENT_QUOTES);
  40. $art['nr_kom_z_bazy'] = htmlspecialchars($art['nr_kom_z_bazy'],ENT_QUOTES);
  41. $art['nr_wewn_z_bazy'] = htmlspecialchars($art['nr_wewn_z_bazy'],ENT_QUOTES);
  42. $art['nazwisko_z_bazy'] = htmlspecialchars($art['nazwisko_z_bazy'],ENT_QUOTES);
  43. $art['imie_z_bazy'] = htmlspecialchars($art['imie_z_bazy'],ENT_QUOTES);
  44. $art['organizacja'] = htmlspecialchars($art['organizacja'],ENT_QUOTES);
  45. echo <<<EOT
  46. <textarea name="text$i" style="width:450px; height:190px; border: 3px solid #cccccc; font-family: Tahoma, sans-serif; font-size: 12px;">
  47. BEGIN:VCARD
  48. X-LOTUS-CHARSET:windows-1250
  49. VERSION:3.0
  50. ORG:{$art['organizacja']}
  51. EMAIL;TYPE=INTERNET:{$art['user_email']}
  52. TEL;TYPE=WORK:{$art['nr_kom_z_bazy']}
  53. TEL;TYPE=HOME:{$art['nr_wewn_z_bazy']}
  54. N:{$art['nazwisko_z_bazy']};{$art['imie_z_bazy']};;;
  55. FN:{$art['imie_z_bazy']} {$art['nazwisko_z_bazy']}
  56. END:VCARD
  57. </textarea><br/>
  58. EOT;
  59. $i++;
  60. }
  61. echo '<input type="submit" value="Zapisz do pliku" /></form>';
  62. }else if(isset($_POST['text0']) && isset($_POST['text1']) && isset($_POST['text2']) && isset($_POST['text3'])){
  63. // przypisanie zmniennej $file nazwy pliku
  64. $file = "f_baza.txt";
  65. // uchwyt pliku, otwarcie do dopisania
  66. $fp = fopen($file, "a");
  67. // blokada pliku do zapisu
  68. flock($fp, 2);
  69. // zapisanie danych do pliku
  70. fwrite($fp, $_POST['text0']);
  71. fwrite($fp, $_POST['text1']);
  72. fwrite($fp, $_POST['text2']);
  73. fwrite($fp, $_POST['text3']);
  74. // odblokowanie pliku
  75. flock($fp, 3);
  76. // zamknięcie pliku
  77. fclose($fp);
  78. echo "Dane zostały zapisane!<br />";
  79. echo "<a href=\"f_podglad.php\">Zobacz wpisane dane</a>";
  80. }else{
  81. die("Coś poszło źle!!!");
  82. }
  83. ?>


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:
  1. }else if(isset($_POST['text0']) && isset($_POST['text1']) && isset($_POST['text2']) && isset($_POST['text3'])){

oraz
  1. // zapisanie danych do pliku
  2. fwrite($fp, $_POST['text0']);
  3. fwrite($fp, $_POST['text1']);
  4. fwrite($fp, $_POST['text2']);
  5. fwrite($fp, $_POST['text3']);

ponieważ zapisują się tylko 4 wizytówki.
Obecny kod przedstawia się następująco:
  1. <?php
  2. // plik konfiguracyjny
  3. include '01_config.php';
  4. // połaczenie z bazą
  5. db_connect();
  6. // dane do połączenia
  7. define('DB_HOST','localhost');
  8. define('DB_USER','root');
  9. define('DB_PASS','password');
  10. define('DB_NAME','moja_baza');
  11. $select_db = mysql_select_db(DB_NAME);
  12. if($select_db)
  13. {
  14. mysql_query("SET NAMES utf8");
  15. }
  16. else
  17. {
  18. die('Nie można się połączyć z bazą danych !');
  19. }
  20. // zapytanie do bazy
  21.  
  22. if(empty($_POST))
  23. {
  24.  
  25. $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";
  26. $result = mysql_query($query);
  27. if($result===false && trim(mysql_error))
  28. {
  29. echo("Błędne zapytanie: \n");
  30. }
  31. while($row = mysql_fetch_assoc($result))
  32. {
  33. $out[]=$row;
  34. }
  35.  
  36. $i=0;
  37. echo "<form action=\"form3.php\" method=\"post\">\n";
  38. foreach($out as $art){
  39. $art['user_email'] = htmlspecialchars($art['user_email'],ENT_QUOTES);
  40. $art['user_kom'] = htmlspecialchars($art['user_kom'],ENT_QUOTES);
  41. $art['user_wew'] = htmlspecialchars($art['user_wew'],ENT_QUOTES);
  42. $art['user_firstn'] = htmlspecialchars($art['user_firstn'],ENT_QUOTES);
  43. $art['user_lastn'] = htmlspecialchars($art['user_lastn'],ENT_QUOTES);
  44. echo <<<EOT
  45. <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">
  46. BEGIN:VCARD
  47. X-LOTUS-CHARSET:windows-1250
  48. VERSION:3.0
  49. ORG:Plastica
  50. EMAIL;TYPE=INTERNET:{$art['user_email']}
  51. TEL;TYPE=WORK:{$art['user_kom']}
  52. TEL;TYPE=HOME:{$art['user_wew']}
  53. N:{$art['user_lastn']};{$art['user_firstn']};;;
  54. FN:{$art['user_firstn']} {$art['user_lastn']}
  55. END:VCARD
  56. </textarea><br/><hr />
  57. EOT;
  58. $i++;
  59. }
  60. echo '<input type="submit" value="Zapisz do pliku" /></form>';
  61. }else if(isset($_POST['text0']) && isset($_POST['text1']) && isset($_POST['text2']) && isset($_POST['text3'])){
  62. // przypisanie zmniennej $file nazwy pliku
  63. $file = "f_baza.txt";
  64. // uchwyt pliku, otwarcie do dopisania
  65. $fp = fopen($file, "w");
  66. // blokada pliku do zapisu
  67. flock($fp, 2);
  68. // zapisanie danych do pliku
  69. fwrite($fp, $_POST['text0']);
  70. fwrite($fp, $_POST['text1']);
  71. fwrite($fp, $_POST['text2']);
  72. fwrite($fp, $_POST['text3']);
  73. // odblokowanie pliku
  74. flock($fp, 3);
  75. // zamknięcie pliku
  76. fclose($fp);
  77. echo "Dane zostały zapisane!<br />";
  78. echo "<a href=\"f_podglad.php\">Zobacz wpisane dane</a>";
  79. }else{
  80. die("Coś poszło źle!!!");
  81. }
  82. db_close();
  83. ?>

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ć.