2010-11-02 3 views
1

У меня проблемы с переходом, чтобы выяснить, как сохранять динамические переключатели.PHP Сохранение динамических радиоблок

У меня есть проект, где я должен использовать радиокнопки вместо флажков.

В принципе, есть таблица базы данных с «ролями» в ней ... например, администратор, пользователь и т. Д. И т. Д., И они обновляются, но пользователь.

На определенной странице, они получают выплюнуть с помощью кнопки, расположенной рядом с ними, например, так:

<input name="wfa" type="radio" id="wfa" class="radio" value="1" /><label for="wfa">administrator</label> 

Они идут вниз страницы, столько записей имеются в базе данных.

Что мне нужно сделать, это сохранить проверенные в базе данных, но, будучи динамическими, я не могу сохранить каждое значение в отдельной строке ..... любая помощь?

Кто-то упомянул о сериализации, я просмотрел документацию php, но это не имело для меня большого смысла.

Cheers.

+0

Не в тему: Вы знаете о '', правильно? (Учитывая, что вам больше не нужен идентификатор.) – jensgram

+0

Не могли бы вы объяснить, почему вы не можете хранить каждое значение в отдельных ролях? Я бы предположил, что это самое гибкое решение? – Repox

ответ

0

Что мне нужно сделать, это сохранить проверенные данные в базе данных, но, будучи динамичными, я не могу сохранить каждое значение в отдельной строке ..... любая помощь?

Почему вы не можете поддерживать таблицу ссылок между roles и users с user_id и role_id? (Давайте назовем эту таблицу users_roles_mm.)

Когда форма отправлена, удалить все строки для текущего пользователя (user_id) и вставить строку с (user_id, role_id) парой для каждого проверяемого входа (роль).

Идея заключается в том, что каждый стол — roles и users — динамичны, как ссылка между ними. I.e., users_roles_mm является очень динамичным, поскольку он не зависит ни от структуры таблицы users, ни от таблицы roles.

+0

Я не знаю, сколько радио-кнопок там будет, может быть 10, может быть 100 ... Мне нужен способ их сохранения и получения их из базы данных. – Chris

+0

@ Крис Да, и это именно то, что возможно с [нормализованной] структурой (http://en.wikipedia.org/wiki/Database_normalization). Чтобы прочитать роли, вы просто «ПРИСОЕДИНЯЙТЕСЬ» над ссылочной таблицей. – jensgram

+0

Посмотрите на мой ответ и объедините его с этим ответом. Значения ваших кнопок - это идентификатор записи. У вас будут все идентификаторы в массиве post, и вы снова будете запрашивать свой db. – markus

1

Обычно вы должны иметь (как минимум) три таблицы базы данных: users, roles и users_roles (справочная таблица). Таблица users и таблица roles не требуют пояснений. Таблица users_roles, вероятно, имела бы две колонки: user_id и role_id.

Так, например, они будут выглядеть примерно следующим образом:

Table: users 
id INT PRIMARY KEY 
username VARCHAR 
password VARCHAR 
... 

Table: roles 
id INT PRIMARY KEY 
name VARCHAR 

Table: users_roles 
user_id INT 
role_id INT 

С помощью этой структуры базы данных, вы можете выяснить, какие роли у пользователя с запросом, как следующее:

SELECT 
    r.* 
FROM 
    users u, roles r, users_roles ur 
WHERE 
    u.id = ur.user_id 
AND 
    r.id = ur.role_id 

После этого вы получите массив ролей, назначенных текущему идентификатору пользователя, который вы можете перебрать и вывести флажок (лучшее решение, на мой взгляд).

$res = mysql_query($sql); 
while ($row = mysql_fetch_object($res)) { 
    printf('<label for="role_%d">%s</label>', $row->id, $row->name); 
    printf('<input type="checkbox" name="role[]" value="%1$d" id="role_%1$d" />', $row->id); 
} 

Когда вы отправляете это, проверяемые флажки будут доступны в виде массива под $_POST['roles'], который вы можете перебираем и вставить в users_roles таблицу.

+0

Эй, спасибо за код, но им хорошо с их печатью ... в основном все, что мне нужно, это хранить их, если они динамичны ... а также они должны быть радиообъектами с индивидуальными именами, такими как мои Пример наверху – Chris

+0

Да, и они это делают. Они будут храниться в таблице «role». Но каждый пользователь может иметь несколько ролей. И я упоминаю, как сохранить их в моем последнем абзаце. –

Смежные вопросы