Php 每次刷新时HTML表单中的空白字段
我知道这个问题已经被问了几千次了,但我找不到解决我的问题的办法。只有当按下submit按钮并且所有字段都不为空时,我才尝试建立与数据库的连接。但每次刷新后都会出现空白行。而且,如果我不再次提交表单,则每次刷新后内容重复的行都会出现。如果我不通过提交表单“更新”数据,$\u POST似乎可以通过刷新来保存数据 这是我的密码。我真的非常感谢你的帮助Php 每次刷新时HTML表单中的空白字段,php,html,forms,page-refresh,Php,Html,Forms,Page Refresh,我知道这个问题已经被问了几千次了,但我找不到解决我的问题的办法。只有当按下submit按钮并且所有字段都不为空时,我才尝试建立与数据库的连接。但每次刷新后都会出现空白行。而且,如果我不再次提交表单,则每次刷新后内容重复的行都会出现。如果我不通过提交表单“更新”数据,$\u POST似乎可以通过刷新来保存数据 这是我的密码。我真的非常感谢你的帮助 <?php $nombre = $titulo = $texto = $fecha = ""; $mensajeEnvio = $mensajeE
<?php
$nombre = $titulo = $texto = $fecha = "";
$mensajeEnvio = $mensajeError = "";
if ( $_SERVER['REQUEST_METHOD'] == 'POST'){
if ((isset($_POST["submit-comentario"])) && (!empty($_POST["nombre"])) && (!empty($_POST["titulo"])) && (!empty($_POST["texto"]))){
$nombre=$_POST['nombre'];
$titulo=$_POST['titulo'];
$fecha=$_POST['fecha'];
$texto=$_POST['texto'];
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
} else {
$sql = "INSERT INTO foro (usuario_comentario, titulo_comentario, fecha_comentario, texto_comentario) VALUES ('$usuario', '$titulo', '$fecha', '$texto')";
}
if (mysqli_query($conn, $sql)) {
$mensajeEnvio= "Tu comentario se ha enviado correctamente. ¡Gracias por participar!";
} else {
$mensajeError= "Ha habido un problema. Por favor, vuelve a publicar tu comentario. ";
}
mysqli_close($conn);
}
} else {
$mensajeError= "Por favor, rellena todos los campos y vuelve a publicar.";
}
下面是表单,它紧跟在php代码之后
<form method="POST" action="<?php echo htmlspecialchars($_SERVER['REQUEST_URI']);?>" id="formulario-foro">
<input name="nombre" type="text" id="usuario" placeholder="Nombre" /><br>
<textarea name="titulo" style="width: 100%; height: 23px"id="titulo" placeholder="Título" /></textarea><br>
<textarea name="texto" style="width: 100%; height: 150px" placeholder=" Tu comentario..." id="texto" /></textarea><br>
<input type="hidden" name="fecha" id="fecha" value="<?php echo $mysqldate?>"/>
<input type="submit" name="submit-comentario" value="Publicar">
<div class="mensaje-envio"><?php echo $mensajeEnvio; ?></div>
<div class="mensaje-error"><?php echo $mensajeError; ?></div>
</form>
也许你可以用这个小技巧
<form action="" method='POST'
onsubmit="this.submit(); this.reset(); return false;">
您可以使用会话密钥进行检查 首先,您需要创建一个随机会话密钥并将其存储在会话变量中。还可以将此值作为表单中的隐藏元素提供。 在插入过程中,可以检查隐藏元素中的值是否与会话键相同,然后插入。否则通过错误消息。成功插入后,再次重置会话密钥 将其放在php开始处 会议开始;函数get_session_key{$randomId=microtimetrue.uniqid; $\u会话['unique\u id']=$randomId; 返回$randomId; } 然后将if条件更改为 如果设置为$\u POST[提交comentario]&&!空$_POST[nombre]&&!空的$_POST[titulo]&&!空的$\u POST[texto]&&$\u会话['unique\u id']=$\u POST['unique\u id']{ 插入后,添加下面的行 如果mysqli_查询$conn,$sql{ //重置seeion键 $\u会话['unique\u id']= 然后在表单中添加以下行
在我看来,防止刷新的最佳方法如下: 用户提交表单 将所有POST数据放入会话变量中 $\u会话['post\u data']=$\u post 取消设置$u POST数据 取消美元邮政 重定向到相同/新页面并检查会话['post\u data']安装的$\u post 如果isset$_会话['post_数据]]和is_数组$_会话['post_数据]]和计数$_会话['post_数据]]>0{ //…请回答您的问题 取消设置$_会话['post_data']; //重定向 头部位置: }
这样,您的用户将无法刷新和重新发布表单。当他们使用“上一步”按钮时,表单将为空,并且$\u post将不会被填充。您需要的是在成功地将数据保存到数据库中后进行一次发布以获得重定向。这样,如果用户刷新页面,他将刷新GET请求,并且不会t用于存储信息的帖子
if (mysqli_query($conn, $sql)) {
// Success!
header('Location: ' . $_SERVER['REQUEST_URI']);
// Prevent further processing
return;
} else {
$mensajeError= "Ha habido un problema. Por favor, vuelve a publicar tu comentario. ";
}
当然,您也可以使用会话或GET参数重定向到另一个页面和/或添加一些内容来显示消息。谢谢大家的想法。我终于解决了这个问题,这实际上是两个问题 首先,我使用User35945会话建议来防止发送表单后每次刷新时重复行 但是空白行不断出现,直到我发现我正在一个页面中建立另一个数据库连接,该页面在我的wordpress hyerarchy中隶属于此页面,并将空白表单数据发送到mysql。我删除了该页面,现在一切正常
这是一个愚蠢的错误,但我想把它留在这里,以防它对其他人有所帮助。提交后刷新页面实际上可以重新发送数据。浏览器应该通知您并询问行为……看起来$\u POST通过刷新来保存数据……嗯,是的,确实如此-但您通常会收到一个弹出警告。我收到弹出警告,但如果我不接受,我就无法刷新页面,所以我最终会这样做。我只想在按下“提交”按钮时发送数据。这可能吗?你刚刚发布了你网站的url,上面有管理员姓名和密码……为了你自己的安全,请编辑它,并尽快更改网站上的密码。只有在提交时,我才尝试与数据库建立连接按下按钮-如果设置为$\u POST[submit comentario]&&&!empty$\u POST[nombre]&&!empty$\u POST[titulo]&&!empty$\u POST[texto],则移动{在您连接到的行上方,或者在DB连接上方使用另一个条件语句仅用于submit按钮。有很多方法可以做到这一点。我刚开始使用php,所以我不知道我是否能够做到。我会让您知道。谢谢您。您好User35945。应用这些更改后,页面似乎正常工作,但没有问题w行在我的数据库中被保存为$\u SESSION['unique\u id']和$\u POST['unique\u id']不同。以下是我的代码: