我是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>';
}
}
答案 0 :(得分: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
答案 1 :(得分:1)
您可以使用隐藏属性,即
例如,在您的表单中 注意: 对于 date_added ,您可以直接在查询中添加此内容,无需通过表单发布 您还应避免通过帖子发送 重要强> PHP弃用了使用type = 'hidden'
<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
$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]')";
所需的mysql
函数
Why shouldn't I use mysql_* functions in PHP?
答案 2 :(得分: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);
答案 3 :(得分: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数据对象,例如http://www.php.net/manual/en/pdostatement.bindvalue.php