Checkbox, с проверка от базата данни

noxious

Registered
Здравейте!
Имам 2 таблици, едната съдържа всички размери:

sizes.sql
[sql]
CREATE TABLE IF NOT EXISTS `sizes` (
`id` int(11) NOT NULL,
`size` varchar(255) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--
-- Схема на данните от таблица `sizes`
--

INSERT INTO `sizes` (`id`, `size`) VALUES
(1, 'XS'),
(2, 'S'),
(3, 'M'),
(4, 'L'),
(5, 'XL'),
(6, 'XXL');[/sql]

products, която съдържа колона "sizes" (products.sizes). Като например sizes = 1,3,7 (id-тата се вземат от sizes, explode-нати чрез запетая)

Правя страница за редактиране и там искам за дадения продукт (например edit.php?id=1) да има checkbox, на който да се показват всички възможни размери от sizes, като текущите запаметени за този продукт да са checked="checked"

Моя код, който показва единствено тези, които са explode от бд-то за текущия продукт, т.е. не показва всички и да check-ва само тези, които са изброени в products.sizes със запетая:
PHP:
<?php
$query2 = mysql_query("SELECT *, products.sizes AS table_sizes FROM `products` JOIN `sizes` ON sizes.id = products.sizes WHERE products.id = ".$id."");
while($row2 = mysql_fetch_array($query2)) {
	$rrSize = $row2['table_sizes'];
	$csExplode = explode(",", $rrSize);

	foreach($csExplode as $sizes) {
		$rSize = mysql_fetch_array(mysql_query("SELECT * FROM `sizes` WHERE `id`='".$sizes."'"));
		if($sizes != NULL) {
			echo '<li><input type="checkbox" name="sizes[]" value="'.$rSize['size'].'" /> '.$rSize['size'].'</li>';
		}
	}
}
?>
 
Нещо такова трябва да стане. Не съм го пробвал, идеята е да изкараш всички размери и тогава да вземеш ТЕЗИ на продукта и понеже си ги explode-нал и става масив и лесно може да се провери да ли стойностите на единия масив ги има в другия и така да кажеш кое ще е цъкнато.

http://php.net/manual/en/function.in-array.php - за повече инфо и справка.

PHP:
<?php
$vsichkiRazmeri = mysql_query("SELECT *, products.sizes AS table_sizes FROM `products` LEFT JOIN `sizes` ON sizes.id = products.sizes ");
while($row = mysql_fetch_array($vsichkiRazmeri)) {
        $size = $row['table_sizes'];
        $sizes_array = explode(",", $rrSize);

        if(in_array( $sizes_array,$size))
        {

         echo '<li><input type="checkbox" checked="" name="sizes[]" value="'.$row['size'].'" /> '.$rwo['size'].'</li>';
        }
        else
        {
        	  echo '<li><input type="checkbox" name="sizes[]" value="'.$row['size'].'" /> '.$rwo['size'].'</li>';
        }
      
}
?>
:?:
 
с малки корекции остана само Warning: in_array() expects parameter 2 to be array, string given in ... 189 line

189 ред:
PHP:
if(in_array($sizes_array, $size))

кода:
PHP:
<?php
$vsichkiRazmeri = mysql_query("SELECT *, products.sizes AS table_sizes FROM `products` LEFT JOIN `sizes` ON sizes.id = products.sizes ");
while($row = mysql_fetch_array($vsichkiRazmeri)) {
	$size = $row['table_sizes'];
	$sizes_array = explode(",", $size);

	if(in_array($sizes_array, $size))
	{
		echo '<li><input type="checkbox" checked="" name="sizes[]" value="'.$row['size'].'" /> '.$row['size'].'</li>';
	}
	else
	{
		echo '<li><input type="checkbox" name="sizes[]" value="'.$row['size'].'" /> '.$row['size'].'</li>';
	}  
}
?>
 
Така би трябвало да стане, но не съм го пробвал :)
PHP:
$_razmeri = [];
$db_razmeri_q = mysql_query("SELECT * FROM `sizes` ");
while ($r = mysql_fetch_assoc($db_razmeri_q)) {
	$_razmeri[] =$r;
}

