Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wartość wyświetlana $_POST - podstawić pod zmienną
Forum PHP.pl > Forum > Przedszkole
kda
Witam,

Mam problem z zapisaniem wyświetlonej wartości pod zmienną X , pewnie to jest banalnie proste niestety nie potrafię sobie z tym poradzić.

Mam formularz gdzie są checkboxy ,zaznaczam , wysyłam formularzem a dane które przetwarzam za pomocą skryptu wygląda tak
  1. for ($i=0; $i<20; $i++)
  2. {
  3. echo $_POST['obiekty_e'][$i];
  4. }

w wyniku czego otrzymuję to co potrzebuję ,czyli wyświetla mi ID checkbox które zaznaczyłem, ale następnym krokiem musi być zapisanie tej wartości do bazy , i teraz mam cos takiego

  1. $query = "UPDATE user SET obiekty='$jakas_zmienna' WHERE id='$id';";
  2. $wynik = mysql_query ($query);

tyle że jak podstawić pod $jakas_zmienna dane które wyświetla mi na stronie , próbowałem na różne sposoby bez rezultatu
  1. $jakas_zmienna = $_POST['obiekty_e'][$i];

Z góry dzięki za pomoc
Ilware
musisz się po tym przeiterować

  1. $query = '';
  2. for ($i=0; $i<20; $i++)
  3. {
  4. echo $_POST['obiekty_e'][$i];
  5. $query .= "UPDATE user SET obiekty='".$_POST['obiekty_e'][$i]."' WHERE id='$id';";
  6. }
  7. $wynik = mysql_query ($query);
kda
w takiej postaci jak podałeś nie zapisuje do bazy, znowu w takiej formie
  1. {
  2. echo $_POST['obiekty_e'][$i];
  3. $query .= "UPDATE user SET obiekty='".$_POST['obiekty_e'][$i]."' WHERE id='$id';";
  4. $wynik = mysql_query ($query);
  5. }

wpisuje do bazy ale tylko z jednego checkboxa, nawet jak zaznaczę 4 to zapisze ostatniego wybranego , wnioskuję że dla tego że działa w pętli
qrooel
Pokaż formularz, 'name' dla tych checkboxów masz: "obiekty_e[]" ?
kda
całość która mi wyświetla wiersze z tabeli to:
  1. if ($co == 'obiekt') {
  2.  
  3. $wynik = mysql_query ("SELECT * FROM obiekty ORDER BY nazwa;");
  4.  
  5. print "<TABLE CELLPADDING=1 BORDER=1 width=40% align=center>";
  6.  
  7. print "<TR><TD><B>Prawa do obiektów</B></TD><TD><B></B></TD></TR>\n";
  8.  
  9. while ($record = mysql_fetch_array ($wynik)) {
  10. $id = $record[0];
  11. $nazwa_obiektu = $record[1];
  12. if(strstr($przypisany_obiekt, "$id")!==False)
  13. $dzialaj = $id;
  14.  
  15. print '<FORM METHOD="POST">';
  16. print '<INPUT TYPE="hidden" NAME="co" VALUE="nadaj_obiekty">';
  17. print '<INPUT TYPE="hidden" NAME="id_user" VALUE="'.$id_user.'">';
  18. print "<TR onmouseover=bgColor='#CCCCCC' style=cursor:pointer; cursor:hand onmouseout=bgColor='#FFFFFF' bgcolor='#ececec' width='120' align='left' valign='center'><TD>$id - $nazwa_obiektu</TD>";
  19.  
  20.  
  21. if ($dzialaj==$id){
  22. echo'<td width="20" align="left" height="22"><input type="checkbox" name="obiekty_e[]" value="'.$id.'," CHECKED><font size="2"</td>';
  23. }
  24. else
  25. {
  26. echo'<td width="20" align="left" height="22"></font><input type="checkbox" name="obiekty_e[]" value="'.$id.',"></td>';
  27. }
  28. }
  29. print '<TR><TD colspan=2><p align="right"><INPUT TYPE="submit" style="width:130px;" style="font:20px;" VALUE=" OK "></FORM></TD></TR></TABLE>';
  30. }
Ilware
Cytat(kda @ 24.11.2011, 13:43:29 ) *
  1. {
  2. echo $_POST['obiekty_e'][$i];
  3. $query .= "UPDATE user SET obiekty='".$_POST['obiekty_e'][$i]."' WHERE id='$id';";
  4. $wynik = mysql_query ($query);
  5. }

