PHP评论系统已经崩溃了

时间:2012-02-17 22:10:50

标签: php mysql html system comments

我的语法有问题。我不知道如何完成以下内容。我已经构建了一个成员系统,允许观众注册,登录和查看我的网站。我想建立一个评论系统,以便人们可以评论一些东西。我已经构建了一个测试评论系统,它似乎运行正常,没有用户信息。但是,如果我尝试构建一个页面,就像我的用户系统的其他页面一样,并包含我的评论系统,它会因语法错误而崩溃。我不是说不会共存,它们是,但是与其他东西发生冲突并且发表评论不包括从mysql数据库中检索的用户信息,我无法定义用户可以编辑他/的位置她的帖子或删除他们的帖子而不修改其他帖子,管理员应该能够做到这一切。我不知道出了什么问题或如何解决它。我准备以你的方式发送信息,但我不知道你可能需要什么,所以如果你要求,我会发布你需要的任何信息。

<?php
error_reporting (E_ALL ^ E_NOTICE);
session_start();
$userid = $_SESSION['userid'];
$username = $_SESSION['username'];
$person = $_SESSION['person'];
$rank = $_SESSION['rank'];
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Guestbook 2 | Harley's Digital Portfolio</title>
</head>

<body>
<?php
//connect to member database and retrieve user information
require("./connect2.php");
$query = mysql_query("SELECT * FROM users WHERE username='$username' ");
$numrows = mysql_num_rows($query);
if ($numrows == 1){
    $row = mysql_fetch_assoc($query);
    $username = $row['username'];
    $fullname = $row['fullname'];
    $fullname = $row['fullname'];
    $fullname = $row['fullname'];
    $rank = $row['rank'];

    if (!$fullname){
        $person = $username;
        $_SESSION['person'] = $person;
    }
    else
        $person = $fullname;
        $_SESSION['person'] = $person;
}

mysql_close();
?>
<?php
//Connect to the database
require("./connect.php");

//Page Header
echo "<h2>Guestbook | Harley's Digital Portfolio</h2> Welcome $person, you are ranked as: $rank. <a href='./postguestbook.php'>Post Comment</a> <br/>";
$query = mysql_query("SELECT * FROM guestbook ORDER BY id DESC");
$numrows = mysql_num_rows($query);

if($numrows > 0){
    while ($row = mysql_fetch_assoc($query)){
        $dbid = $row['id'];
        $dbname = $row['name'];
        $dbemail = $row['email'];
        $dbmessage = $row['message'];
        $dbtime = $row['time'];
        $dbdate = $row['date'];
        $dbip = $row['ip'];

        $id = $dbid;
        $name = $dbname;
        $message = $dbmessage;
        $time = $dbtime;
        $date = $dbdate;
        $message = nl2br($message);

        $form = "<form action='./guestbook2.php' method='post'><div>
        By $id <b>$name</b> at <b>$time</b> on <b>$date</b> $removebutton <br/>
        $message
        </div> <hr/></form>";
        echo "$form";

    }
}
else
    echo "No posts found.";

    $removebutton = "<input type='submit' name='removebtn' value='X'/>";
    if ($_POST['removebtn']){
        mysql_query("SELECT * FROM guestbook WHERE id='$id'");
        mysql_query("DELETE FROM guestbook WHERE id='$id'");
        echo "Message Removed.";
    }


//Disconnect from database
mysql_close();
?>
</body>
</html>

以上是我的guestbook2.php,下面是postguestbook.php:

<?php
error_reporting (E_ALL ^ E_NOTICE);
session_start();
$userid = $_SESSION['userid'];
$username = $_SESSION['username'];
$person = $_SESSION['person'];
$rank = $_SESSION['rank'];
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Post to Guestbook | Harley's Digital Portfolio</title>

</head>

<body>
<?php
//connect to member database and retrieve user information
require("./connect2.php");
$query = mysql_query("SELECT * FROM users WHERE username='$username' ");
$numrows = mysql_num_rows($query);
if ($numrows == 1){
    $row = mysql_fetch_assoc($query);
    $username = $row['username'];
    $rank = $row['rank'];

    if (!$fullname){
        $person = $username;
        $_SESSION['person'] = $person;
    }
    else
        $person = $fullname;
        $_SESSION['person'] = $person;
}

mysql_close();
?>
<?php
//Connect to the database
require("./connect.php");

//Page Header
echo "<h2>Post to Guestbook | Harley's Digital Portfolio</h2>";

