2013-10-04 29 views
1

我是PHP和MySQL中的新手。我試圖製作留言板,用戶可以在牆上發佈一些消息,每個登錄的用戶都可以閱讀。如何將日期和user_id插入到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>'; 
} 

}

+5

[請不要使用mysql_ *函數](在新代碼中使用mysql_ *函數)(http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php)。他們不再被維護,並[正式棄用](https://wiki.php.net/rfc/mysql_deprecation)。請改爲了解準備好的語句,並使用[pdo](https://wiki.php.net/rfc/mysql_deprecation)或[mysqli](http://stackoverflow.com/questions/tagged/mysqli)。 – zessx

+0

感謝您的留言。 – Goro

+0

@Goro在會話中保存了author_id嗎? – zzlalani

回答

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 Why shouldn't I use mysql_* functions in PHP?

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); 
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 
+0

我不確定,但是你的''NOW()'工作在引號之下嗎? – zzlalani

+0

@zzlalani是的,它會工作,它會返回'YYYY-MM-DD h:i:s'格式的數據和時間 –

+0

因爲當我用引號'''NOW()'''試過時它說'Warning:# 1264行1'列'date'的範圍值超出範圍,並在該行中添加了'0000-00-00 00:00:00'。 – zzlalani

0

正如在評論中提到啓動會話,你應該避免使用mysql_*命令,但問題是用以下行:

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

爲了在字符串中嵌入數組變量,你必須用大括號包圍它,例如。

"{$_POST['author_id']}" 

,但你不應該這樣做你的榜樣,因爲這將讓你大開到MySQL注入攻擊。處理這個問題的舊方法是使用mysql_escape_string()來轉義每個已發佈變量,但處理此問題的更好方法是使用PDO Data對象,例如http://www.php.net/manual/en/pdostatement.bindvalue.php