PHP один цикл через 2 таблицы MySQL - PullRequest
1 голос
/ 28 июня 2011

Пожалуйста, просмотрите этот код:

    $current_sql = mysql_query("SELECT * FROM `product_categories` WHERE `product`='{$_GET['id']}'");
    $all_sql = mysql_query("SELECT * FROM `categories`");
    $in = mysql_fetch_array($current_sql);

    while($ca = mysql_fetch_array($all_sql)){

        echo("<label><input type=\"checkbox\" name=\"categories[]\" value=\"".$ca['ID']."\" class=\"cat_check\"");
        if($edit){
            if(in_array($ca['ID'], $in)){
                echo(" checked=\"checked\"");   
            }
        }
        echo("> " . $ca['category'] . "</label><br/>\n");

    }

Это вывод:

<label><input type="checkbox" name="categories[]" value="1" class="cat_check" checked="checked"> PS3 Games</label><br/> 
<label><input type="checkbox" name="categories[]" value="16" class="cat_check"> Category 2</label><br/> 
<label><input type="checkbox" name="categories[]" value="17" class="cat_check" checked="checked"> Category 3</label><br/> 
<label><input type="checkbox" name="categories[]" value="18" class="cat_check"> Category 4</label><br/> 
<label><input type="checkbox" name="categories[]" value="19" class="cat_check"> Category 5</label><br/>

Проблема только в значении флажка = "17" должен быть проверен, есть 2 базы данных MySQL, вот структуры:

categories:

ID    |   name
1         PS3 Games
16        Category 3
17        Category 4
18        Category 5
19        Category 6

product_categories

category     |    product
1                 20
17                1

Пожалуйста, помогите !!

UPDATE:

Извините, забыл добавить:

$_GET['id'] = 1

Ответы [ 4 ]

1 голос
/ 28 июня 2011

Вместо

$in = mysql_fetch_array($current_sql);

do

while ($prod_cat = mysql_fetch_array($current_sql)) {
  $in[] = $prod_cat['cat_id']; // where cat_id is the category ID in product_categories table
}

В основном проблема в том, что mysql_fetch_array вернет вам 2 массива, и я думаю, что у вас есть что-то вроде array([0] = 1, [1] =17, etc ...).Это вызывает проверку обеих категорий.Если вы напечатаете $ in в своем коде, вы поймете, что я имею в виду.

0 голосов
/ 28 июня 2011

попробуй

$current_sql = mysql_query("SELECT * FROM `product_categories` WHERE `product`='{$_GET['id']}'");
$all_sql = mysql_query("SELECT * FROM `categories`");
$pcs = array();
    while($in=mysql_fetch_array($current_sql);)){
        $pcs[]=$in['ID']
    }

while($ca = mysql_fetch_array($all_sql)){

    echo("<label><input type=\"checkbox\" name=\"categories[]\" value=\"".$ca['ID']."\" class=\"cat_check\"");
    if($edit){
        if(in_array($ca['ID'], $pcs)){
            echo(" checked=\"checked\"");   
        }
    }
    echo("> " . $ca['category'] . "</label><br/>\n");
}
0 голосов
/ 28 июня 2011

Попробуйте это: $ current_sql = mysql_query ("ВЫБЕРИТЕ категорию ОТ product_categories ГДЕ product = '{$ _ GET [' id ']}' LIMIT 1");

if (($ ca ['ID'] == $ current_sql ['ID'])) { echo ("флажок = \" проверено \ "");
}

0 голосов
/ 28 июня 2011

Это даст вам только массив с первой строкой в ​​вашей таблице сопоставления, то есть он будет содержать 1 и 20 (категория и продукт).

$ in = mysql_fetch_array ($ current_sql);

Вы хотели бы пройтись по нему, чтобы получить все категории, чтобы получить правильную функциональность. НО:

Вам лучше объединить ваши product_categories в один и тот же запрос и оставить какое-то логическое значение, чтобы указать, какие из них уже выбраны. То, как вы делаете это сейчас, вообще не сработает.

SELECT c.*, IFNULL(pc.category, 0, 1) as checked FROM `categories` c
LEFT JOIN `product_categories` pc ON pc.category = c.ID AND product = {$_GET['id']}

тогда вы можете проверить

if ($resultset['checked'])

Потому что это будет 1, если часть product_category, и 0, если нет.

Но не забудьте уйти от своих параметров или использовать подготовленные утверждения, как кто-то предложил в комментариях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...