我有这个表格
<form method="post" action="new_announcement.php">
<fieldset>
<legend>Create New Announcement</legend>
Subject :<input type="text" style="float-offset: !important;" name="subject" required="required" /><br>
Content :<br />
<textarea rows="10" cols="60" name="content"></textarea> </br></br>
<input type="submit" value="Upload"/>
</fieldset>
</form>
我希望将表单中的数据存储到数据库中的表中。
我的 INSERT INTO 代码就是这个......
<?php
include_once 'header.php';
$username = $_SESSION["username"];
if(isset($_POST['username']))
{
$subject = $_POST['subject'];
$content = $_POST['content'];
$sqlinsert = "INSERT INTO announcements (author,subject,content) VALUES ('$username','$subject','$content')";
}
?>
我做错了什么,并没有将数据存储在我的数据库中。 我的数据库表如下......
CREATE TABLE announcements
(
id INT UNSIGNED AUTO_INCREMENT,
author varchar(200),
subject varchar(200),
content varchar(3000),
timestamp int(11) unsigned not null,
PRIMARY KEY (id,author)
) ENGINE=MyISAM;
答案 0 :(得分:2)
问题1.您的表单没有名为“username”的输入。因此,if(isset($_POST['username']))
永远不会匹配。如果您希望表单中有用户名,则需要输入一个用户名。如果会话设置正确(听起来像是这样),请使用它。问题2.查询中未使用连接(如所述问题)。这是更新的navjot答案。
<?php
include_once 'header.php';
$username = mysql_real_escape_string($_SESSION["username"]);
if(!empty($_POST)){
if(isset($username)) {
$subject = mysql_real_escape_string($_POST['subject']);
$content = mysql_real_escape_string($_POST['content']);
$sqlinsert = "INSERT INTO announcements (author,subject,content) VALUES ('$username','$subject','$content')";
$execute = mysql_query($sqlinsert) or die(mysql_error());
}
}
?>
问题3.这是SQL injectible,永远不信任用户输入。问题4. mysql函数已经过时,你应该切换到mysqli或pdo。
虽然这些主题还有很多其他主题。
如果您在将username
存储到会话时对其进行清理,而该会话可能没有真正的转义。
答案 1 :(得分:1)
您需要执行查询。试试这个
<?php
include_once 'header.php';
$username = $_SESSION["username"];
if(isset($_POST['username']))
{
$subject = $_POST['subject'];
$content = $_POST['content'];
$sqlinsert = "INSERT INTO announcements (author,subject,content) VALUES ('$username','$subject','$content')";
$execute = mysql_query($sqlinsert) or die(mysql_error());
}
?>