Dodanie do bazy wartości zaznaczonych checkboxem

0

Witam, moim problemem jest że nie mogę dodać do bazy wartości zaznaczonych checkboxem. Siedzę juz kilka godzin szukając błędów oraz rozwiązań. Może wy mi pomożecie.

Wyświetlanie listy działa bez zarzutu i każdy checkbox ma swoje id przypisane:

<?php
$query = "SELECT * FROM czesc";
$run = mysqli_query($db, $query);

while($row = mysqli_fetch_array($run)){

	$id_czesci = $row['id_czesci'];
	$nazwa = $row['nazwa'];
	$nr_handlowy = $row['nr_handlowy'];
	$id_grupy = $row['id_grupy'];
	
?>
<tr align="center">
     	<td><form action="dodaj_czesc.php" method="post"><input type="checkbox" name="nazwa[]" value="<?php echo $row['id_czesci']; ?>" /></td>
		<td><input type="text" name="nazwa_czesci" value="<?php echo $nazwa; ?>"/></td>
        <td><input type="text" name="nr_handlowy" value="<?php echo $nr_handlowy; ?>"/></td>
        <input type="hidden" name="grupa" value="<?php echo $id_grupy2 ?>" />
           
     </tr>
     <?php } ?><tr><th><input type="submit" value="Dodaj" name="dodaj" /></form> 

Tutaj kod z zapytaniem do bazy:

if(isset($_POST['dodaj'])){
	include("db_conn.php");

	$n = count($nazwa);
	for ($i=0;$i<$n; $i++){
	$nazwa[$i];
	$nazwa_czesci = $_POST['nazwa_czesci'];
	$nr_handlowy = $_POST['nr_handlowy'];
	$id_grupy3 = $_POST['grupa'];
	
		
	$insert_query = "insert into czesc (id_czesci, nazwa, nr_handlowy, id_grupy) values ('$nazwa[$i]','$nazwa_czesci','$nr_handlowy','$id_grupy3')";
	mysqli_query($db, $insert_query);
	} 

Ma to działać na takiej zasadzie że mam baze danych maszyn i chciałbym w ten sposób dodać jako nową część tylko z innym id_grupy. Wtedy przypisana będzie taka sama czesc do kilku grup.

0
$n = count($nazwa);

a co to niby jest? skąd ta $nazwa;?
$nazwa[$i]; a ta linijka po co?

poza tym klasyka - SQL Injection, nic tylko rozwalić Ci bazę...

0
 $n = count($nazwa);

tutaj zliczanie ilości wykonania pętli

$nazwa;

w tej zmiennej odwoływałem się do tablicy z name checkboxa w innych przypadkach to dzialalo bez problemu.

$nazwa[$i]; 

po to żeby po kolei dodało jeden wiersz potem druga iteracja drugi wiersz itd.

0
$nazwa[$i]; 

ta linijka nie robi zupełnie nic.

$n = count($nazwa); 

Ta linija przypisuje do zmiennej $n długość tablicy $nazwa

nie wiemy co to jest $nazwa i skąd ona się wzieła, jakiego jest typu, co do niej wpisałeś itp...

0
<input type="checkbox" name="nazwa[]"  

$nazwa przechowuje tablice z name checkboxa, pętla wypisuje np 20 pozycji na ekran, do kazdego checkboxa przypisane jest kolejne value, potem zliczam $n = count($nazwa); ilość zaznaczonych checkboxów i poźniej tyle razy ma się wykonać zapytanie do bazy z insertem wartości.

Może prościej będzie zrobić to inaczej?

W sensie jak zrobić abym mógł zczytać który checkbox jest zaznaczony i dodać do bazy tylko te pozycje które są zaznaczone.

Całość ma wyglądać że dodaje nazwe, numer handlowy oraz id grupy z pól które zaznaczone są checkboxem.

0

$nazwa to pewnie magicznie rejestrowany global z POSTa - sugeruję z tego nie korzystać, dać register_globals = off w konfiguracji, tym bardziej, że w PHP 5.3 zostało to oznaczone jako przestarzałe, a w 5.4 usunięte, więc kod korzystający z tego nie będzie działać poprawnie.

Zdecyduj się o co Ci chodzi z $id_grupy, bo masz tam niezły bajzel. Pobierając dane zapisujesz to do $id_grupy, do ukrytego pola wstawiasz niezainicjowane $id_grupy2 natomiast podczas zapisu tą pusta wartość przypisujesz do $id_grupy3, tu też pewnie masz problem.

Jednakże masz mega błąd składniowy - otwierasz nowy formularz na każdej pozycji, a kończysz go tylko raz, nie dziwo, że przeglądarka głupieje. I tu nie bardzo wiem co chciałeś osiągnąć, jeżeli cała tabela ma być jednym formularzem to wtedy duplikujesz pola z nazwą i numerem handlowym, ale checkboxy przynajmniej będą działać. Jeżeli jednak każdy wiersz miał być oddzielnym formularzem to pola tekstowe są ok, ale mija się z celem posiadanie tam checkboxów (zamiast checkboxa guzik przypisz wysyłający formularz i jako tako by to działało).

0

Ten problem rozwiązałem na własną ręke i działa tak jak ma działać.

Mam teraz następujący problem:

Kod formularza:

<td><form action="mail.php" method="post"><input type="checkbox" name="nazwa[]" value="<?php echo $row['nr_handlowy']; ?>"/></td>
     	<td><?php echo $nazwa_czesci; ?></td>
        <td><?php echo $nr_handlowy; ?></td>
		<td><input type="text" name="ilosc[]" size="1" value="1" /></td>
     </tr>
     
     <?php } ?><tr><th><input type="submit" value="Zamów" name="zamow" /></form></th></tr> 

