1

調査タイプのフォームがありますが、多くの質問で、ユーザーは複数のボックスにチェックマークを付けることができます。

私はこれらの回答を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

4 に答える 4

3

まず、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」の値属性が必要です。

これらは整数のみであるため、エスケープする必要はありません。

于 2010-09-30T14:31:28.493 に答える
0

チェックボックスがチェックされていない場合、次のページに送信されません。$ _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);
于 2010-09-30T14:32:27.873 に答える
0

現時点では、データベースにはチェックされている最後のチェックボックスのみが保存されています。

これは、入力フィールド名の名前の衝突である可能性があるようです。入力フィールドに一意の名前が付けられていることを確認してください。

チェックされたすべての値を、コマまたはセミコロンで区切って保存する方法はありますか?

質問ごとに個別のデータベース列があるようです。なぜそれらをコンマまたはセミコロンで結合したいのですか?

于 2010-09-30T14:36:57.810 に答える
0

HTMLチェックボックス要素の名前を確認しましたか?特定の質問(例:1)に属するすべてのチェックボックス要素には、「question1[]」のような名前を付ける必要があります。このように、すべての値は$_POSTを介して配列として返されます。

たとえば、$ _ POST ["question1"]は、チェックされた値を含む配列になりました。

編集 -

わかりました。質問ごとにチェックボックスが1つあることに気付いたので、これで問題が発生することはありません。

于 2010-09-30T15:09:45.830 に答える