私はhtmlサーベイをしており、答えはPHPを介してデータベースにロードされる変数に格納されています。PHP文字列可変制限
<td style="padding-top: 10px;" colspan="9"> Question1:
<p style="text-align:left;"><textarea name="tag1" cols="80" rows="6"
style="border: 1px solid #D0D0D0;"></textarea></p>
</td>
<td style="padding-top: 10px;" colspan="9"> Question2:
<p style="text-align:left;"><textarea name="tag2" cols="80" rows="6"
style="border: 1px solid #D0D0D0;"></textarea></p>
</td>'
PHPコード:
$conn = mysqli_connect($servername, $username, $password, $dbname);
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
$tag1 = $_POST["tag1"];
$tag2 = $_POST["tag2"];
$sql = "INSERT INTO survey (tag1, tag2)
VALUES ('$tag1','$tag2')";
if (mysqli_query($conn, $sql)) {
echo "";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}'
例えば、これは、HTMLのようなルックスを埋めることができる方法の質問(テーブルの一部)でありますしたがって、htmlのtextarea name = "tag1" ...は、PHPのtag1というデータベース列にユーザーの回答を読み込みます。
PHP INSERTコード(tag1、tag2、tag3 ...など)の括弧には、文字数に制限があるため、あまりにも多くの項目を追加できないという問題があります。
私は含めるべき質問の数に問題があります。そして、2つの別々のコマンドを作成すると、データベース内の2つの異なる行にロードされ、混乱します。 1人の回答が1つの行に表示されます。 (phpmyadmin)
どうすれば解決できますか?私は何を変えるべきですか?
[Little Bobby](http://bobby-tables.com/)によると*** [あなたのスクリプトはSQLインジェクション攻撃の危険にさらされています。](http://stackoverflow.com/questions/60174/how- php)*** MySQLi(http://php.net)の[prepared](http://en.wikipedia.org/wiki/Prepared_statement)のステートメントについて学びます。 /manual/ja/mysqli.quickstart.prepared-statements.php)。 [文字列をエスケープする](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)でも安全ではありません! –
通常、テーブルを正規化する必要があります。ユーザー(ユーザー保持)テーブルに質問(質問保持)テーブルと接続テーブルuser_question(ユーザーの質問を保持) –
Little Bobbyはこのような質問については言及しませんでした。コミュニティから有益な提案をしたい場合は、テーブルを作成するために使用されるSQLステートメントも含めてください。それができなければ、人々は目隠しをしたダーツを撃ちます。 – YvesLeBorg