无法获取数据输入到评论框中,使用用户名
问题描述:
你好,我相信我已经做了相关的修改,让我的代码发布到评论框中,但它似乎仍然没有发布任何内容。任何人都可以看到我在代码中留下的任何错误?无法获取数据输入到评论框中,使用用户名
<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)VALUES('dan', '','1')。 '字段列表'中的未知列'用户名'
$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`))
通常解决办法删除表,这在某种程度上修正了很多问题,但更多的原因是我必须重新填充它们。
答
首先,要获取存储到会话中的数据,您需要在脚本顶部的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);
答
注意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;
";
显示你试过的东西,以及它是如何消失的你错了。此网站用于回答特定问题,而不是编写代码。 – miken32
我假设一个用户已经登录,并且你已经在'$ _SESSION'中存储了一些东西来达到这个效果。 (a)_你在那里储存了什么? (b)如果用户已经登录,为什么要在每一行显示用户名?(c)你是否在SQL中为用户包含了一个过滤器? – Manngo
Apropos您的SQL语句:(a)如果名称正常并且行为良好,您不需要在表或列的名称周围备份;你只需要他们周围的尴尬的名字,如关键字,或名称与空格。 (b)PHP不要求你按照你的方式分隔多行字符串:如果你在字符串中间有一个新行,它将成为字符串的一部分;另一方面,JavaScript需要使用传统的字符串,但这不是JavaScript。 – Manngo