wpisuje do bazy ale tylko z jednego checkboxa, nawet jak zaznaczę 4 to zapisze ostatniego wybranego , wnioskuję że dla tego że działa w pętli


a czy Id Ci się zminia? i jak wkładasz wywołanie mysql_query do petli to usuń kropkę przed = "UPDATE
kda
Po usunięciu kropki nic nie wpisuje do bazy , pytsz czy ID się zmienia, tak w zależności jakie wybiore nazwisko
  1. <A HREF=\"user.php?co=obiekt&id_user=$id&nazwisko_spr=$nazwisko&menu=user\">

takie mam ID , czyli dokonane zmiany na checkbox są zapisywane do konkretnej osoby
nospor
Dyskusja odbiegła Wam na zupełnie zły tor i to niestety z winy Ilware.
To chyba logiczne, ze zapisuje tylko ostatni checkbox, skoro w petli ciągle tę wartość nadpisujecie.

@kda a w jakiej postaci w polu obiekty ty te dane chcesz trzymac?
12345
czy moze
1,2,3,4,5
czy moze jeszcze jakoś inaczej?

W ogóle strukturę masz złą. Na obiekty powinna być oddzielna tabela łącząca. Wówczas byś miał wszystko prawidłowo, mógłbyś fajnie wyszukiwać i takie tam. No ale wszystko zależy co ty z tymi danymi chcesz robić.

kda
@nospor
Dane które chciał bym zapisać były by w formie 1,2,3,4,5 , co do Twojej sugestji zdaję sobie sprawę żo można by to było napisać w inny sposób , niestety moja wiedza na ten temat jest jaka jest, cały czas się uczę.
Dla tego dobrze że jest forum na którym można podpytać ludzi z większą wiedzą.
Niktoś
Cytat
#
for ($i=0; $i<20; $i++)
{
echo $_POST['obiekty_e'][$i];
$query .= "UPDATE user SET obiekty='".$_POST['obiekty_e'][$i]."' WHERE id='$id';";
}


Lepiej poskładać w pętli pod konkretne zapytanie jakiegoś stringa i użyć tego stringa w zpytaniu i tym samym wywołać jednokrotne zapytanie do bazy,niż robić to multum razy w pętli.
Ilware
Cytat(Ilware @ 24.11.2011, 13:19:52 ) *
  1. $query = '';
  2. for ($i=0; $i<20; $i++)
  3. {
  4. echo $_POST['obiekty_e'][$i];
  5. $query .= "UPDATE user SET obiekty='".$_POST['obiekty_e'][$i]."' WHERE id='$id';";
  6. }
  7. echo $query;

wykonaj ten kod i daj wynik jaki Ci wypluje przeglądarka
nospor
@Ilwer kiedy do Ciebie dotrze ze
po pierwsze: nadpisujesz kolumne obiekty o czym już ci pisałem w poprzednim poście
po drugie: mysql_query() nie wykonuje na raz kilku zapytan
?

Bez żadnej pętli, tylko:
  1. if (!empty($_POST['obiekty_e'])){
  2. $query = "UPDATE user SET obiekty='".implode(',',$_POST['obiekty_e'])."' WHERE id='$id';";
  3. $wynik = mysql_query ($query);
  4. }
  5.  
  6.  
kda
@Ilwer , niestety nie działa tak jak bym chciał ,@nospor ma rację to jest pętla czyli tyle razy zmienia wartość zmiennej ile jest zaznaczonych checkboxów , próbowałem zliczyć ile jest zaznaczonych checkboxó i tyle razy dopisywać zmienne ale bez rezultatu.
Nie było by problemu gdyby ilość checkboxów była stała a każdy miał swoją unikalną nazwę ale w moim przypadku musi być ich tyle ile jest wierszy w tabeli "baza".

@nospor
po malutkich modyfikacjach Twój skryp ruszył specool.gif chociaż nie wszystko w nim rozumiem ale najważniejsze że działa, WIELKIE dzięki za pomoc
  1. if (!empty($_POST['obiekty_e'])){
  2. $query = "UPDATE user SET przypisany_obiekt='".implode(',',$_POST['obiekty_e'])."' WHERE id='$id_user';";
  3. $wynik = mysql_query ($query);
  4. }
nospor
A której części nie rozumiesz? Przecież tu nie ma nic do "nierozumienia" wink.gif
IF - sprawdza czy są dane
implode() - łączy elementy tablicy przecinkami
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.