2015-11-07 2 views
1

Я создаю переключатели динамически. Мне нужно написать опубликованные данные в таблицу MySQL. Названия переключателей будут меняться так же, как и количество кнопок.Сохранять значения динамически сгенерированных переключателей в mysql

Например, если созданы четыре переключателя, имя каждого представляет собой переменную $ offer_id (число), а значения да или нет.

Я хочу иметь все опубликованные данные в одном поле таблицы. Я попытался использовать массив ("props_yes []"), но, конечно, каждый новый перезаписывает предыдущую кнопку.

Спасибо за любую помощь.

$sql = "SELECT * FROM table WHERE ballot_name = '$ballot_id' "; 
$sql_result = mysql_query($sql,$link); 
     while ($row = mysql_fetch_array($sql_result))  
     { 
$proposed_id = $row['submission_id'];   
echo '<input name="' . $proposed_id . '" id="' . $proposed_id . '_yes"type="radio" value="Yes" required > ';   
echo '<label for="' . $proposed_id . '_yes">' . 'YES' . '</label> '; 
echo '<input name="' . $proposed_id . '" id="' . $proposed_id . '_no" type="radio" value="No" required > ';   
echo '<label for="' . $proposed_id . '_no">' . 'NO' . '</label><br>'; 

     } 
+1

Считается, что плохой дизайн хочет хранить разные ответы в одном поле базы данных. Читайте о нормализации. Это действие приведет к тому, что вы уже завершили первый уровень [нормализации] (https://en.wikipedia.org/wiki/Database_normalization). – trincot

ответ

0

Хотя я согласен с @trincot, что, в общем, это плохая практика для хранения нескольких, различных видов значений в одном поле БД, бывают случаи, что называется за или даже необходимо, так как для Например, когда ваша база данных использует EAV pattern, как и некоторые популярные системы, такие как Wordpress. Если это первичные данные, которые хранятся в вашей базе данных, вы можете рассмотреть NoSQL database для этого проекта.

Это, как говорится, вот как вы можете справиться с хранением и извлечением ваших данных. Во-первых, я бы добавил некоторое ключевое слово в поле name ваших входов radio, например. name="ballot_'.$proposed_id.'", так что вы не получите пучок полей с цифрами в качестве имен и так, чтобы у вас был способ фильтрации результатов на стороне сервера. На стороне сервера, то вы могли бы сделать что-то вроде (предполагается, что форма была представлена ​​с использованием POST):

// create an associative array of values from your radio buttons 
$ballot_values = array(); 
foreach ($_POST as $index => $value) { 
    if (false !== strpos($index, 'ballot_')) { 
     $id = substr($index, 7); // get the numeric part of the name 
     $ballot_values[$id] = $value; 
    } 
} 

После того, как вы сделаете это, $ballot_values будет содержать ассоциативный массив идентификаторов и да/нет значения. Для того, чтобы сохранить это в одном поле базы данных, вам необходимо serialize массива, т.е.

$serialized_ballot_values = serialize($ballot_values); 

Это будет хранить массив в виде одной строки, которые вы можете хранить в своей области БД. Когда вы извлекаете значение из базы данных, вы должны будете указать unserialize, прежде чем сможете его использовать.

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

0

Используйте массив с ключами в названиях ваших кнопок. PHP интерпретирует представленные значения в массиве.

$sql = "SELECT * FROM table WHERE ballot_name = '$ballot_id' "; 
$sql_result = mysql_query($sql,$link); 
    while ($row = mysql_fetch_array($sql_result))  
    { 
$proposed_id = $row['submission_id'];   
    echo '<input name="props_yes[' . $proposed_id . ']" id="' . $proposed_id . '_yes"type="radio" value="Yes" required > ';   
    echo '<label for="' . $proposed_id . '_yes">' . 'YES' . '</label> '; 
    echo '<input name="props_yes[' . $proposed_id . ']" id="' . $proposed_id . '_no" type="radio" value="No" required > ';   
    echo '<label for="' . $proposed_id . '_no">' . 'NO' . '</label><br>'; 

    } 

После поста, значение $_POST['props_yes'] будет содержать массив выбранных ответов. Ключи в массиве будут от $proposed_id

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