Zapis właściwości checkbox do bazy danych

0

Witam,
mam pewien problem. Z bazy danych pobieram zdjęcia, które tworzą pewnego rodzaju galerię(a raczej nazwy zdjęć), które później są odpowiednio wyświetlane. Obok każdego zdjęcia mam pole typu checkbox. Do każdego artykułu można będzie dodać dajmy na to 12 zdjęć. I tu pojawia się pytanie. W jaki sposób najlepiej zapisać wartość tych zdjęć do bazy danych? Z ustawieniem parametry value nie ma problemu, bo pobieram to z bazy danych i potem tylko wstawiam. Zastanawia mnie kwestia, czy do tabeli z artykułami(article) wstawić kolumny typu image1, image2, image3 itd, czy może skorzystać z pól typu ENUM/SET?

Tak to wygląda, zdjęcia po kopiowane więc nazwy są takie same - bez znaczenia:
edit.png

I teraz jak zaznaczę 2 zdjęcia to do bazy zapiszą się 2, jak 5 to 5, etc. Ma ktoś jakiś pomysł jak to rozwiązać? Czekam na kreatywne pomysły.
Pozdrawiam :)

0

Zdecydowałem się na tą drugą opcję. W ten sposób tworzę checkbox dla każdego zdjęcia:

<input type="checkbox" value="'.$getImage['name'].'" name="'.$getImage['name'].'" style="vertical-align: middle;"/>

Przypisuje mu dla atrybutu value indywidualną wartość, która ma zostać zapisana w bazie danych. Problem jest z atrybutem name. Jak go dynamicznie utworzyć?

W ten sposób przypisuję zmienną $_POST do metod setImage1 oraz setImage2

if($rowAllImage){
	foreach($rowAllImage as $getImage){
		$news->setImage1($_POST[''.$getImage['name'].'']);
		$news->setImage2($_POST[''.$getImage['name'].'']); 
	}
}

Co skutkuje wyświetleniem notatek typu: Undefined variables...

Pytane brzmi, jak zapisać do bazy TYLKO TE POLA co są zaznaczone?

0

Pierwsze 3 strony z wierzchu w Google (reszty nie chciało mi się już sprawdzać) mówią o tym, że w takim przypadku dajesz wszędzie taki sam atrybut name z dopisanym nawiasem kwadratowym, po czym wyciągasz z niego dane jak ze zwykłej tablicy.

Przykład:

<input type="checkbox" name="img_group[]" value="value1" />Value 1<br />
<input type="checkbox" name="img_group[]" value="value2" />Value 2<br />
<input type="checkbox" name="img_group[]" value="value3" />Value 3<br />

Czytasz i zapisujesz do bazy to później tak:

if (isset($_POST['img_group'])) {

    //Tworzysz string z tablicy zawierającej wartości wybranych checkboxów, oddzielony np. spacją:
    $imgSrting = implode(" ",$_POST['img_group']);
    zapiszStringDoBazy($imgSrting);
  
}

Nie bardzo wiem jak działają Twoje metody (SetImageX) bo z tego co widzę musiałeś napisać je wcześniej ręcznie, a nie tworzysz dynamicznie. Pisałeś natomiast o wyborze raz 2 obrazków a raz 5 więc nie wiem jak to ma u Ciebie wyglądać dlatego pisząc bardzo schematycznie to możesz później zrobić coś takiego:

$tablicaImg = wczytajStringiZBazy());
$obrazkiArray = explode(" ",$tablicaImg);

foreach($obrazkiArray as $obrazek){
     $news->dodajObrazek($obrazek);
}

Nie wiem czy są na to jakies sprytniejsze skrypty, mi tyle spontanicznie przyszło do głowy na podstawie Twojego opisu. Pisane oczywiście z głowy więc sprawdz literówki w razie czego :)

0

Mam jeszcze jeden problem. Mam taki checkbox - jak widać w parametrze name utworzona jest tablica.

<input type="checkbox" name="publicImages[]" value="'.$GETimage['id_image'].'" />	

I teraz tak. Co zrobić by przy zaznaczeniu większej ilości checkboxów przesyłała się tablica i automatycznie tworzył się "AND" w zapytaniu dla każdego checkboxa? Przy zaznaczeniu każdego pobieram mu jego id z parametru value i przypisuję mu status. Chodzi o przesyłanie większej ilości danych z checkbox w jednej tablicy.

if(isset($_POST['addToPublicGallery'])){
	$gallery->setPublicGallery($_POST['publicImages'][0]); 
		var_dump($_POST['publicImages']);		

	   	if($gallery->doImageToPublicGallery()){		   		
echo 'Poprawnie ustawiono zdjęcia jako publiczne';
		   	}
		
	} 
1

Źle to robisz. Zdjęcia powinny iść do osobnej tabeli i tam być powiązane z artykułem. To Ci daje:

  1. Teoretycznie nieograniczoną ilość zdjęć dla artykułu. Jeśli potrzebujesz ograniczyć, to robisz to kodem
  2. Jeśli musisz mieć ograniczoną ilość zdjęć do 12, to za jakiś czas może się okazać, że potrzebujesz 15 zdjęć. I wtedy sieka, bo musisz przerabiać bazę danych. A tak po prostu robisz dodatkowe wpisy do tabeli.

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