Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Podwójne foreach?
Forum PHP.pl > Forum > PHP
deha21
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
tehaha
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. }
deha21
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))
tehaha
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. }
Pilsener
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.
deha21
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.
Pilsener
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
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.