PHP字符串变量限制

时间:2017-09-01 14:03:42

标签: php html mysql string var

我有一个html调查,答案存储在应该通过PHP加载到数据库中的变量中。

例如,这就是你可以在HTML中填写的问题(表格的一部分):

 <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);
  }'

所以textarea名称=&#34; tag1&#34; ...在html中将用户的答案加载到PHP的名为tag1的数据库列中。

问题是我无法在PHP INSERT代码中添加太多项目(如tag1,tag2,tag3 ......),因为字符是有限的。

由于我应该包括的问题数量,这是一个问题。如果我创建两个单独的命令,它会加载到数据库中的两个不同的行,这看起来很混乱。一个人的答案应该出现在一行中。 (在phpmyadmin中)

我该如何解决?我应该改变什么?

3 个答案:

答案 0 :(得分:3)

对于初学者来说,这不是制作数据库的好方法,因为如果添加问题,您将不得不更新数据库结构。

无论如何,您应该为用户提供ID,以便您可以跟踪来自哪个用户的答案。之后,您可以将ID添加到survey表中,如果用户回答了其他问题,您只需更新答案即可。

UPDATE survey SET `tag2`='answer' WHERE `user_id` = 0;

答案 1 :(得分:0)

杰罗德夫的回答基本上是正确的。但是,配方略显不完整。

由于查询似乎有长度限制,因此您必须将其拆分为多个查询(除了增加限制之外,实际上并非如此)。

您的表必须具有某种唯一ID(例如主键),必须由第一个查询设置 - INSERT - 可能通过auto_increment列设置,或者从中复制适当的ID在其他地方。

如果是auto_increment列,则按mysqli_insert_id获取插入行的id,否则,您应该已经拥有它。所有其他查询必须是UPDATE查询,它使用绑定id的WHERE子句。

-- first query
INSERT INTO survey (id, tag1, tag2) VALUES (42, 'tag1', 'tag2');
-- other queries
UPDATE survey SET tag3='tag3', tag4='tag4' WHERE id=42
php中的

YOU ABSOLUTELY DO WANT TO PREPARE QUERIES! ):

$stmt = mysqli_prepare($conn, 'INSERT INTO survey (id, tag1, tag2) VALUES (?,?,?)');
$stmt->bind_param('iss', $id, $tag1, $tag2);
$stmt->execute();
$stmt2 = mysqli_prepare($conn, 'UPDATE survey SET tag3=?, tag4=? WHERE id=?');
$stmt2->bind_param('ssi', $tag3, $tag4, $id);

使用auto_increment primary_key列:

$stmt = mysqli_prepare($conn, 'INSERT INTO survey (tag1, tag2) VALUES (?,?)'); // ! 
$stmt->bind_param('ss', $tag1, $tag2); // ! <-- no id anymore
$stmt->execute();
$id = $stmt->insert_id; // <--- this is new
$stmt2 = mysqli_prepare($conn, 'UPDATE survey SET tag3=?, tag4=? WHERE id=?');
$stmt2->bind_param('ssi', $tag3, $tag4, $id);

答案 2 :(得分:0)

您需要两个表格,一个用于调查,另一个用于答案,并将调查表与答案相关联。

1数据库结构

调查表

  • ID

  • 调查名称

  • 日期

    答案表

  • ID
  • survey_id
  • 问题
  • 答案
  • 日期

    <强> HTML

    <table>
         <td style="padding-top: 10px;" colspan="9"  name="question[]" value ="Question1"> Question1: 
                <p style="text-align:left;"><textarea name="tag[]" cols="80" rows="6" 
        style="border: 1px solid #D0D0D0;"></textarea></p>
                </td>
    
    
    <td style="padding-top: 10px;" colspan="9" name="question[]" value ="Question12"> Question2: 
                <p style="text-align:left;"><textarea name="tag[]" 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());
}
    // assuming the survey id = 10
      survey_id = 10;
     date = date("Y-m-d");
     $question = mysqli_real_escape_string($_POST["question"]);
     $answers = mysqli_real_escape_string($_POST["tag"]);


    foreach(answers as $key => $val){
      $question[$key];
      $answers[$key];

     $sql = "INSERT INTO Answers (survey_id, question, answer, date)
     VALUES ('$survey_id ','$question','$answers','$date')";
    }
     if (mysqli_query($conn, $sql)) {
        echo "";
      } else {
        echo "Error: " . $sql . "<br>" . mysqli_error($conn);
      }

并根据调查回答答案

 $sql = "SELECT * FROM ANSWERS WHERE survey_id = 10 ORDER BY id ASC"
  mysqli_query($conn, $sql)

它将为您检索所有答案

请这是专业的方式。 希望它有所帮助

尝试给我你的反馈。