Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][SQL] Powiązanie zaznaczonego chekboxa
Forum PHP.pl > Forum > Przedszkole
PiiiT
Proszę pomoc w rozwiązaniu problemu z przyporządkowaniem do zaznaczonego checkboxa wartości pól z pola input. W tej chwil dopisywane są odpowiednie produkty do bazy, ale za wartość ilość podstawia 0. Jeżeli zaznaczę wszytkie dostępne chekboxy i każdemu w polu ilość podam jakąś cyfrę dopisuje poprawnie, to samo dla pierwszego rekordu, pozostałe jak są zaznaczone pojedyńczo lub kilka wyświetla błąd:

"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id_prod=2' at line 1"

Czyli jakiś błąd z składną dla zaznaczonego produktu..

linie odpowiadające za wyświetlenie produktu z checkboxami:
  1. <? while($rows3=mysql_fetch_array($result3, MYSQL_ASSOC)){ ?>
  2.  
  3. <tr><td align="center" bgcolor="#ececec">
  4. <input name="checkboxp[]" type="checkbox" id="checkboxk[]" value="<? echo $rows3['id_prod']; ?>">
  5. </td><?php $rows3['id_prod']; ?><td bgcolor="#ececec" >
  6. <?php  
  7. echo $rows3['nazwa_prod']; ?></td><td bgcolor="#ececec"  align="center"><?php echo $rows3['ilosc']; ?></td>
  8. <?    echo "<td bgcolor=#ececec align=center><input type=text name=sztp><b>szt.<b></td></tr>"; ?></tr>
  9. <?php } ?>
  10. <tr><td colspan="7" align="center" bgcolor="#a8d4f9">
  11.  
  12. <input name="sell" type="submit" id="sell" value="Sprzedaj"></td></tr>


Kod odpowiadający za dodawanie do bazy:
  1. <?php
  2. if($_POST['sell']){
  3. for($k=0;$k<count($_POST['checkboxp']);$k++){
  4. $checkboxp=$_POST['checkboxp'];
  5. $del_idp = $checkboxp[$k];
  6. $id_klienta=$_POST['klient'];
  7.  
  8. $ile=$_POST['sztp'];
  9.  
  10. //print_r($del_idp);
  11.  
  12. if($del_idp>0){
  13.    
  14.         mysql_query("insert into spprod set id_produktu=$del_idp, id_kp=$id_klienta, pfv='".htmlspecialchars($_POST["fv"])."', pgw='".htmlspecialchars($_POST["gwarancja"])."', szt=$ile[$k],data_spp=NOW() ");
  15.         $resultp = mysql_query("UPDATE produkt SET ilosc=$ile[$k] WHERE id_prod=$del_idp ")
  16. }
  17.  
  18.  
  19. if($result3){echo "<meta http-equiv=\"refresh\" content=\"0;URL=obsluga.php\">";}
  20. }}
  21. ?>


Z góry dziękuję za pomoc. Pozdrawiam,
erix
W zapytaniu $ile[$k] oznacza znak o pozycji $k. winksmiley.jpg Wpisujesz pewnie liczbę sztuk jako jedną cyfrę i pierwszy rekord dodaje, a reszty już nie, bo nie ma takich indeksów - stąd dla nieistniejących nie ma wartości i zapytanie się kisi.
PiiiT
Jeżeli poprawię z $ile[$k] na $ile błąd nie pojawia się ale dodaje tylko ilość szt wpisaną obok ostatniedgo checkboxa..jeżeli zaznaczę wszystkie checkboxy, wszędzie podstawia wartość również z ostatniego pola..
erix
Cytat
$ile błąd nie pojawia się ale dodaje tylko ilość szt wpisaną obok ostatniedgo checkboxa.

Dzieje się tak dlatego, gdyż same checkboksy nazywasz jako tablicę, a pola sztuk już nie. Z tego powodu, przeglądarka wysyła wartość ostatniego i generuje błąd.

