Несколько динамических переключателей на основе выбора флажка - PullRequest
2 голосов
/ 22 февраля 2012

У меня есть форма выбора, которая позволяет пользователям выбирать продукт из динамически генерируемого списка MySQL и затем оценивать продукт с помощью переключателей.

<input type="checkbox" value="$row[ProdID]" name="Product[]" id="Product$row[ProdID]" onclick="showhide_div($row[ProdID])" />$row[ProductName]

<div id="div$row[CatID]" style="display:none">
<input type="radio" name="ProductQual$row[ProdID]" id="PQ$row[ProdID]" value="1" /> Poor&nbsp;&nbsp;
<input type="radio" name="ProductQual$row[ProdID]" id="PQ$row[ProdID]" value="2" /> Fair&nbsp;&nbsp;
<input type="radio" name="ProductQual$row[ProdID]" id="PQ$row[ProdID]" value="3" /> Good&nbsp;&nbsp;
<input type="radio" name="ProductQual$row[ProdID]" id="PQ$row[ProdID]" value="4" /> Excellent&nbsp;&nbsp;
</div>

Я хочу поставить выбранное значение радио для каждого из«проверенные» продукты в таблице MySQL

-----------------
| ProdID(a) | 3 |
| ProdID(b) | 1 |
-----------------

Я знаю, что мне нужно for_each для каждого выбранного продукта, но у меня возникают проблемы с выяснением того, как связать правильную радиокнопку из общего $ POST с продуктом во времяцикл for_each для помещения значений в таблицу MySQL.

1 Ответ

1 голос
/ 22 февраля 2012

Возможно, есть более элегантный способ ведения дел, но это было бы моим решением. Я обернул ваши флажки и радио в теги <label></label>, чтобы текст можно было нажимать (это также хорошая рекомендация по доступности) РАДИО генерируются с уникальным идентификатором для каждого продукта.

<?php

echo '<label><input type="checkbox" name="product_' . $row['ProdID'] . '" id="product_' . $row['ProdID'] . '" onclick="javascript:showhide_div(' . $row['ProdID'] . ')" /> ' . $row['ProductName'] . '</label>';

echo <<<EOT
<div id="div{$row['ProdID']}" style="display:none;">
<label><input type="radio" name="productquality_{$row['ProdID']}" value="1" /> Poor</label>
<label><input type="radio" name="productquality_{$row['ProdID']}" value="2" /> Fair</label>
<label><input type="radio" name="productquality_{$row['ProdID']}" value="3" /> Good</label>
<label><input type="radio" name="productquality_{$row['ProdID']}" value="4" /> Excellent</label>
</div>
EOT;

А на бэкэнде все рейтинговые поля анализируются и вставляются в таблицу.

<?php

foreach ( $_REQUEST as $k=>$v){   // Step through each _REQUEST (_POST or _GET) variable

    if ( strpos( $k, 'productquality' ) !== false ){    // Only parse productquality_X variables
        $parts = explode( '_', $k );    // Split at the underscore
        $id = $parts[1];    // ID is the part after the underscore

        // Do something, like insert into MySQL.  In reality best to escape the values, to make sure to prevent injection.
        mysql_query( ' INSERT INTO `quality` ( ProdID, Rating ) VALUES ( ' . $id . ', ' . $v . '); ');
    }
}
...