PHP Mysql仅在提交后插入
Posted
技术标签:
【中文标题】PHP Mysql仅在提交后插入【英文标题】:PHP Mysql insert only after submit 【发布时间】:2012-09-12 02:52:30 【问题描述】:我有 2 页。用户在第 1 页插入所有信息后,他们转到第 2 页。所有输入的信息都正确存储在 $_POST 中,因此我可以在下一页中访问它。我也可以插入到mysql数据库中,没问题。我要做的事情是仅在他们单击第二页上的提交按钮时才执行插入到数据库代码中。我试过这样做:
Page2.php
<script>
$(document).ready(function(e)
$("#PaySubmit").click(function()
$.ajax(
url: 'Insert.php'
);
);
);
</script>
<input type="submit" name="PaySubmit" id="PaySubmit" value="Continue"/>
插入.php
try
$link = new PDO('mysql:host=****;dbname=****;charset=UTF-8','****','****');
$first = $_POST["fname"];
$last = $_POST["lname"];
$stmt = $link -> prepare("INSERT INTO Conference (`First Name`, `Last Name`) VALUES (:first, :last)");
$stmt->bindParam(':first', $first);
$stmt->bindParam(':last', $last);
$stmt->execute();
catch(PDOException $e)
print "Error!: " . $e->getMessage() . "<br/>";
die();
问题是,当您单击第二页上的提交时,$_POST 会被第二页中的数据替换,因此我无法再访问第一页的数据。关于如何解决这个问题的任何想法?
【问题讨论】:
【参考方案1】:将第一篇文章中的所有值存储在当前会话中。
然后您可以使用$_SESSION
全局访问它们。
看看serialize function,它可能对你有很大帮助。或json_encode。它们对于将数组存储在一个变量中并稍后检索它非常有用。
【讨论】:
我想过这样做,但还有其他解决方案吗?我没有发布所有代码,但我有大量数据要插入,并且将它们全部放在会话中会非常乏味 试一试真的没那么繁琐foreach ($_POST as $k => $v) $_SESSION[$k] = $v;
@MikeBrant 不错,也许认为值得在名称中添加一些内容以不覆盖其他已设置的变量,例如`foreach ($_POST as $k => $v) $_SESSION['post_'.$k] = $v;
@MikeBrant Yah 但我在 $_POST 中有一些数组,您必须像 $_POST["array"][0]
一样访问它们,所以我不知道 foreach 将如何处理它。有没有一种方法可以直接将整个 post 数组直接复制到会话数组中而无需循环?
@Richard 您的嵌套数组结构将保持完全相同。对于您的示例,$_POST['array'][0]
将变为 $_SESSION['array'][0]
,因为 $_SESSION
将设置为将整个数组存储在 array
键中。要回答有关如何在没有循环的情况下执行此操作的问题,您也可以简单地合并数组,如 array_merge($_SESSION, $_POST);
【参考方案2】:
作为在会话中存储的替代方法,您可以简单地通过使用隐藏输入字段将值从第一页传递到第二页。像这样的:
foreach($_POST as $k => $v)
?>
<input type="hidden" name="<?php echo $k; ?>" value="<?php echo $v; ?>" />
<?php
当然,您可能希望在发布到下一页之前以某种方式清理帖子中的数据,但这应该让您知道该怎么做。
【讨论】:
【参考方案3】:我建议您将 DBconnection 设置为单例类。并在您转到第 2 页后调整查询,并在您单击第 2 页中的提交时执行它。
【讨论】:
以上是关于PHP Mysql仅在提交后插入的主要内容,如果未能解决你的问题,请参考以下文章