Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Formularz, tablce, problem z aktualizacją..
Forum PHP.pl > Forum > Przedszkole
PJ
Witam,
potrzebuję Waszej pomocy..
problem przedstawia się następująco..

za pomocą pętli wyświetlam trój-wierszowy formularz każdy input pchając do tablicy i do tego momentu wszystko działa jak powinno..
problem pojawia się po kliknięciu przycisku "update"

zaznaczam checkbox tylko w pierwszym wierszu i klikam update.. i działa
zaznaczam checkbox tylko w drugim bądź trzecim wierszu.. i klops.. aktualizuje się tylko pierwszy wiersz...
zaznaczam checkbox w każdym wierszu pomijając pierwszy i sytuacja jak wyżej..

domyślam się, że zrobiłem błąd gdzieś przy tablicach..
siedzę już dłuższy czas i nic... może ktoś z was coś dostrzeż..

kod poniżej jest mocno okrojony żeby był bardziej czytelny..

  1. echo "<form style='margin: 10px 0;' name='update' method='post' action='".$adres."'>".$eol;
  2.  
  3. while ($arrRow = mysql_fetch_array($objRst))
  4. {
  5.  
  6. $Symbol[] = $arrRow["Symbol"];
  7. $onsite[] = $arrRow["onsite"];
  8. $promo[] = $arrRow["promo"];
  9.  
  10. echo " <tr class='".$class."' onmouseover='this.className=\"".$classOver."\"' onmouseout='this.className=\"".$class."\"'>".$eol;
  11. echo " <td align='right' class='symbol'><b>".StringToHTML($arrRow["Symbol"])."</b></br></br>
  12. Strona: ".$arrRow["onsite"]." <input type='checkbox' name='onsite[]' id='onsite[]' "; if ($arrRow['onsite'] == "t") { echo "checked"; } else { echo "";} echo "></br>
  13. Promo: ".$arrRow["promo"]." <input type='checkbox' name='promo[]' id='promo[]' "; if ($arrRow['promo'] == "t") { echo "checked"; } else { echo ""; } echo "></br></br>
  14. <input type='submit' name='submit' value='Update' >
  15. </td>".$eol;
  16. echo " </tr>".$eol;
  17. $intI++;
  18. }
  19. echo "</form></tbody>".$eol;
  20.  
  21.  
  22. if(isset($_POST['submit'])=='UPDATE') {
  23. for( $x = 0; $x < count($Symbol); $x++ ){
  24. if (isset($_POST['promo'])) { $promo_val[$x] = 't';} else { $promo_val[$x] = 'n'; }
  25. if (isset($_POST['onsite'])) { $onsite_val[$x] = 't';} else { $onsite_val[$x] = 'n'; }
  26.  
  27. // echo $Symbol[$x].': symbol<br>';
  28. // echo $promo_val[$x].': promo<br>';
  29. // echo $onsite_val[$x].': site<br>';
  30.  
  31. $sql = "UPDATE stany
  32. SET `tytul` = '".$_POST['tytul'][$x]."',
  33. `autor` = '".$_POST['autor'][$x]."',
  34. `tlumacz` = '".$_POST['tlumacz'][$x]."',
  35. `wydawca` = '".$_POST['wydawca'][$x]."',
  36. `EAN` = '".$_POST['EAN'][$x]."',
  37. `stron_format` = '".$_POST['stron_format'][$x]."',
  38. `gatunek` = '".$_POST['gatunek'][$x]."',
  39. `rok_oprawa` = '".$_POST['rok_oprawa'][$x]."',
  40. `img` = '".$_POST['img'][$x]."',
  41. `opis` = '".$_POST['opis'][$x]."',
  42. `cena_det` = '".$_POST['cena_det'][$x]."',
  43. `onsite` = '".$onsite_val[$x]."',
  44. `promo` = '".$promo_val[$x]."'
  45. WHERE `Symbol` ='".$Symbol[$x]."'";
  46.  
  47.  
  48. }
  49. header('Location: '.$adres);
  50. }
Kshyhoo
A co mówi var_dump albo choć print_r $_POST'a? A co mówi echo UPDATE do bazy?
PJ
echo $_POST['Symbol'][$x] zwraca poprawnie..
ale promo i onsite juz nie..

dajmy na to zaznaczam promo i onsite w 3 wierszu

zwraca

echo zwraca
----- ROW 1 ------
symbol: 1
promo: t
onsite: t

-----ROW 2 --------
symbol: 2
promo: n
onsite: n

