0

シンプルなゲストブックを作成する学校のプロジェクトを行っています。(初心者です) 2 つの ID を関連付ける方法に行き詰まっています。投稿を保存するためのゲストブックと、登録されたメンバーを保存するためのメンバーと呼ばれる2つの異なるデータベーステーブルがあります。

ここで必要なのは、PostID を UserID に関連付けて、誰がどの投稿を書いたかを確認できるようにすることです。現在、メンバーがログオンすると、すべての投稿がそのユーザーによって書かれたと表示され、別のユーザーでログオンすると、そのユーザーがすべての投稿を書いたと表示されます。

これは、ゲストブックを含む home.php ファイルのコードです。必要に応じて投稿できる guestbookuservalidation ファイルもありますか?

    <?php
session_start();
$username = $_SESSION['username'];
if($_SESSION['login'] == 1)     //om sessionen är 1 så

{
echo "<h1>Välkommen till gästboken $username</h1>";




 // Connect to the database
 mysql_connect("localhost", "root", "");
 mysql_select_db("guestbookdatabase");

//******************************************************************//
//Form and add stuff

echo "<h2>Posta till Gästboken</h2>
<form action='home.php' method='post'>
<table>
<tr>
<td>Titel:</td>
<td><input type='text' name='titel' style='width: 300px;'</td>
</tr>
<tr>
<td>Inlägg:</td>
<td><textarea name='inlägg' style='width: 300px; height: 100px;'></textarea></td>
</tr>
<tr>
<td></td>
<td><input type='submit' name='postknapp' value='Posta'</td>
</tr>
</table>
</form>";





//******************************************************************//
//Display stuff
echo "<h2>Nuvarande Poster</h2>";

if ($_POST['postknapp']) {

$title = strip_tags($_POST['titel']);
$message = strip_tags($_POST['inlägg']);

if ($title && $message) {

    //Lägg till i databasen
    mysql_query("INSERT INTO guestbook (Title,Post) VALUES ('$title','$message')");

    echo "Ditt inlägg har lagts till i gästboken!"; 

}
else

echo "Du har inte fyllt i nödvändig information för att kunna göra ett inlägg.";

}

$query = mysql_query("SELECT * FROM guestbook ORDER BY PostID DESC");
$sql = mysql_query("SELECT * FROM members WHERE Username = $username");
$numrows = mysql_num_rows($query);
if ($numrows > 0){

while ( $row = mysql_fetch_assoc($query) ) {
    $id = $row['PostID'];
    $name = $sql;
    $title = $row['Title'];
    $message = $row['Post'];
    $date = $row['Timestamp'];

    $message = nl2br($message);

    echo "<div> 
    Av <b>$name</b> vid <b>$date</b><br /> 
    <h2>$title</h2> <p>
    $message
    </div> <hr />";

}

}
else
echo "Inga inlägg hittades.";




//*****************************************************************//

mysql_close();



?>

<a href="logga_ut.php">Logga ut</a>





<?php

}
else // om session inte är 1 så 
{
echo "Du har INTE tillåtelse till gästboken! Klicka på länken för att logga in!";
?>
<p>
<br/><a href="index.html">Till login >></a>
<?php   
}

?> 
4

3 に答える 3

1

いくつかのポイント。学校のプロジェクトでこれを行う場合、mysql_*関数は絶対に使用しません。これらは非推奨であり、私が評価していた場合、それらを使用すると自動的に失敗します. mysqli_*対応するものと使用方法が似ている関数を見ることをお勧めしますmysql_*

第二に、SQL インジェクションから保護するために何もしていません。繰り返しますが、私があなたを評価していたとしても、あなたはデータベースを危険にさらしただけなので、私はあなたを落胆させるでしょう.

最後に、クエリで JOIN 条件を使用します。私はあなたのテーブル構造について十分に知らないので、この例を調整する必要があるかもしれません:

SELECT *
FROM guestbook
INNER JOIN members ON members.MemberID = guestbook.MemberID <-- use whatever your member id fileds are in the two tables here
WHERE members.Username = ?
ORDER BY guestbook.PostID DESC
于 2013-02-06T19:36:39.863 に答える
1

確実に

  • 追加するメッセージを生成するクエリでWHERE id = '$userid' 、そのユーザーに対してのみメッセージが生成されるようにします。

    • またはにMYSQL変更するのが初めての場合は検討してください。PDOMYSQLI
于 2013-02-06T19:36:54.830 に答える
1

データベースでは、Membersテーブルに次の 2 つの列が必要です。

  1. ID
  2. 名前 (必要に応じて、姓と名の 2 つの列に分割できます)

次に、Messages表には次のものが必要です。

  1. ID
  2. メンバーID
  3. メッセージ

メンバーがメッセージを投稿すると、このメンバーの ID をメッセージと共に Messages テーブルに保存する必要があります。

その後、memberId でメッセージを簡単にフィルタリングできます。クエリは次のようになります。

SELECT Members.name, Messages.message FROM Members JOIN Messages WHERE Messages.memberId = Member.id ORDER BY PostID DESC

于 2013-02-06T19:34:04.533 に答える