1

私はPHPとMySQLの初心者です。ユーザーが壁にメッセージを投稿でき、ログインしているすべてのユーザーがそれを読むことができるメッセージボードを作成しようとしました。

誰かがメッセージを追加すると、テーブル author_id と date_added に書き込まれません。結果が表示されるときに必要です。

ここにnew.phpがあります

if(isset($_POST['formSubmit']))
{
    $errorMessage = "";

    if(empty($_POST['formTitle'])) 
    {
        $errorMessage .= "<li>Doesn't have title!</li>";
    }
    if(empty($_POST['formContent'])) 
    {
        $errorMessage .= "<li>The field for content is empty!</li>";
    }

    if(empty($errorMessage)) 
    {
        $db = mysql_connect("localhost","root","");
        if(!$db) die("Error connecting to MySQL database.");
        mysql_select_db("homework3" ,$db);

        $sql = "INSERT INTO massages (author_id, date_added, title, content) VALUES ('$_POST[author_id]', '$_POST[date_added]', '$_POST[formTitle]', '$_POST[formContent]')";
        mysql_query($sql);

        header("Location: index.php");
        exit();
    }
}

<form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
<div><label for='formTitle'>Title<input type="text" name="formTitle" value=""   style="width: 350px;"></label></div></br>

<div><label for='formContent'>Content</div><textarea name="formContent" style="width: 344px; height: 100px;"></textarea>

<input type="submit" class="formbutton" name="formSubmit" value="Send"/>

</form>

編集:これが必要かどうかはわかりませんが、これは私がメッセージを表示する方法です:

$sql = 'SELECT username, msg_id, title, content, date_added FROM massages as m, users  as u WHERE author_id = user_id ORDER BY m.date_added DESC';

  $result = mysqli_query($link, $sql);
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
    $real_date = date('d.m.Y', $row['date_added']);
    echo '<table>
   <tr>
   <td>' . $row['msg_id'] . '. ' . $row['title'] . '</td>
   </tr>
   <tr>
     <td>' . $row['content'] . '</td>
   </tr>
   <tr>
<td>By<span style="color: #CC0033;">' . $row['username'] . '</span> on   <span style="color: #CC0033;">' . $real_date . '</span></td></br>
</tr>
</table>';
}

}

4

4 に答える 4

2

オーサーログイン時author_id、セッションに保存します。

$author_id=$_SESSION['username'];

次に、データベースに保存します。

$sql = "INSERT INTO massages (author_id, date_added, title, content) VALUES ('$author_id', 'NOW()', '$_POST[formTitle]', '$_POST[formContent]')";

ノート

一番上でセッションを開始することを忘れないでください

<?php
    session_start();
    // then your all code
于 2013-10-04T08:15:24.127 に答える
1

非表示の属性、つまりtype = 'hidden'auther_idを使用できます

たとえば、フォームで

<form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
<div><label for='formTitle'>Title<input type="text" name="formTitle" value=""   style="width: 350px;"></label></div></br>

<div><label for='formContent'>Content</div><textarea name="formContent" style="width: 344px; height: 100px;"></textarea>

<input type="hidden" name="author_id" value="<?php echo $_SESSION['what_ever']; ?>"/>
<input type="submit" class="formbutton" name="formSubmit" value="Send"/>

</form>

注: あなたが<?php echo $_SESSION['what_ever']; ?>どのようになるかの単なる仮定ですauthor_id

date_addedの場合は、これをクエリに直接追加して、フォーム経由で投稿する必要はありません

$sql = "INSERT INTO massages (author_id, date_added, title, content) VALUES ('$_POST[author_id]', NOW(), '$_POST[formTitle]', '$_POST[formContent]')";

また、郵送による送信を避けauthor_id、この方法で追加する必要があります

$auther_id = $_SESSION['username'];
$sql = "INSERT INTO massages (author_id, date_added, title, content) VALUES ('$auther_id', NOW(), '$_POST[formTitle]', '$_POST[formContent]')";

重要

PHP は、mysql使用する必要のある関数を非推奨にしていますmysqli PHP で mysql_* 関数を使用してはいけないのはなぜですか?

于 2013-10-04T08:11:19.910 に答える
1

テーブルで author_id を自動インクリメントに変更します。INSERT クエリに追加する必要はありません。

以下の変更を試してください:

$date_added = date('Y-m-d');

$sql = "INSERT INTO massages (`date_added`, `title`, `content`) VALUES ( '$date_added', '$_POST[formTitle]', '$_POST[formContent]')";
mysql_query($sql);
于 2013-10-04T08:13:03.737 に答える