php sql,表单在页面加载时重新提交
Posted
技术标签:
【中文标题】php sql,表单在页面加载时重新提交【英文标题】:Php sql, form resubmits on page load 【发布时间】:2013-01-05 11:57:15 【问题描述】:忽略 mysql 和 sql 转义字符串的明显安全漏洞,有人知道为什么我的 sql 表在页面重新加载时被空的 msgs
填满。
每次页面重新加载表单提交。我很困惑为什么会发生这种情况,我该如何阻止它?
<?php
ob_start();
session_start();
$con = mysql_connect("localhost","username","pass");
if (!$con)
die('Could not connect: ' . mysql_error());
$dates = date('Y-m-d H:i:s');
$uid = $_SESSION['user_id'];
$msg_id = (int) $_GET['msg_id'];
mysql_select_db("db_table", $con);
$result = mysql_query("SELECT users.first_name, users.last_name , intro.intro, intro.outro FROM intro INNER JOIN users ON intro.user_id = users.user_id WHERE intro.message_id = $msg_id");
while($row = mysql_fetch_array($result))
echo "<div id=\"start\"><div class=\"namedate\"><h1>". $row['first_name'] ." ". $row['last_name'] . "</h1><h2>test</h2></div><div id=\"holdmsg\"><div class=\"cent\"><strong>" . $row['intro'] . "</strong><br><i>" . $row['outro'] ."</i></div></div></div> " ;
与表单相关的部分是此部分以及页面顶部的 $_GET。
<form action="" method="post">
<?php
$sql="INSERT INTO messages (user_id, intro_id , msg, date ) VALUES (('$uid'), $msg_id ,'$_POST[msg]', ('$dates'))";
if (!mysql_query($sql,$con))
die('Error: ' . mysql_error());
mysql_close($con);
?>
<textarea rows="2"style="float:left" name="msg" type="text"placeholder="Elaborate on your idea..."></textarea>
<input id="togz2" style="float:right; "type="submit" value="SUBMIT" name="submit" class="butts">
</div></div>
</form>
【问题讨论】:
非常奇特。我假设它与您的帖子或获取方法有关。祝你好运。 ^该评论有何建设性:/ 您对插入进行了什么样的逻辑处理以确保它仅在某些情况下发生?如果以上就是您所拥有的,那么它会在您遇到的每次页面加载时插入 我更新了插入的代码 【参考方案1】:为什么不这样做呢?
if (mysql_query($sql,$con))
header('location:yourpage.php');
else
die('Error: ' . mysql_error());
我也没有在您的插入查询上方看到任何此类声明 喜欢
if(isset($_REQUEST['submit'])) //to check if posted
$sql="INSERT ......
除此之外,您还应该在插入数据库之前验证您的数据。
【讨论】:
如果我被否决了。请告诉我原因。不要默默地这样做。【参考方案2】:这是一个很好的例子,如何防止页面加载时重复输入
请参考链接http://www.webhostingtalk.com/showthread.php?t=700175。
<?php
session_start();
$faction = $_REQUEST['faction'] ;
if (!is_array($_SESSION['serials'])) $_SESSION['serials'] = array ();
if ($_REQUEST['serial'])
if ( in_array ($_REQUEST['serial'] , $_SESSION['serials'] ) )
// duplicate submition, nullify it
$faction = '';
else
$_SESSION['serials'][] = $_REQUEST['serial'] ;
if ($faction) // form submited
// if faction is not set completely ignore submition
?>
<form>
<input type="hidden" name="faction" value="42">
<input type="hidden" name="serial" value="<?=rand(1000000 , 9999999)?;>">
....
the rest of the form is here
....
</form>
另一种解决方案:-
成功插入后,您应该重定向到新页面。
【讨论】:
以上是关于php sql,表单在页面加载时重新提交的主要内容,如果未能解决你的问题,请参考以下文章