Problem z edycją checkbox - In_array

0

Witam,
Próbowałem samemu rozwiązać problem, który dotyczy edycji pół checkbox. Działa edycja, gdy usunę $id i z zapytania sql where id='$id'. Dodatkowo znika w pasku adresu id, który chce edytować. Kod jest taki:

require_once('dbconn.php');
  $id = isset($_GET['id']) ? $_GET['id'] : '';
  $sql2 = $db->query("SELECT * FROM generalbox where id = '$id'");
	 $result=$sql2->fetch_All(MYSQLI_ASSOC);
	foreach($result as $row){
		$update_data = explode(',', $row['form']);
		//print_r($update_data);
	}
	
 if(isset($_POST['submit'])){
	$id = isset($_GET['id']) ? $_GET['id'] : '';
	
	$update_data = implode(',', $_POST['general']);
    $sql = $db->query("UPDATE generalbox SET form = '$update_data' where id = '$id' "); 
		 
	 if($sql>0){
		 echo "Zaktualizowano dane";
	 }else{
		 echo "Błąd w aktualizacji!";
	 }
	 
	  $sql3 = $db->query("SELECT * FROM generalbox where id='$id' ");
	 $result=$sql3->fetch_All(MYSQLI_ASSOC);
	foreach($result as $row){
		$update_data = explode(',', $row['form']);
	}
}

A błędy pokazują na pola checkbox:

Warning: in_array() expects parameter 2 to be array, string given in C:\xampp\htdocs\www\Projekty\formcheckbox.php on line 50
/> PHP
Warning: in_array() expects parameter 2 to be array, string given in C:\xampp\htdocs\www\Projekty\formcheckbox.php on line 51
/> Python
Warning: in_array() expects parameter 2 to be array, string given in C:\xampp\htdocs\www\Projekty\formcheckbox.php on line 52
<div><input type="checkbox" name="general[]" value="PHP" <?php in_array('PHP', $update_data) ? print "checked" : ""; ?> /> PHP</div>
	   <div><input type="checkbox" name="general[]" value="Python" <?php in_array('Python', $update_data) ? print "checked" : ""; ?> /> Python</div>
	   <div><input type="checkbox" name="general[]" value="C#" <?php in_array('C#', $update_data) ? print "checked" : ""; ?>/> C#</div>```

Robiłem to na podstawie jednego tutorialu, który jest na Youtube, tylko u tego autora działało i nie było żadnego select nad isset. Też sprawdzałem jak miał i nie działało. Proszę o odpowiedź problem rozwiązać a naszukałem się. I zastanawiałem się, czy tu napisać, ale to już moja ostateczność.

0

Do $update_data przypisujesz explode co tworzy stringa.
Przemyśl sobie jak to ma działać i co robić.

0
jurek1980 napisał(a):

Do $update_data przypisujesz explode co tworzy stringa.
Przemyśl sobie jak to ma działać i co robić.

Ja wiem, jak ma działać, i chcę aby po ID edytowało checkboxy. Dodawanie do bazy mam napisane i obok danych mam edit, który przenosi do id danego rekordu.

0

Przeanalizuj sobie kod, a dokładniej użycie implode.

0
serek napisał(a):

Przeanalizuj sobie kod, a dokładniej użycie implode.

To może pokaże link do tego filmu, na którym się wzorowałem. Film I u tego Autora działa z implode i explode, tylko, że ja mam bez listy rozwijanej.
Ja już analizowałem i nie mogę dojść. Dlatego proszę o pomoc. Bo naprawdę szukałem. Wiem i czytałem różnice implode a explode, ale nadal nie mogę dojść.

0

Daj w 5 linijce jakis dump na row['form`] co tam jest

0

Znalazłem problem, zakomentowałem wszystko i dodałem pole username, gdzie mam tak przy dodawaniu. Okazało się, że zapytanie update nie działa. Dobra napiszę od nowa, ale nie dziś,

1

Po pierwsze strasznie nieczytelne to masz. Masz zmienną update_data, która służy do 3 rzeczy naraz, przy czym poprzedni jej wynik jest nadpisywany dalej. Raz zawiera stringa, a raz array,

Potem masz foreach, który też nic nie wnosi, bo też wyżej wymienioną zmienną nadpisuje za każdym razem. Więc na koniec update_data straci informacje o poprzednich iteracjach. Zresztą, czy to jest gdziekolwiek użyte potem?

 foreach($result as $row){
        $update_data = explode(',', $row['form']);
 }
0
serek napisał(a):

Po pierwsze strasznie nieczytelne to masz. Masz zmienną update_data, która służy do 3 rzeczy naraz, przy czym poprzedni jej wynik jest nadpisywany dalej. Raz zawiera stringa, a raz array,

Potem masz foreach, który też nic nie wnosi, bo też wyżej wymienioną zmienną nadpisuje za każdym razem. Więc na koniec update_data straci informacje o poprzednich iteracjach. Zresztą, czy to jest gdziekolwiek użyte potem?

 foreach($result as $row){
        $update_data = explode(',', $row['form']);
 }

Dlatego podałem link (film) gdzie jest raz explode, a nie dwa razy. Tylko u autora działa z jednym, a u mnie nie. Muszę na nowo napisać.
Update!
Już sobie poradziłem i działa. Kod jest bez zmian, ale poprawiłem przekazywanie id. Zrobiłem to etapami. 1. Dodawanie do bazy, 2. wyświetlenie. 3 przejście do edycji i działa.

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