Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [XML][MySQL][PHP] Pętle czy co innego?
Forum PHP.pl > Forum > Przedszkole
Frugo75
Witam wszystkich serdecznie.
Bardzo proszę o pomoc, wskazanie rozwiązania.
Generuje w DOM plik xml i mam zapytanie
  1. SELECT * FROM komentarze WHERE id_news = 488


Tabela komentarze w bazie zawiera: id, id_news i autor.

W bazie mam np 3 rzedy z tym id_news i wyswietla mi trzech autorów.

Przechodze do PHP, generuje plik a jako wartosc wstawiam $autor czyli $row[autor].

Kiedy zrobie echo wyswietla mi trzech autorów podczas generwowania xml, ale do drzewa XML wstawia tylko jednego... ostatniego. Dlaczego?

Domyślam się ze chodzi o pętle. Proszę o wskazówkę jak do tego podejść, żeby w XML wstawiało mi trzech autorów.
Efekt który chcę osiągnąc to
  1. <autor>Mickiewicz, Sienkiewicz, Kofta</autor>


CuteOne
  1. $text = '';
  2. foreaach($rows as $row) {
  3.  
  4. $text .= $row['author'].', '; //kluczowy .=
  5. }
  6.  
  7. echo substr($text, 0, strlen($text)-2);
Frugo75
Dzięki, ale nie działa.sad.gif

  1. $result2 = mysql_query("SELECT * FROM comments WHERE id_news = 496") or die(mysql_error());
  2.  
  3. while ($row = mysql_fetch_assoc($result2)) {
  4.  
  5.  
  6. $autor1 = $row[autor1];
  7. $autor2 = $row[autor2];
  8. $rok = $row[time];
  9. }


daje echo $autor2 i mam Mickiewicz Sienkiewicz.

Wklejam $autor2 do
  1. $autor = $xml->createElement("autor", "$autor2");
  2. $autor = $head->appendChild($autor);


i wpisało mi do XML tylko sienkiewicza;)
  1. <autor>Sienkiewicz</autor>


Why?
nospor
Znajdz 10 roznic w tym co ci podano a co ty napisales

.=
=
Widzisz roznice?
Frugo75
Przepraszam - tylko tyle mogę napisać....

To jeszcze dopytam..
Jak przed autorem dodać rok $time i zeby autorzy byli wpisani do XML po przecinku. np.
  1. <autor>1999 Mickiewicz, 2001 Sienkiewicz</autor>
nospor
Przeciez przecinki podal ci CuteOne.... czy ty w ogole czytasz co ci ludzie piszą?
Zas co do roku to nie umiesz zmiennych łączyć? $zm.' '.$zm2
Jakis kurs podstaw php wypadaloby przejrzec
Frugo75
Czytam wszystko;)
Tylko ze jak łącze zmienne, to wstawi mi np do Mickiewicza, wszystkie daty i wyglada to tak:
  1. <autor>1997, 1999, 2001, Mickiewicz, Sienkiewicz</autor>

zamiast tak:
  1. <autor>1999. Mickiewicz, 2001. Sienkiewicz</autor>


A to 1997 to bierze z innego pola np autor2...

Za kurs dziękuję. Właśnie jestem w trakcie.
CuteOne
$text .= $year.' '.$author.', ';


...
Frugo75
Dzięki CuteOne.

Miałbyś czas wyjaśnić mi tę pętlę foreach, którą mi podałeś? Czy nie chce Ci się?

Bo to pewnie chodzi o to, ze wstawia mi daty z innych pół, które mają takie samo id_news.

  1. <autor>90. , 1999. Mickiewicz, 2001. Sienkiewicz, 10. ,</autor>


Chodzi mi o te 90. , i 10. , - ktore sa z innej kolomny (autor2).
CuteOne
  1.  
  2. $array = array(
  3. 1 => 'Jestem',
  4. 2 => 'tablicą',
  5. 3 => '!'
  6. );
  7.  
  8. $text = '';
  9. $text2 = '';
  10. foreach($array as $index => $value) {
  11. $text .= $value.' ';
  12. $text2 .= $index.' ';
  13. }
  14.  
  15. echo $text. '<br />'.$text2;

Najprościej ujmując jest to pętla listująca elementy tablicy. Równie dobrze, można użyć while() lub for(). Więcej dowiesz się z kursów/poradników
Frugo75
Dziękuje stary.
Wyjaśnij mi jeszcze dlaczego wstawa mi daty z innej kolumny w ktorej tez jest id_news takie same.
To co dopisalem wyzej
mmmmmmm
Skorzystaj z GROUP_CONCAT(). będzie dużo szybciej.
Frugo75
Jeszcze tak daleko nie zaszedłem w tajnikach wink.gif
Nadal mam ten problem, ze dodaje mi daty z innej kolumny (autor2), w ktorej są takie same id_news, jak w autor.

  1. <autor>90. Jarecki, 3. , 7. , 10. Faregas,</autor>
  2. <autor2>90. , 3. Kawalec, 7. Frankowski, 10. ,</autor2>


a prawidłowo powinno byc

  1. <autor>90. Jarecki, 10. Faregas,</autor>
  2. <autor2>3. Kawalec, 7. Frankowski, </autor2>
nospor
Pokaz aktualny kod...
Frugo75
  1. $result2 = mysql_query("SELECT * FROM comments WHERE id_news = 496") or die(mysql_error());
  2.  
  3. while ($row = mysql_fetch_assoc($result2)){
  4.  
  5.  
  6. $autor = $row[autor1];
  7. $autor2 = $row[autor2];
  8. $stime = $row[time];
  9.  
  10. $aautor .= $stime.'.'.' '.$autor.', ';
  11. $aautor2 .= $stime.'.'.' '.$autor2.', ';


oraz przy generacji
  1. $autor = $xml->createElement("autor", "$aautor");
  2. $autor = $head->appendChild($autor);
  3.  
  4.  
  5. $autor2 = $xml->createElement("autor2", "$aautor2");
  6. $autor2 = $head->appendChild($autor2);


Juz prawie jest dobrze, tylko z tymi datami sie pieprzy.

W bazie jest:
tabela: comments
w nie rekordyj:
np.:
id_news=496 - autor=Sienkiewicz - time=21
id_news=496 - autor2=Mickiewicz - time=11
nospor
Skoro każdy autor to oddzielny rekord, to na grzyba ci w tej tabeli dwie kolumny na dwoch autorow??

Wracajac do problemu: zmienne $autor1 i $autor2 masz wypelniac w zaleznosc czy pole z bazy autor1 czy autor 2 jest wypelnione. No wiesz, masz uzyc IF - sprobuj tym razem zrobic to samodzielnie
Frugo75
Dzięki, spróbuje sam dojść do tego.

To troche jak w meczu, strzelec bramki (wartosc) dla jednego druzyny (autor) i strzelec bramki (wartosc) dla drugiej druzyny (autor2).
Jest jeszcze minuta strzelenia (time). A wszystko dzieje sie w tym samym meczu (id_news).
nospor
Wydaje mi sie, ze tak powinna wygladac poprawnie twoja tabela
ID_NEWS
AUTOR
TIME
DRUZYNA (wartosc np 1 i 2 dla rozroznienia druzyn)
Frugo75
Obszedłem to trochę... uzylem
  1. SELECT DISTINCT autor, time
i wszystko działa.
Dziękuję bardzo za pomoc.
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.