无法使用用户名将数据输入到评论框中

时间:2017-04-20 05:41:16

标签: php mysql

您好我相信我已做了相关更改,以便将我的代码发布到评论框中,但它似乎仍然没有发布任何内容。任何人都可以看到我在代码中留下的任何错误吗?

<form action="" method="post" >
<textarea rows="4" cols="50" name="comment">
Please type a comment if you are logged in....


</textarea>
<input type="submit" value="Submit">
</form>


<?php
if (isset($_SESSION['username']) && !empty($_SESSION['username'])) {
    $username = $_SESSION['username'];
    $sqlinsert = "INSERT INTO comment (username, comment, dCpuID) VALUES ('$username', '$comment', '1')";
if(mysqli_query($conn, $sqlinsert)){

      header("Location: i5-6600k");
} else {
    echo "ERROR: Could not able to execute $sqlinsert. " . mysqli_error($conn);
}
}

此文档的最顶部有一个会话开始,因此包含在内。整个代码都在PHP标记内。

if (isset($_SESSION['username']) && !empty($_SESSION['username'])) {

将此更改为login_user。现在似乎是某种数据库连接,但现在评论框上方显示错误,甚至没有提交任何评论: 错误:无法执行INSERT INTO注释(用户名,注释,dCpuID)值(&#39; dan&#39;,&#39;&#39;&#39; 1&#39;)。未知列&#39;用户名&#39;在&#39;字段列表&#39;

$sql  = "SELECT `users`.`username`, `comment`.`comment`, `comment`.`timestamp`\n"

    . "FROM `users`\n"

    . "LEFT JOIN `comment` ON `users`.`userID` = `comment`.`userID` \n"

    . "where dCpuID = 1";

$result = $conn->query($sql);

if ($result->num_rows > 0) {
     echo "<table><tr><th>Username</th><th>Comment</th><th>Timestamp</th>";
     // output data of each row
     while($row = $result->fetch_assoc()) {
         echo "<tr><td>" . $row["username"]. "</td><td>" . $row["comment"]."</td><td>"  . $row["timestamp"]. "</td>";
     }
     echo "</table>";
} else {
     echo "0 results";
}

上面的代码显示了我想要的评论框。

如果用户ID而不是用户名(因为它在表格中更有意义),则显示输入它将显示:

ERROR: Could not able to execute INSERT INTO comment (userID, comment, dCpuID) VALUES ('dan', '', '1'). Cannot add or update a child row: a foreign key constraint fails (`u803621131_login`.`comment`, CONSTRAINT `comment_ibfk_2` FOREIGN KEY (`userID`) REFERENCES `users` (`userID`))

通常修复意味着删除表格,这会以某种方式解决很多问题,但会导致更多问题,因为我必须重新填充它们。

2 个答案:

答案 0 :(得分:0)

首先,要获取存储到会话的数据,您需要在脚本顶部使用session_start()。您还必须在使用会话时随时使用session_start()。

在你的代码中,你有相反的事情。您正在尝试将非初始化变量分配给会话,而不是相反。我希望这样的事情:

session_start();
if (isset($_SESSION['username']) && !empty($_SESSION['username'])) {
    $username = $_SESSION['username'];
    $sqlinsert = "INSERT INTO comment (username, comment, dCpuID) VALUES ('$username', '$comment', '1')";
    // etc.
} else {
    // There was no username in session.
}

没有理由将会话变量存储到另一个变量,但我将其包含在内以说明您的错误。你有:

$_SESSION['username'] = $username;

奖励积分:你应该使用bind parameters而不是直接将值插入sql语句。使用参数绑定,您不必使用mysqli_real_escape_string来转义注释。

您的错误消息也搞砸了。而不是:

echo "ERROR: Could not able to execute $sql. " . mysqli_error($conn);

您应该包含您使用的实际变量名称:

echo "ERROR: Could not able to execute $sqlinsert . " . mysqli_error($conn);

答案 1 :(得分:0)

请注意,LEFT JOIN x.... WHERE x =...INNER JOIN x...

相同

如果要维护OUTER JOIN,可以按如下方式编写:

"
SELECT u.username
     , c.comment
     , c.timestamp
  FROM users u
  LEFT 
  JOIN comment c
    ON c.userID = u.userID
   AND c.dCpuID = 1;
";