我在php中有一个表单只在用户登录时显示,这意味着只有登录的用户才能在我的网站上创建一个新的博客文章,表单如下所示:
<?php
if(isset($_SESSION['username'])){ ?>
<section class="post">
<h3>Make a new post:</h3>
<p> Before posting anything, make sure you have read the <a id="pagelink" href="rules.html"> rules </a>
<form action="../php/post_up.php" id="newpost" method="POST">
<table id="post">
<tr>
<td> Title: </td>
<td id="post_cell"> <input type="text" name="post_title"/> </td>
</tr>
<tr>
<td> Content: </td>
<td id="post_cell"> <textarea name="post_content" form="newpost" rows="10" cols="50"></textarea> </td>
</tr>
<tr>
<td>
<input type="submit" name="submit_post" value="Submit">
</td>
<tr>
</table>
</form>
</section>
<?php
}
require("../php/load_up.php");
?>
在此之后,代码被发送到这个PHP脚本:
<?php
session_start();
require_once("../php/db.php");
if(!isset($_SESSION['userid'])){
header("Location: ../blog/userpost.php");
die();
}
if(isset($_POST['submit_post'])){
if(isset($_POST['post_title']) && isset($POST['post_content'])){
if(!$_POST['post_title'] == "" && !$_POST['post_content'] == ""){
$userid = $_SESSION['userid'];
$title = strip_tags($_POST['post_title']);
$content = strip_tags($_POST['post_content']);
$title = stripslashes($title);
$content = stripslashes($content);
$title = mysqli_real_escape_string($title);
$content = mysqli_real_escape_string($content);
$sql_store_post = "INSERT INTO userpost (title,content,userid) VALUES ('$title','$content','$userid')";
mysqli_query($db, $sql_store_post);
header("Location: ../blog/userpost.php");
die();
} else {
echo("The posts are empty");
}
} else {
echo("The posts are not set");
}
}
elseif(isset($_POST['submit_comment'])){
}
else {
echo("Seems like submit has not been set?");
//header("Location: ../blog/userpost.php");
}
&GT;
奇怪的是isset($_POST['submit_post'])
返回true,但是后面的两个帖子都返回false,导致我的代码出错。
PS:require("../php/load_up.php");
仅用于显示已发布的帖子,在发布数据的过程中并不重要。
答案 0 :(得分:1)
一个简单的拼写错误,
isset($POST['post_content'])){
要,
isset($_POST['post_content'])){
答案 1 :(得分:1)
除了$POST['post_content']
$_POST['post_content']
的拼写错误,其中$
的拼写应为POST
,$title = mysqli_real_escape_string($title);
$content = mysqli_real_escape_string($content);
和$title = mysqli_real_escape_string($db, $title);
$content = mysqli_real_escape_string($db, $content);
之间带有下划线:
这段代码:
or die(mysqli_error($db))
POST superglobal需要数据库连接
mysqli_query()
如果不这样做,你会被抛出类似的东西:
警告:mysqli_real_escape_string()只需要2个参数,第x行(文件路径)中给出的参数为1
另外,请确保使用会话在所有页面内启动会话。你没有在你的第一个代码中显示出来。
您还应该根据查询检查错误。
将mysqli_query($db, $sql_store_post);
添加到$query = mysqli_query($db, $sql_store_post);
if($query){
echo "Success";
}
else{
echo("Error description: " . mysqli_error($db));
}
。
错误报告会抛出一个未定义的变量$ notice:
并且你的转义函数丢失的db参数会引发另一个错误:
修改:
require_once("../php/db.php");
到:
if(isset($_POST['post_title']) && isset($_POST['post_content'])){
if(!$_POST['post_title'] == "" && !$_POST['post_content'] == ""){
检查查询是否成功。
目前还不清楚if(!empty($_POST['post_title']) && !empty($_POST['post_content']))
确保您确实已成功连接到数据库并使用与查询相同的MySQL API。
旁注:
这些陈述,
if(!$_POST['post_title'] == "" && !$_POST['post_content'] == ""){
可以简化为:
}
并摆脱<?php
session_start();
if( isset( $_POST['profile'] ) )
$_SESSION['profile'] = $_POST['profile'];
?>
及其相关的结束<p id="editprofile">
<?php
if( isset( $_SESSION['profile'] ) )
echo $_SESSION['profile']; ?>
</p>
大括号。