Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapisywanie wyników to tablicy i ich wyświetlenie
Forum PHP.pl > Forum > PHP
pr0woKator
Witajcie!

Mam małą zagwozdkę, mianowicie:

Posiadam pentlę:

  1. for ($i = 0; $i < $tmpcount; $i++) {}


Która generuje działanie tylko dla wybranych przezemnie ID.

W tej pętli posiadam pętle While która wyświetla informacje na temat przedmiotów których ID zostało wybrane. Pod pętlą for posiadam zmienne $naglowek oraz $stopka.

Z $naglowek, danych ktore sa wypluwane przez petle while oraz $stopka, chcę utowrzyc plik tekstowy. Problem w tym, że gdy wybiorę więcej niż jedno ID zawsze dostaję tylko ostatni wynik pętli (No tak logiczne nerdsmiley.png ).

Proszę podpowiedzcie mi jak zrobić abym do pliku mógł wyprintować więcej wyników. Szablon mojego skryptu:


  1.  
  2. for ($i = 0; $i < $tmpcount; $i++) {
  3. $naglowek = 'naglowek';
  4. $stopka = 'stopka';
  5.  
  6. $dane = $db->query("bla bla");
  7. while($wynik = $dane->fetch_assoc())
  8. {
  9. $fdane = 'wyniki z bazy';
  10. }
  11.  
  12. $dane = $naglowek.''.$fdane.''.$stopka;
  13. $plik = fopen('x.xml','w+');
  14. fputs($plik, $dane);
  15. }
  16.  
freemp3
W pętli cały czas nadpisujesz zmienną. Trzeba przed pętlą utworzyć pustą zmienną a w pętli tylko dodawać do niej wyniki.
  1. $fdane = '';
  2. while($wynik = $dane->fetch_assoc())
  3. {
  4. $fdane .= 'wyniki z bazy';
  5. }
pr0woKator
Niby ładnie i pięknie ale... Po za pętlą nadal zwraca tylko ostatni wynik.


// Edit

Dla wyświetlania wyników - działa,

gdy chcę dodać je do pliku dodaje tylko ostatni. W czym może tkwić problem?
nospor
Jestes pewien ze zzrobiles dokladnie jak ci pokazano? Uzyles kropki?

Pokaz swoj kod po poprawkach

ps: ale wiesz ze w+ czysci plik do zera? wiec za kazdym razem gdy robisz w+ to czyscisz plik
pr0woKator
Cały kod

  1. <?php
  2.  
  3. $zapytanie = $db->query("SELECT * FROM xxx WHERE dostepnosc > 0 limit 5");
  4. while($wynik = $zapytanie->fetch_assoc())
  5. {
  6. echo '
  7. <tr>
  8. <td width="30px"><input type="checkbox" name="tablica[]" value="'.$wynik['numer'].'" /></td>
  9. <td width="100px"><center>'.$wynik['numer'].'</center></td>
  10. <td width="150px"><center>'.$wynik['nazwa'].'</center></td>
  11. <td width="150px"><center>'.$wynik['cena'].'</center></td>
  12. <td width="100px"><center>'.$wynik['dostepnosc'].'</center></td>
  13. </tr>';
  14. }
  15.  
  16.  
  17. ?>
  18. </table>
  19. <input type="submit" name="submit" value="GENERUJ PLIK XML">
  20. </form>
  21.  
  22. <?php
  23.  
  24. if(isset($_POST['submit'])){
  25.  
  26. $folder = "ceneo_xml";
  27. $nazwap = date("Y-m-d H:i:s");
  28.  
  29.  
  30. $id = '';
  31. foreach($_POST['tablica'] AS $ideki)
  32. {
  33. $id .= $ideki.',';
  34. }
  35. $ideki = rtrim(trim($id), ',');
  36. $pid = explode (',', $ideki);
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43. $tmpcount = count($pid);
  44. for ($i = 0; $i < $tmpcount; $i++) {
  45.  
  46.  
  47. $naglowek = '<?xml version="1.0" encoding="utf-8"?>
  48. <offers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1">
  49. <group name="other">
  50. ';
  51.  
  52. $stopka = '
  53. </group>
  54. </offers>
  55. ';
  56. $oferta = '';
  57.  
  58.  
  59.  
  60.  
  61. $ddane = $db->query("SELECT * FROM xxx WHERE numer = ".$pid[$i]." limit 1");
  62. while($wynik = $ddane->fetch_assoc())
  63. {
  64.  
  65. $kategoria = $wynik['kat_id'];
  66.  
  67.  
  68. $xkat = 'Armatura i hydraulika/Armatura do łazienki/Pozostała armatura do łazienki';
  69.  
  70.  
  71. $oferta .= '
  72. <o id="'.$wynik['numer'].'" url="xxx" price="'.$wynik['cena'].'" avail="1" stock="'.$wynik['dostepnosc'].'">
  73. <cat>
  74. <![CDATA['.$xkat.']]>
  75. </cat>
  76. <name>
  77. <![CDATA['.$wynik['nazwa'].']]>
  78. </name>
  79. <attrs>
  80. <a name="Producent">
  81. <![CDATA['.$wynik['producent_id'].']]>
  82. </a>
  83. </attrs>
  84. </o>
  85. ';
  86.  
  87.  
  88. }
  89.  
  90.  
  91.  
  92. }
  93.  
  94. $dane = $naglowek.''.$oferta.''.$stopka;
  95. echo $dane;
  96. $plik = fopen('x.xml','w+');
  97. fputs($plik, $dane);
  98. }
  99. ?>



