Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> problem z pętlami
Apo
post
Post #1





Grupa: Zarejestrowani
Postów: 426
Pomógł: 1
Dołączył: 2.10.2005

Ostrzeżenie: (0%)
-----


Witam
Mam problem ;] No więc mam takie pętle:

  1. <?php
  2. while($array = $this -> db -> fetch_row())
  3. {
  4. foreach($nazwy as $plik)
  5. {
  6. if($array['modul'] != $plik)
  7. {
  8. $this-> db -> query( "INSERT INTO config (modul, stan) VALUES ('$plik', 'off')" );
  9. }
  10. }
  11. }
  12. ?>

No i:
$nazwy jest to tablica która zawiera nazwy plików.
$db - obiekt klasy do obsługi bazy

I chce mieć następujący efekt. Pętlą while robie tablice pól z bazy. Następnie pętlą foreach odczytuje pliki zapisane w tablicy $nazwy i jeśli w bazie nie ma pola o nazwie $plik to powinien mi go dopisać do bazy. Ale przez tą pętle (tak myśle) foreach w pętli while zapisują mi sie wszystkie pliku z tej tablicy. Jak moge to rozwiązac. Z góry thx
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
chomiczek
post
Post #2





Grupa: Zarejestrowani
Postów: 271
Pomógł: 4
Dołączył: 5.01.2005

Ostrzeżenie: (0%)
-----


Miałe kiedyś podobny problem i już Ci mówie jak go rozwiązać, a raczej napisze Ci fragment mojego kodu.. sądze, że zakumasz o co w nim chodzi (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

na początek.. mamy 2 tablice:
$aktualne[] oraz $zalecane[]


Tak je tworze:
  1. <?php
  2. $zap = "SELECT * FROM `nazwaTABELI1` WHERE `KategorieId`='".$prod['KategoriaId']."' AND `Grupa`!='' ORDER BY `Grupa`,`NowyParametr` LIMIT 100";
  3. $wyn=mysql_query($zap);
  4. $zalecane = array();
  5. while($grupa=mysql_fetch_array($wyn)) $zalecane[$grupa['NowyParametr']] = $grupa['Grupa'];
  6. $quest = "SELECT * FROM `nazwaTABELI2` WHERE `CID`='".$prod['CID']."' ORDER BY `Wartosc_MAX`,`Nazwa` LIMIT 100";
  7. $answer=mysql_query($quest);
  8. $aktualne= array();
  9. while($param=mysql_fetch_array($answer)) $aktualne[$param['Nazwa']] = $param['Wartosc_TXT'];
  10. ?>


Potem je porównuje i w przypadku jeśli nie ma jednej wartości to wyświetlam brak danych.. u Ciebie w tym miejscu będzie włożenie tego do bazy. O to całe porównanie:

  1. foreach($zalecane as $nazwa=>$kategoria) {
  2. $pisz = "";
  3. if ($wypisana!=$kategoria) { ?>
  4. <tr><td colspan="2"><p align=left class="napiscena_duza"><?php echo substr($kategoria,2); ?></p></td></tr>
  5. <?php $wypisana = $kategoria;
  6. }
  7. if($i++%2) $kl="parzyste"; else $kl="niep"; 
  8. if (array_key_exists($nazwa, $aktualne)) {
  9. foreach($aktualne as $aktNaz=>$aktTXT) {
  10. if ($nazwa==$aktNaz) $pisz = $aktTXT; 
  11. }
  12. }
  13. else $pisz = '<span style="color:#ccc; font-size:10px;">BRAK DANYCH</span>'; ?>
  14. <?php 
  15. $pisz = str_replace(" <li> ","<br/>&bull; ", $pisz);
  16. $pisz = str_replace("<li> ","&bull; ", $pisz);
  17. ?>
  18.  <tr class="<?php echo $kl; ?>" valign="top"><td>&nbsp;<?php echo $nazwa; ?></td><td><?php echo $pisz; ?></td></tr>
  19. <?php }


Wrzuciłem prost z pliku, więc są tam jakieś style, ale sądze, że je zrozumiesz.. w każdym razie najważniejsza jest funkcja array_key_exists.
Jedynie zastrzeżenie jest takie, że nazwy nie mogą się powtarzać. Bo wtedy się nadpiszą.. U mnie to jest tak, że w bazie w jednej tabeli mam domyslne parametry dla jakiejś kategorii (parametry, któe muszą wystąpić), a w innej tabeli mam wartości przypisane do konkretnego produktu.. w chwili przeszukiwania tablicy jesli nie znajdzie takich wartości pisze brak danych.. (chyba trochę niamieszałem z tym opisem, ale mam nadzieję, że Ci pomogłem)

A jak to działa w praktyce możesz zobaczyć na www.promediapc.pl w szczegółach jakiegoś produkt.

Ten post edytował chomiczek 3.02.2006, 22:17:35
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 10.10.2025 - 06:41