Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Podwójne foreach?
deha21
post
Post #1





Grupa: Zarejestrowani
Postów: 544
Pomógł: 5
Dołączył: 18.08.2009

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


Robię sondę a dokładniej jej edycję. Mam zrobione tak, że przy dodawaniu mam 10 inputów, jeśli są pełne to je dodaje. Mam dwie tabele - sonda i odpowiedzi. I teraz przy edycji wypisuję odpowiedzi w których pole SONDA jest równe ID sondy. Taki powiązanie. Ale teraz jest problem taki, że gdy chcę zedytować odpowiedzi to robię dla każdej odpowiedzi (foreach) UPDATE odpowiedzi WHERE id="$idanswer". No właśnie... wyciągnąłem id tych rekordów ale mam problem właśnie z foreach. Najlepiej jak pokażę to co zrobiłem:
  1. // $answer to tablica odpowiedzi
  2. // $idanswer to ID dla odpowiedzi, też w tablicy
  3.  
  4. foreach ($answer as $a) {
  5. if (!empty($a)) {
  6. foreach ($idanswer as $ida) {
  7. mysql_query("UPDATE answers SET answer='$a' WHERE id='$ida'");
  8. }
  9. }
  10. }

I tutaj plik formularza edycji:
  1. <input type='text' name='answer[]' value='".$row0['answer']."'><input type'hidden' name='idanswer[]' value='".$row0['id']."'>

Pozdrawiam


--------------------
Go to the top of the page
+Quote Post
tehaha
post
Post #2





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


Z tego co zrozumiałem to wynika, że odpowiedź z $anwser będzie przypisana tylko do jednego ID z $idanwser i w tym kodzie co napisałeś to ta odpowiedź jest wpisywana do wszystkich ID z każdą następną pętlą wynik się nadpisuje tak?

wydaj mi się, że chciałeś uzyskać coś takiego :
  1. foreach ($answer AS $key -> $a)
  2. {
  3. if(!empty($a))
  4. {
  5. $ida = $idanswer[$key];
  6. $query = mysql_query("UPDATE answers SET answer='$a' WHERE id='$ida'") or die(mysql_error());
  7. }
  8. }
Go to the top of the page
+Quote Post
deha21
post
Post #3





Grupa: Zarejestrowani
Postów: 544
Pomógł: 5
Dołączył: 18.08.2009

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


Wyskakuje taki błąd:
  1. Notice: Undefined variable: on line 16
  2. Fatal error: Cannot access empty property on line 16

Czyli chodzi o linię:
  1. if(!empty($a))


--------------------
Go to the top of the page
+Quote Post
tehaha
post
Post #4





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


widzę, że tam zamiast = dałem - , spróbuj z tym:
  1. foreach ($answer AS $key => $a)
  2. {
  3. if(!empty($a))
  4. {
  5. $ida = $idanswer[$key];
  6. $query = mysql_query("UPDATE answers SET answer='$a' WHERE id='$ida'") or die(mysql_error());
  7. }
  8. }
Go to the top of the page
+Quote Post
Pilsener
post
Post #5





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Kombinujesz w złą stronę. Pętla w pętli a w niej zapytanie do bazy? Ile tych zapytań do bazy będzie w sumie?

Możesz stworzyć taką tablicę:
  1. $sonda[1][1]='';
  2. $sonda[2][3]='';
  3. $sonda[3][2]='';
- pierwszy indeks to numer pytania, drugi to odpowiedź a ewentualny tekst to np. "inne, napisz jakie" - taką tablicę da się łatwo pobrać z tabeli "sonda", która wygląda np. tak:
id_sondy|id_pytania|id_odpowiedzi|tekst_odpowiedzi

Nie wiem jaka to ma być sonda i jak to ma działać, potem wystarczy stworzyć plik o podobnej strukturze i dodać od razu całą sondę do bazy jednym zapytaniem LOAD DATA INFILE.
Go to the top of the page
+Quote Post
deha21
post
Post #6





Grupa: Zarejestrowani
Postów: 544
Pomógł: 5
Dołączył: 18.08.2009

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


Cytat(tehaha @ 17.02.2010, 23:19:21 ) *
widzę, że tam zamiast = dałem -

Rzeczywiście, też tego nie zauważyłem. Teraz działa.
Cytat(Pilsener @ 17.02.2010, 23:39:36 ) *
Kombinujesz w złą stronę. Pętla w pętli a w niej zapytanie do bazy? Ile tych zapytań do bazy będzie w sumie?

Co jest złego w takim rozwiązaniu? Zapytań będzie max.8... wydaje mi się, że taka metoda jest do przyjęcia przy takiej ilości? Pewnie przy większej ilości mogłaby być niewydajna.


--------------------
Go to the top of the page
+Quote Post
Pilsener
post
Post #7





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


No a ja nie wiem, czy 8 czy więcej, po prostu przywykłem do robienia takich rzeczy jednym zapytaniem i wbiłem sobie do głowy, że zapytanie wewnątrz pętli jest złe. Poza tym jeśli będzie korzystało z tego n użytkowników wykonujących x operacji to n*x*8 a n*x*1 to różnica. Ktoś potem rozbuduje ankiete do dwóch stron i się zdziwi, ale każdy robi jak uważa, jak będziesz potrzebował audytu wydajności czy optymalizacji to za odpowiednie wynagrodzenie jestem do usług winksmiley.jpg
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 21.08.2025 - 08:20