Флажки Вставка в базу данных MySql - PullRequest
1 голос
/ 30 сентября 2010

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

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

Вот мой код:

        $q1 = mysql_escape_string($_POST['q1']);
        $q2 = mysql_escape_string($_POST['q2']);
        $q3 = mysql_escape_string($_POST['q3']);            
        $q4 = mysql_escape_string($_POST['q4']);
        $q5 = mysql_escape_string($_POST['q5']);            
        $q6 = mysql_escape_string($_POST['q6']);
        $q7 = mysql_escape_string($_POST['q7']);
        $q8 = mysql_escape_string($_POST['q8']);
        $q9 = mysql_escape_string($_POST['q9']);
        $q10 = mysql_escape_string($_POST['q10']);
        $q11 = mysql_escape_string($_POST['q11']);
        $q12 = mysql_escape_string($_POST['q12']);
        $q13 = mysql_escape_string($_POST['q13']);
        $q14 = mysql_escape_string($_POST['q14']);
        $email = mysql_escape_string($_POST['email']);

        require_once('connection.php');

        $sql="INSERT INTO survey (Question1, Question2, Question3, Question4, Question5, Question6, Question7, Question8, Question9, Question10, Question11, Question12, Question13, Question14, eMail) VALUES ('$q1', '$q2', '$q3', '$q4', '$q5', '$q6', '$q7', '$q8', '$q9', '$q10', '$q11', '$q12', '$q13', '$q14', '$email')";

        if (!mysql_query($sql,$conn))
          {
      die('Error: ' . mysql_error());
          }

          mysql_close($conn);

Ответы [ 4 ]

3 голосов
/ 30 сентября 2010

Во-первых, mysql_escape_string устарела - вы должны использовать mysql_real_escape_string.

Во-вторых, это позволит любому злонамеренному пользователю вставлять в результаты разные значения, например 2 и 3.Вам нужно, чтобы каждое значение соответствовало 0 или 1. Для этого я бы рекомендовал приводить к типу bool, а затем int:

$q1 = (int)((bool)$_POST['q1']);
$q2 = (int)((bool)$_POST['q2']);
...

Для вашего HTML каждому флажку необходим атрибут значения '1 '.

Поскольку это только целые числа, избавляться от них не нужно.

0 голосов
/ 30 сентября 2010

Вы проверили имя вашего элемента HTML-флажок? Все элементы-флажки, относящиеся к определенному вопросу (например, 1), должны иметь имя вроде: 'question1 []'. Таким образом, все значения будут возвращены через $ _POST в виде массива.

например, $ _POST ["question1"] теперь является массивом, содержащим проверенные значения.

edit--

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

0 голосов
/ 30 сентября 2010

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

Похоже, это может быть конфликт имен в именах полей ввода.Убедитесь, что ваши поля ввода имеют уникальные имена.

Есть ли способ сохранить все проверенные значения, возможно, разделенные запятой или точкой с запятой?

Вам кажетсяиметь отдельные столбцы базы данных для каждого вопроса: зачем объединять их запятыми или точками с запятой?

0 голосов
/ 30 сентября 2010

Если флажок не установлен, он не отправляется на следующую страницу.Я полагаю, что $ _POST ['email'] является текстовым полем, и оно отправляется неважно, если оно является чем-то полным.
Вместо этого попробуйте что-то вроде этого:

$sql="INSERT INTO survey (Question1, Question2, Question3, Question4, Question5, Question6, Question7, Question8, Question9, Question10, Question11, Question12, Question13, Question14, eMail) VALUES (";

if ($_POST['q1'] == 'On') $sql .= "1, "; else $sql .= "0, ";

if ($_POST['q2'] == 'On') $sql .= "1, "; else $sql .= "0, ";
if ($_POST['q3'] == 'On') $sql .= "1, "; else $sql .= "0, ";
if ($_POST['q4'] == 'On') $sql .= "1, "; else $sql .= "0, ";
if ($_POST['q5'] == 'On') $sql .= "1, "; else $sql .= "0, ";
if ($_POST['q6'] == 'On') $sql .= "1, "; else $sql .= "0, ";
if ($_POST['q7'] == 'On') $sql .= "1, "; else $sql .= "0, ";
if ($_POST['q8'] == 'On') $sql .= "1, "; else $sql .= "0, ";
if ($_POST['q9'] == 'On') $sql .= "1, "; else $sql .= "0, ";
if ($_POST['q10'] == 'On') $sql .= "1, "; else $sql .= "0, ";
if ($_POST['q11'] == 'On') $sql .= "1, "; else $sql .= "0, ";
if ($_POST['q12'] == 'On') $sql .= "1, "; else $sql .= "0, ";
if ($_POST['q13'] == 'On') $sql .= "1, "; else $sql .= "0, ";
if ($_POST['q14'] == 'On') $sql .= "1, "; else $sql .= "0, ";

$sql .= mysql_escape_string($_POST['email']) . ')';

        require_once('connection.php');

        if (!mysql_query($sql,$conn))
          {
      die('Error: ' . mysql_error());
          }

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