无法获取数据输入到评论框中,使用用户名

问题描述:

你好,我相信我已经做了相关的修改,让我的代码发布到评论框中,但它似乎仍然没有发布任何内容。任何人都可以看到我在代码中留下的任何错误?无法获取数据输入到评论框中,使用用户名

<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`)) 

通常解决办法删除表,这在某种程度上修正了很多问题,但更多的原因是我必须重新填充它们。

+1

显示你试过的东西,以及它是如何消失的你错了。此网站用于回答特定问题,而不是编写代码。 – miken32

+0

我假设一个用户已经登录,并且你已经在'$ _SESSION'中存储了一些东西来达到这个效果。 (a)_你在那里储存了什么? (b)如果用户已经登录,为什么要在每一行显示用户名?(c)你是否在SQL中为用户包含了一个过滤器? – Manngo

+1

Apropos您的SQL语句:(a)如果名称正常并且行为良好,您不需要在表或列的名称周围备份;你只需要他们周围的尴尬的名字,如关键字,或名称与空格。 (b)PHP不要求你按照你的方式分隔多行字符串:如果你在字符串中间有一个新行,它将成为字符串的一部分;另一方面,JavaScript需要使用传统的字符串,但这不是JavaScript。 – Manngo

首先,要获取存储到会话中的数据,您需要在脚本顶部的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); 
+0

有一个会议开始在顶部,只是没有包括在这一点,我会给那个其他尝试一下,让你知道,谢谢:) – danw20

+0

我有2个不同的查询在同一个pagew,一个是评论显示,另一个indert功能,似乎并没有工作,是在争议?他们都有不同的查询变量,一个是sqlinsert,另一个是sql。 – danw20

+0

如果您没有提供实际的代码和实际的诊断信息,则无法帮助您进行调试。我在你的代码中指出了几个明显的错误。如果你有更多的错误,我不能从你没有提供的代码中诊断它们。 – gview

注意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; 
";