Nazwy pól musisz również zadeklarować tak, jak checkboksy.
PiiiT
Po wprowadzeniu zmian i zrobieniu analogicznie tak jak checkbox kod wygląda następująco:

linijka wyświetlająca pole gdzie wpisujemy ilość:

  1. <td bgcolor=#ececec align=center><input type=text name=sztp[] ><b>szt.<b></td></tr>";


  1. <?php
  2. for($s=0;$s<count($_POST['sztp']);$s++){
  3.  
  4. $checkboxs=$_POST['sztp'];
  5.  
  6. $del_ids = $checkboxs[$s];
  7.  
  8. if($del_idp>0){
  9.  
  10. mysql_query("insert into spprod set id_produktu=$del_idp, id_kp=$id_klienta, pfv='".htmlspecialchars($_POST["fv"])."', pgw='".htmlspecialchars($_POST["gwarancja"])."', szt=$del_ids, data_spp=NOW() ");
  11. ?>



Działa poprawnie dla jednego produktu tylko że w momencie gdy zaznaczę dwa checkboxy i wpiszę obok nich wartości to do bazy dodawane są 4 rekordy a nie dwa.. Czyli jak wpiszę 1 i 2 w bazie są wpisy 1 i 2 i 1 i 2. Jak zaznaczę 3 checkboxy to analogicznie dopisze 3 razy wszystkie wartości.. Z góry dziękuję za podpowiedź, Pozdrawiam,
erix
A $del_idp w tej pętli skąd się bierze? Coś mi nie pasują nazwy pól; możesz wstawić deklarację formularza (o ile się zmieniła od pierwszego posta) i cały kod odpowiedzialny za wstawianie do bazy?
PiiiT
Wklejam jeszcze raz kod odpowiadający za sprawdzenie który checkbox jest zaznaczony, następnie tak jak poradziłeś zrobiłem analogicznie sprawdzenie ile pól szt jest wypełnionych:
  1. <?php
  2. for($k=0;$k<count($_POST['checkboxp']);$k++){
  3. $checkboxp=$_POST['checkboxp'];
  4. $del_idp = $checkboxp[$k];
  5. $id_klienta=$_POST['klient'];
  6.  
  7. $ile=$_POST['sztp'];
  8.  
  9. for($s=0;$s<count($_POST['sztp']);$s++){
  10. $checkboxs=$_POST['sztp'];
  11. $del_ids = $checkboxs[$s];
  12.  
  13. print_r($ile);
  14. //print_r($del_idp);
  15.  
  16. if($del_idp>0){
  17.    
  18.        mysql_query("insert into spprod set id_produktu=$del_idp, id_kp=$id_klienta, pfv='".htmlspecialchars($_POST["fv"])."', pgw='".htmlspecialchars($_POST["gwarancja"])."', szt=$del_ids, data_spp=NOW() ");
  19.      
  20. }
  21. ?>


a tu linijka odpowiadająca za wyświetlanie formularza:
  1. <? while($rows3=mysql_fetch_array($result3, MYSQL_ASSOC)){ ?>
  2.  
  3. <tr><td align="center" bgcolor="#ececec">
  4. <input name="checkboxp[]" type="checkbox" id="checkboxp[]" value="<? echo $rows3['id_prod']; ?>">
  5. </td><?php $rows3['id_prod']; ?><td bgcolor="#ececec" >
  6. <?php  
  7. echo $rows3['nazwa_prod']; ?></td><td bgcolor="#ececec"  align="center"><?php echo $rows3['ilosc']; ?></td>
  8. <?    echo "<td bgcolor=#ececec align=center><input type=text name=sztp[] ><b>szt.<b></td></tr>"; ?></tr>
  9. <?php } ?>



Kod działa bez inputa "szt" (dodaje zaznaczone boxy do bazy niezależnie które zaznaczę) - może jest trochę bałaganu w kodzie ale znalazłem przykład w necie i przerobiłem go do swoich potrzeb. Jeszcze raz dziękuję za zainteresowanie moim postem i z góry dziękuję za pomoc..
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.