if ($_POST['postbtn']){
    $name = strip_tags($_POST['name']);
    $email = strip_tags($_POST['email']);
    $message = strip_tags($_POST['message']);

    if ($name && $email && $message){
        if ( (strlen($email) >= 7) && (strstr($email, "@")) && (strstr($email, "."))){
            // add to the database
            $time = date("h:i A");
            $date = date("F d, Y");
            $ip = $_SERVER['REMOTE_ADDR'];

            mysql_query("INSERT INTO guestbook VALUES ('', '$name', '$email', '$message', '$time', '$date', '$ip')");
            echo "You message was posted successfully, <a href='./guestbook2.php'>Go back to Comments</a>";
        }
        else
            echo "You did not enter a valid email address.";
    }
    else
        echo "You did not enter all the required info.";
}

echo    "<form name='postmessage' action='./postguestbook.php' method='post'>
<table>
<tr>
    <td>Name:</td>
    <td><input type='text' name='name' style='width: 200px;'/></td>
</tr>
<tr>
    <td>Email</td>
    <td><input type='text' name='email' style='width: 200px;'/></td>
</tr>
<tr>
    <td>Message:</td>
    <td><textarea  name='message' style='width: 200px; height: 200px;'></textarea></td>
</tr>
<tr>
    <td></td>
    <td><input type='submit' name='postbtn' value='Post'/></td>
</tr>
</table>
</form>";

//Disconnect from database
mysql_close();
?>
</body>
</html>

没有错误,它只是不会显示..它在我尝试实现我的用户系统之前单独工作,现在我无法将它带到用户可以编辑或删除他的帖子的地方,管理员可以做这一切。

感谢您查看此帖并回答。
哈利

2 个答案:

答案 0 :(得分:0)

不确定您的问题究竟是因为您的描述有点模糊。以下是一些观察结果:

guestbook2.php -

$ removebutton永远不会被定义。这是什么?

echo "$form";是不必要的。如果你必须在php中回显html,只需echo $form;。在你的情况下,因为你运行所有的PHP内联你应该打破PHP?&gt;并将正常的html放在条件中。它以这种方式更具可读性,你不必逃避斜杠。

if ($_POST['removebtn']){
    mysql_query("SELECT * FROM guestbook WHERE id='$id'");
    mysql_query("DELETE FROM guestbook WHERE id='$id'");
    echo "Message Removed.";
}

这没有意义。您正在查询留言簿,对结果不执行任何操作,然后删除?为什么不删除?在任何情况下,您都不会检查$ id是否被定义,除非$ numrows大于零,否则它不是这种情况。仅这一点可能会导致问题,因为你应该至少引用$ _POST ['id'],所以你不能只是最后一个$ id的实例。

您也不应该使用盲目接受的会话变量运行查询。查看mysql_real_escape_string()以帮助防止信任$ _SESSION变量,获取帖子或用户可以欺骗的任何其他人的可怕安全漏洞。

同样,我不知道你的整个问题是什么原因我自己看不到错误,我不知道你从代码中得到什么,所以这些只是指针,至少可能是部分问题。

答案 1 :(得分:0)

我首先要感谢所有发布了有用的答案或评论的人,但我修正了我的错误。以下是发生的事情:

在将我的成员系统实现到一个仅使用名称变量而不是用户变量的已构建的注释系统之后,它不会从数据库中检索用户信息。这是错误的第一,看到你输入你的名字和电子邮件和消息然后它会发布。好,易于。现在,当我将name变量更改为username变量时,MYSQL数据库没有使用正确的用户名信息进行更新,这些信息应该在您第一次进入评论页面时收集,因此输入if username和userid函数。

错误号码试图将所有内容都包含在一个屋檐下()。这不是很好,因为while循环是干扰。我所做的是从成员系统内容开始重写整个页面,然后构建它将其分成多个标签。这修复了我没有看到的检索错误,因为没有什么可以检索。一旦完成,然后我创建了一个名为delete.php的单独页面,它将连接到数据库,当你按下删除按钮时,它将打开$ removelink =“Remove”;变量。 delete.php里面是

<?php
require("./connect2.php");
$removeid = $_GET['id'];
mysql_query("DELETE FROM comments WHERE id='$removeid'");
header("location: comments.php");
?>

然后将从数据库中删除帖子并返回主页面。一切正常,一切都很好。我已经修复了所有页面,如果有人想知道我是怎么做的,请不要犹豫,给我发电子邮件。我很乐意帮忙。