当我通过POST方法将表单提交到PHP_SELF页面时,每次刷新时都会将文本插入表中。如何修复此问题并防止我的textarea在插入之前变空?
echo "<form action=<?php echo $_SERVER['PHP_SELF']; method='post'>";
echo "<textarea name='msg' placeholder='Type message here' required='required' style='width:100%;min-height:60px;min-height:60px;'></textarea>";
echo "<button>Send</button>";
echo "</form>";
这是我的PHP代码,可以将文本插入到表格中,以及#39; msg&#39;。
if(isset($_POST['msg'])&!empty($_POST['msg']))
{
$message=$_POST['msg'];
$message=$conn->quote($message);
$sql="INSERT INTO msg(msg.to,msg.from,msg) VALUES('".$_SESSION["tousermessage"]."','".$_SESSION["username"]."',$message)";
$ex=$conn->prepare($sql);
$ex->execute();
unset($_POST['msg']);
}
答案 0 :(得分:0)
首先,您已经使用PHP并回显:
echo "<form action=<?php echo $_SERVER['PHP_SELF']; method='post'>";
需要更改为(并且会抛出一个解析错误)。 <{3}}可能未设置。
echo "<form action='' method='post'>";
现在,如果您想避免在页面刷新时将条目添加到数据库中,您可以选择几个选项。
I.e。:(并且您的条件语句中缺少&
。
旁注:你的价值观$message
。这是一个字符串,应该引用它。即:'$message'
。但是我把它留在了下面。如果你得到header并且你应该收到错误,请引用它。
if(isset($_POST['msg']) && !empty($_POST['msg']))
{
$message=$_POST['msg'];
$message=$conn->quote($message);
$sql="INSERT INTO msg(msg.to,msg.from,msg) VALUES('".$_SESSION["tousermessage"]."','".$_SESSION["username"]."',$message)";
$ex=$conn->prepare($sql);
$ex->execute();
unset($_POST['msg']);
header("Location: http://www.example.com/yourfile.php");
exit;
}
但是,只有在您不在标题之前输出时才会有效,例如PHP以上的HTML等。
如果是这种情况,使用ob_start();
可能会有效,但理想情况下,PHP应该位于您可能拥有的任何HTML之上。
使用会话令牌是另一种选择,但这可能超出了这个问题的范围。
请查看以下有关防止多个提交的页面:
效果相当好,可以防止多次提交。
脚注: