您好我相信我已做了相关更改,以便将我的代码发布到评论框中,但它似乎仍然没有发布任何内容。任何人都可以看到我在代码中留下的任何错误吗?
<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`))
通常修复意味着删除表格,这会以某种方式解决很多问题,但会导致更多问题,因为我必须重新填充它们。
答案 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;
";