-----ROW 3 --------
symbol: 3
promo: n
onsite: n
Kshyhoo
Luknij w źródło strony i zobacz, co boli formularz. A echo nie służy do sprawdzenia co przechodzi przez $_POST.
Druga sprawa, skoro wysyłasz tablicę, to i tablicę musisz odebrać. sprawdź to:
  1. for( $x = 0; $x < count($Symbol); $x++ ){
  2. if (isset($_POST['promo'])) { $promo_val[$x] = 't';} else { $promo_val[$x] = 'n'; }
  3. if (isset($_POST['onsite'])) { $onsite_val[$x] = 't';} else { $onsite_val[$x] = 'n'; }
pa-jong
hmmm chyba przy czyszczeniu wywaliłem za dużo..

w org mam ten fragment tak:
  1. if (isset($_POST['promo'][$x])) { $promo_val[$x] = 't';} else { $promo_val[$x] = 'n'; }
  2. if (isset($_POST['onsite'][$x])) { $onsite_val[$x] = 't';} else { $onsite_val[$x] = 'n'; }

ale i tak nie działa..

edit//
jak już pisałem na początku wydaje mi się ze zrobiłem błąd gdzieś przy tablicach
i o ile dobrze kombinuje to nie numeruje Mi kolejnych $_POST['promo'] zgadza się?

edit2//
hmm zauważyłem dziwną rzecz
jezeli promo i onsite w row1 są zaznaczone i dam w row2 np promo to ładnie się zaktualizuje
ale jezeli zamiast w row2 dam promo w row3 to zaktualizuje mi row2.. nie czaje.. chyba sie musze przespać z tym problemem..

Edit/
ok, dziś wolne czyli mam cały dzień na dłubanie..
zaczynam od nierozwiązanego problemu. Wszelka pomoc i sugestie mile widziane wink.gif

  1. echo "<form style='margin: 10px 0;' name='update' method='post' action='".$adres."'>".$eol;
  2.  
  3. while ($arrRow = mysql_fetch_array($objRst))
  4. {
  5.  
  6. $Symbol[] = $arrRow["Symbol"];
  7. $onsite[] = $arrRow["onsite"];
  8. $promo[] = $arrRow["promo"];
  9.  
  10. (...)
  11.  
  12. Strona: ".$arrRow["onsite"]." <input type='checkbox' name='onsite[]' id='onsite[]' ";
  13.  
  14. if ($arrRow['onsite'] == "t"){
  15. echo "checked";
  16. } else {
  17. echo "";
  18. }
  19.  
  20. echo "></br>Promo: ".$arrRow["promo"]." <input type='checkbox' name='promo[]' id='promo[]' ";
  21.  
  22. if ($arrRow['promo'] == "t") {
  23. echo "checked";
  24. } else {
  25. echo "";
  26. }
  27.  
  28. echo "></br></br><input type='submit' name='submit' value='Update' ></td>".$eol;
  29.  
  30.  
  31. (...)
  32.  
  33. echo " <td class='nazwa' align='right'><b>".StringToHTML($arrRow["Nazwa"])."</b><br>
  34. Tytuł: <input type='text' name='tytul[]' value='".StringToHTML($arrRow["tytul"])."'><br>
  35. Autor: <input type='text' name='autor[]' value='".StringToHTML($arrRow["autor"])."'><br>
  36. (...)
  37.  
  38.  
  39.  
  40.  
  41. echo " </tr>".$eol;
  42. $intI++;
  43. }
  44.  
  45. echo "</form></tbody>".$eol;
  46.  
  47.  
  48. if(isset($_POST['submit'])=='UPDATE') {
  49. for( $x = 0; $x < count($Symbol); $x++ ){
  50. if (isset($_POST['promo'][$x])) { $promo_val[$x] = 't';} else { $promo_val[$x] = 'n'; }
  51. if (isset($_POST['onsite'][$x])) { $onsite_val[$x] = 't';} else { $onsite_val[$x] = 'n'; }
  52.  
  53. // echo $Symbol[$x].': symbol<br>';
  54. // echo $promo_val[$x].': promo<br>';
  55. // echo $onsite_val[$x].': site<br>';
  56.  
  57. $sql = "UPDATE stany
  58. SET `tytul` = '".$_POST['tytul'][$x]."',
  59.  
  60. (...)
  61.  
  62. `onsite` = '".$onsite_val[$x]."',
  63. `promo` = '".$promo_val[$x]."'
  64. WHERE `Symbol` ='".$Symbol[$x]."'";
  65.  
  66.  
  67. }
  68. header('Location: '.$adres);
  69. }
  70.  
  71.  
  72.  




hmm czy problem może tkwić w lini 49 ? czyli że count($Symbol) w tym przepadku nie ma co liczyć ?


// edit
powyższe założenie było błędne i stoję w miejscu, sprawdziłem już chyba wszystkie możliwości jakie mi do głowy przyszły..
pozostałe pola formularza aktualizują się poprawenie problem jest tylko z tym nieszczęsnym checkboxem :/

//edit
naprawdę nikt ?

doszedłem do tego ze jeżeli nie zaznaczę checkboxa to tablica składa się z 1 pozycji...
jeśli zaznaczam dalej jakieś checkboxy to tworzy tablice z tyloma pozycjami ile zaznaczyłem.. czyli sam update działa poprawnie..

mam taki mętlik w głowie że teraz nie wiem jak to ugryźć..grr

na chłopski rozum to muszę wysłać wszystkie wiersze jako zaznaczone ale z innymi wartościami..
doprawdy Panowie zlitujcie się podpowiedzcie coś tongue.gif

Rozwiązałem
dzięki za pomoc wink.gif
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.