$vsichkiRazmeri = mysql_query("SELECT *, products.sizes AS table_sizes FROM `products` LEFT JOIN `sizes` ON sizes.id = products.sizes ");

while ($row = mysql_fetch_array($vsichkiRazmeri)) {

    $size = $row['table_sizes'];

    $sizes_array = explode(",", $size);

    if (in_array($sizes_array, $_razmeri)) {

        echo '<li><input type="checkbox" checked="" name="sizes[]" value="' . $row['size'] . '" /> ' . $row['size'] . '</li>';

    } else {

        echo '<li><input type="checkbox" name="sizes[]" value="' . $row['size'] . '" /> ' . $row['size'] . '</li>';

    }

}
 
Ами нямам структурата на БД за да пробвам реално, затова ето к'во правят хората, разгледай и направи същото:

Вариант 1 : http://stackoverflow.com/questions/17846414/mysql-sql-and-db-for-product-with-multiple-categories

Вариант 2 - само, че с постове, а не продукти: http://stackoverflow.com/questions/24381579/multiple-categories-for-a-single-article-php-mysql

За да се научиш, трябва малко и да се потрудиш и да потърсиш и ще намериш :) :?:
 
Да, но това не е от заявката според мен.

print_r от първия масив с размерите
Код:
Array ( [0] => Array ( [id] => 1 [size] => XS ) [1] => Array ( [id] => 2 [size] => S ) [2] => Array ( [id] => 3 [size] => M ) [3] => Array ( [id] => 4 [size] => L ) [4] => Array ( [id] => 5 [size] => XL ) [5] => Array ( [id] => 6 [size] => XXL ) )

print_r от втория масив, т.е. добре ги е разделило "1,4,6" за id-то на продукта, който гледам
Код:
Array ( [0] => 1 [1] => 4 [2] => 6 )

PHP:
<?php
$_razmeri = [];
$db_razmeri_q = mysql_query("SELECT * FROM `sizes`");
while($r = mysql_fetch_assoc($db_razmeri_q)) {
	$_razmeri[] = $r;
}

//print_r($_razmeri);

$vsichkiRazmeri = mysql_query("SELECT *, products.sizes AS table_sizes FROM `products` LEFT JOIN `sizes` ON sizes.id = products.sizes WHERE products.id = ".$id."");
while($row = mysql_fetch_array($vsichkiRazmeri)) {
	
	$size = $row['table_sizes'];
	$sizes_array = explode(",", $size);

	//print_r($sizes_array);
	
	if(in_array($sizes_array, $_razmeri))
	{
		echo '<li><input type="checkbox" name="sizes[]" value="'.$row['size'].'" checked /> '.$row['size'].'</li>';
	}
	else
	{
		echo '<li><input type="checkbox" name="sizes[]" value="'.$row['size'].'" /> '.$row['size'].'</li>';
	}  
}
?>

Според мен, този in_array трябва да е във foreach или не знам.
 
Така като се позамисля и пробвах това, стана и работи отлично!

PHP:
<?php
$result = mysqli_query($mysqli_conn, "SELECT sizes FROM `products` WHERE id = ".$id.""); 
while($row3 = mysqli_fetch_array($result))
{
	$sizes = explode(",", $row3['sizes']);

	$query2 = mysql_query("SELECT * FROM `sizes` ORDER BY `id` ASC");
	while($row2 = mysql_fetch_array($query2)) {
	?>
	<li><input type="checkbox" name="sizes[]" value="<?php echo $row2['id']; ?>" <?php if(in_array($row2['id'], $sizes)) { ?> checked="checked" <?php } ?> /><?php echo $row2['size']; ?></li>
	<?php
	}
}
?>

Благодаря за отделеното време @joTunkiq, +1!
 
Ами щом върши работа, окей, само да знаеш, че не е много хубао да имаш заявка в цикъл + още един цикъл в него. Вярно има и изключения, но ти си знаеш, ако почне да бави, да знаеш за какво да гледаш :) :?:
 

Back
Горе