需要一些PHP和MySQL的帮助我找不到我错了..
尝试使用函数调用添加新的博客文章。我知道所有其他代码都是正确的,因为如果我手动将条目添加到数据库sql中,它会显示在博客上。在向数据库sql添加新条目时,它永远不会添加到数据库中..任何人都注意到有什么问题吗?
我有发布时间和日期的功能,它们都有效。如果我能弄清楚这部分,我也可以修复标签。如果有人想在txt文件中看到,请告诉我很难将直接代码发布到此处...
function eb_admin_newarticle()
{
global $lang;
$output="\t\t".ucwords($lang['new_article'])."\r\n";;
//To add new article post
if(!empty($_POST['text']))
{
foreach($_POST as $key=>$value)
$_POST[$key]=str_replace("Acirc;","",$value);
$sql="INSERT INTO eb_articles SET article_flag=".$_POST['sticky'].",article_date=\"".time()."\",author_id=\"".$_SESSION['user_id-'.$_SERVER['SERVER_NAME']]."\", article_title=\"".str_replace("\"",""",$_POST['title'])."\",article_body=\"".$_POST['text']."\",article_comments=".$_POST['comments'];
mysql_query($sql);
$article_id=mysql_insert_id();
//input tags on article
if(strlen($_POST['tags'])>1) {
$tags=explode(",",$_POST['tags']);
foreach($tags as $tag) {
$sql="INSERT INTO eb_tags SET tag_name=\"".$tag."\"";
mysql_query($sql);
if(mysql_affected_rows()==1)
$tag_ids[]=mysql_insert_id();
else
$tag_ids[]=mysql_result(mysql_query("SELECT tag_id FROM eb_tags WHERE tag_name=\"".$tag."\""),0);
}
foreach($tag_ids as $tag_id)
mysql_query("INSERT INTO eb_tags_links SET tag_id=".$tag_id.",article_id=".$article_id);
}
header('Location: news.php?id='.$article_id);
}
else {
$output.="\t\t<form action=\"admin.php?id=newarticle\" method=\"post\">\r\n";
$output.="\t\t\t<p><b>".ucwords($lang['title'])."</b><br /><input class=\"inputtext\" type=\"text\" name=\"title\" /></p>\r\n";
$output.="\t\t\t<textarea id=\"text\" name=\"text\"></textarea>\r\n";
$output.="\t\t\t<p><b>".ucwords($lang['tags'])."</b><br />".$lang['tag_seperate']."<br /><input type=\"text\" class=\"inputtext\" name=\"tags\" /></p>\r\n";
$output.="\t\t\t<p><b>".ucwords($lang['sticky'])."</b><br /><input type=\"radio\" name=\"sticky\" value=\"1\" checked=\"checked\" /> ".ucwords($lang['no'])."<br /><input type=\"radio\" name=\"sticky\" value=\"2\" /> ".ucwords($lang['yes'])."</p>\r\n";
$output.="\t\t\t<p><b>".ucwords($lang['comments'])."</b><br /><input type=\"radio\" name=\"comments\" value=\"0\" /> ".ucwords($lang['no'])."<br /><input type=\"radio\" name=\"comments\" value=\"1\" checked=\"checked\" /> ".ucwords($lang['yes'])."</p>\r\n";
$output.="\t\t\t<p><input type=\"submit\" name=\"submit\" value=\"".ucwords($lang['save'])."\" /></p>\r\n";
$output.="\t\t</form>\r\n";
return $output;
}
}
答案 0 :(得分:2)
首先要做的事情
exit;
。 header
时,该页面仍将继续执行。此外,它只是对浏览器的建议。恶意用户无论如何都可以让他的浏览器忽略标题并加载页面。mysql_insert_id()
中。无需查询数据库
如果要向数据库添加10篇文章,则需要进行10次查询。这完全没必要。请参阅MySQL手册,了解如何使用一个查询执行此操作。mysql_*
! mysqli
或PDO的教程,不要转发2008年的文章! 关于实际问题,请亲自尝试一些调试。您没有检查您的查询是否成功。执行查询时,mysql_query()
会在失败时返回资源或FALSE
。检查是否发生这种情况,以便找出错误发生的确切位置。
可能导致这种情况的一件事是你缺乏封装。例如,您需要替换
$sql="INSERT INTO eb_articles SET article_flag=".$_POST['sticky'].", ...
与
$sql="INSERT INTO eb_articles SET article_flag='".$_POST['sticky']."', ...
这适用于所有地方,始终使用'
封装内容。这应该解决手头的问题,但你的应用仍然非常脆弱。