Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> 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
 
Start new topic
Odpowiedzi (1 - 6)
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 (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post

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: 23.08.2025 - 01:53