web-dev-qa-db-ja.com

PHP / MySQL:Webサイトにコメントセクションを作成する方法

「PHP/MySQLを使用してユーザーがWebページに影響を与える方法」を尋ねる代わりに、プロジェクトと例からよりよく学ぶため、これを尋ねます。

では、PHPとMySQLを使用して、非常に基本的なコメント機能をどのように組み込むのでしょうか?

5
Sam

これ以上の情報なしで答えるのは難しい質問です。既存のウェブサイトにコメントを実装することを検討する際に考慮すべきことがいくつかあります。

スパムの問題にどのように対処しますか?あなたのウェブサイトがどれほど離れているかは関係ありません、スパマーはそれを見つけて、彼らはすぐにそれを埋めます。 reCAPTCHA( http://recaptcha.net/ )のようなものを調べたいと思うかもしれません。

Webサイトの構造も、コメントの実装方法に影響を与える可能性があります。サイト全体、特定の製品やページ、または別のコメントに対するコメントはありますか?データベースで関係を適切に定義できるように、コンテンツとコメントの関係を知る必要があります。別の言い方をすれば、メールアドレス、コメント、承認されているかどうかが必要ですが、コメントがリンクされているものを特定する方法が必要です。

あなたのサイトがすでに確立され、PHPフレームワーク( CakePHP など)上に構築されている場合)あなたはあなたのコードをすでにあるものと適切に統合する方法に取り組む必要があります場所。

最後に、PHP用のリソースとチュートリアルがWeb上に多数あります。 「PHPブログチュートリアル」に沿ってグーグルで簡単に検索すると、数百も見つかると思います。大多数はコメントの実装方法を段階的に示します。

6
doomspork

コメントと呼ばれる新しいテーブルを作成します

割り当てられている投稿のIDを含む列が必要です。

そのテーブルに新しいコメントを追加するフォームを作成します。

例(テストされていないため、lilの構文エラーが含まれている可能性があります):コメント付きのページを投稿と呼びます

Post.php

<!-- Post content here -->

<!-- Then cmments below -->
<h1>Comments</h1>
<?php
$result = mysql_query("SELECT * FROM comments WHERE postid=0");
//0 should be the current post's id
while($row = mysql_fetch_object($result))
{
?>
<div class="comment">
By: <?php echo $row->author; //Or similar in your table ?>
<p>
<?php echo;$row->body; ?>
</p>
</div>
<?php
}
?>
<h1>Leave a comment:</h1>
<form action="insertcomment.php" method="post">
<!-- Here the shit they must fill out -->
<input type="hidden" name="postid" value="<?php //your posts id ?>" />
<input type="submit" />
</form>

insertcomment.php

<?php
//First check if everything is filled in
if(/*some statements*/)
{
//Do a mysql_real_escape_string() to all fields

//Then insert comment
mysql_query("INSERT INTO comments VALUES ($author,$postid,$body,$etc)");
}
else
{
die("Fill out everything please. Mkay.");
}
?>

コードを機能させるには、コードを少し変更する必要があります。私はあなたの宿題をしていません。その一部のみ;)

5
user142019

正規化は、コメント/ランク/投票システムの親友です。勉強しなさい。現在、多くのサイトがPDOに移行しています...それも学びましょう。

それを行う正しい方法、正しい方法、間違った方法はありません(よくあります)。基本的な概念を理解し、そこからそれらを取り入れることが必要です。学びたくない場合は、cakephpやzendフレームワークなどのフレームワーク、またはwordpressやjoomla)などの既製のシステムに投資してください。

コメントシステムの例が含まれているので、この本 wicked cool php scripts もお勧めします。

0
dassouki

これは私がコメントをする私の方法です(私はそれが安全だと思います):

<h1>Comment's:</h1>
<?php 
$i  = addslashes($_POST['a']);
$ip = addslashes($_POST['b']);
$a  = addslashes($_POST['c']);
$b  = addslashes($_POST['d']);
if(isset($i) & isset($ip) & isset($a) & isset($b))
{
    $r = mysql_query("SELECT COUNT(*) FROM $db.ban WHERE ip=$ip"); //Check if banned
    $r = mysql_fetch_array($r);
    if(!$r[0]) //Phew, not banned
    {
        if(mysql_query("INSERT INTO $db.com VALUES ($a, $b, $ip, $i)"))
        {
            ?>
            <script type="text/javascript">
                window.location="/index.php?id=".<?php echo $i; ?>;
            </script>
            <?php
        }
        else echo "Error, in mysql query";  
    }
    else echo "Error, You are banned.";
}
$x = mysql_query("SELECT * FROM $db.com WHERE i=$i");
while($r = mysql_fetch_object($x) echo '<div class="c">'.$r->a.'<p>'.$row->b.'</p> </div>';

?>  
<h1>Leave a comment, pl0x:</h1>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    <input type="hidden" name="a" value="<?php $echo $_GET['id']; ?>" />
    <input type="hidden" name="b" value="<?php $echo $_SERVER['REMOTE_ADDR']; ?>" />
    <input type="text" name="c" value="Name"/></br>
    <textarea name="d">
    </textarea>
    <input type="submit" />
</form>

これはすべてを1ページで行います(これはコメントセクションのみであり、いくつかの構成が必要です)

0
Gr33N

主キーとしてIDを使用して「コメント」テーブルを作成し、ユーザーが挿入したテキストをキャプチャするテキストフィールドを追加し、コメントテーブルを記事テーブル(外部キー)にリンクするための別のフィールドが必要です。さらに、コメントを入力したユーザーを保存するためのフィールドが必要です。このフィールドはユーザーの電子メールにすることができます。次に、GETまたはPOSTユーザーの電子メールとコメントを介してキャプチャし、すべてをDBに挿入します。

"INSERT INTO comment (comment, email, approved) VALUES ('$comment', '$email', '$approved')"

これが最初のヒントです。もちろん、コメント機能を追加するには少し時間がかかります。次に、管理者がコメントを承認できるようにするフォームと、記事の最後にコメントを公開する方法について考える必要があります。

0
rtacconi

私も今これに取り組んでいます。コメントの日時も追加する必要があります。これは、後で最新のもので並べ替えるときに必要になります。

これが私が使用しているdbフィールドのいくつかです。

id (auto incremented)
name
email
text
datetime
approved
0
vitalyp