Jak zrobić aby powiązać: jeżeli zaznaczony checkbox wyślij wartość ilość z wpisanej wartości w inpucie.

Działa mi to póki co tak że wysyła całą tablice bez wzgledu na to co jest zaznaczone z pola ilosc, jeżeli użyje ilość bez [] to przesyła mi tylko jedną wartość i wstawia do wszystkich zaznaczonych tą samą wartość.

W formularzu wyświetla się lista wszystkich czesci z bazy, użytkownik wybiera części które go interesują opcjonalnie wpisując inna ilośc niż domyślna, skrypt php odbiera dane i wysyla na maila - ogolna zasada.

Nie wiem tylko jak powiazac ze jak zaznaczony checkbox to pobierz wartosc ilosc z zaznaczonej czesci.

0
misiek154 napisał(a):

Ten problem rozwiązałem na własną ręke i działa tak jak ma działać.

Póki co, z czasem będą kolejne problemy, ale skoro Cię to nie interesuje to mnie też nie.

misiek154 napisał(a):

Jak zrobić aby powiązać: jeżeli zaznaczony checkbox wyślij wartość ilość z wpisanej wartości w inpucie.

Checkboxa oraz pole z ilością nazwij nazwa[nr_handlowy] oraz ilosc[nr_handlowy] wtedy utrzyma Ci się powiązanie jednego z drugim.

Jeżeli już tak bardzo musisz mieszać kod PHP z HTMLem to chociaż rób to bardziej czytelnie i zastosuj format heredoc.

echo <<<HTML
<td>
	<form action="mail.php" method="post"><input type="checkbox" name="nazwa[{$row['nr_handlowy']}]" value="{$row['nr_handlowy']}" /></td>
    <td>$nazwa_czesci</td>
	<td>$nr_handlowy</td>
	<td><input type="text" name="ilosc[{$row['nr_handlowy']}]" size="1" value="1" /></td>
</tr>
HTML;

Co i tak nie zmienia faktu, że masz błędny kod HTML i ogólnie tworzysz śmietnik :U.

1 użytkowników online, w tym zalogowanych: 0, gości: 1