【问题标题】:PHP Commenting System Has Fallen ApartPHP 评论系统已经分崩离析
【发布时间】:2012-02-17 22:10:49
【问题描述】:

我的语法有问题。我不知道如何完成以下内容。我已经建立了一个会员系统,允许观众注册和登录并查看我的网站。我想做一个评论系统,这样人们就可以评论东西了。我已经建立了一个测试评论系统,它似乎在没有用户信息的情况下运行良好。但是,如果我尝试为我的用户系统构建一个与其他页面一样的页面并包含我的评论系统,它会因为语法错误而崩溃。我并不是说它们不会共存,但是它们与其他东西冲突,并且发表评论不包括从 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>

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

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

【问题讨论】:

  • 你能分享你的问题中的任何代码吗?
  • 你能提供一些代码,以便有人能发现你的语法错误吗?
  • 复制您收到的错误并将它们粘贴到此处。还包括错误中提到的代码行(和周围的行)(它将在错误消息中给出行号)。
  • 注意你说的是有语法错误,没有错误。它是哪一个?如果语法错误,具体的错误是什么?
  • 没有实际的语法错误帖子,但在我的编码行中,我搞砸了,外面看起来不错,但奥利奥饼干填充不见了。

标签: php mysql html system comments


【解决方案1】:

不确定您的问题究竟是因为您的描述有点晦涩难懂。不过,这里有一些观察:

guestbook2.php -

$removebutton 从未定义。这是什么?

echo "$form"; 是不必要的。如果您必须在 php 中回显 html,只需 echo $form;。在您的情况下,由于您正在运行所有 php inline,您应该跳出 php ?> 并将普通 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 变量、获取帖子或用户可以欺骗的任何其他内容时出现可怕的安全漏洞。

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

【讨论】:

    【解决方案2】:

    首先,我要感谢所有发布有帮助的答案或评论的人,但我修正了我的错误。这是发生了什么:

    在我将成员系统实现到仅使用名称变量而不是用户变量的已构建评论系统中后,它不会从数据库中检索用户信息。那是第一个错误,看到你输入你的名字、电子邮件和消息,然后它就会发布。好,易于。现在,当我将 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");
    ?>
    

    这将从数据库中删除帖子并返回主页。一切正常,一切正常。我已经修复了所有页面,如果有人想知道我是如何做到的,请随时给我发电子邮件。我很乐意提供帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-05
      • 2010-09-13
      • 2011-10-24
      • 1970-01-01
      • 1970-01-01
      • 2014-02-26
      • 2016-07-31
      • 2016-05-02
      相关资源
      最近更新 更多