W kilku miejscach nieczytelny przez przesunięcie które musialem zrobić aby był dobrze czytany xml


nospor
No dobrze, a teraz przeczytaj jeszcze to co napisalem w poprzednim poscie
Cytat
ps: ale wiesz ze w+ czysci plik do zera? wiec za kazdym razem gdy robisz w+ to czyscisz plik

Cytat
dalem w i dalej to samo

facepalmxd.gif
Ale ty nie strzelaj tylko zajrzyj do manuala i zobacz co masz dac.... to nie strzelnica tylko forum dla programistow - to zobowiązuje do odrobiny myslenia i samodzielnosci :/

http://pl1.php.net/manual/en/function.fopen.php
pr0woKator
Fakt - niedoczytałem.

Dałem - r+, nic się nie zmieniło.


PS. Zanim usunąłem edit - Ty już napisałeś :/
nospor
Zajrzyj do manuala i czytaj ze zrozumieniem.....
Cytat
'r+' Open for reading and writing; place the file pointer at the beginning of the file.

Skoro ustawia na poczatku pliku znacznik, znaczy ze nadal bedzie ci pisal po danych z poczatku a tym samym je nadpisywal.
pr0woKator
Teraz totalnie się pogubiłem...

Ja chcę stworzyć prosty plik,

Nagłówek
Treść z pętli
Stopka

To czy będą dane nadpisywane mnie teraz nie intersuje.

W jakim kierunku próbujesz mnie ustawić, nie bardzo wiem do czego dążysz.
nospor
Cytat
W jakim kierunku próbujesz mnie ustawić, nie bardzo wiem do czego dążysz.
Dąże, bys odrobine sam pomyslal i wybral z podanych tu parametrow ten wlasciwy:
Cytat
'r' Open for reading only; place the file pointer at the beginning of the file.
'r+' Open for reading and writing; place the file pointer at the beginning of the file.
'w' Open for writing only; place the file pointer at the beginning of the file and truncate the file to zero length. If the file does not exist, attempt to create it.
'w+' Open for reading and writing; place the file pointer at the beginning of the file and truncate the file to zero length. If the file does not exist, attempt to create it.
'a' Open for writing only; place the file pointer at the end of the file. If the file does not exist, attempt to create it.
'a+' Open for reading and writing; place the file pointer at the end of the file. If the file does not exist, attempt to create it.
'x' Create and open for writing only; place the file pointer at the beginning of the file. If the file already exists, the fopen() call will fail by returning FALSE and generating an error of level E_WARNING. If the file does not exist, attempt to create it. This is equivalent to specifying O_EXCL|O_CREAT flags for the underlying open(2) system call.
'x+' Create and open for reading and writing; otherwise it has the same behavior as 'x'.
'c' Open the file for writing only. If the file does not exist, it is created. If it exists, it is neither truncated (as opposed to 'w'), nor the call to this function fails (as is the case with 'x'). The file pointer is positioned on the beginning of the file. This may be useful if it's desired to get an advisory lock (see flock()) before attempting to modify the file, as using 'w' could truncate the file before the lock was obtained (if truncation is desired, ftruncate() can be used after the lock is requested).
'c+' Open the file for reading and writing; otherwise it has the same behavior as 'c'.


To naprawde nic skomplikowanego.... skoro ci napisale, ze znacznik nie ma byc na poczatku to znaczy ze ma byc na koncu. A teraz wyczytaj ktory parrametr ustawia znacznik na koncu. Podpowiedź: A - no jak teraz dasz zly to nie wiem..... wink.gif

pr0woKator
No tak - już doczytałem. Sory za noobowskie wypowiedzi. Zobaczymy co teraz się z tego wyskrobie.
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-2025 Invision Power Services, Inc.