如何在不移动到PHP下一页的情况下提交表单


How to submit form without moving to next page in PHP

问题

我试图在php中提交一个表单,但由于我想要的内容的性质,我需要页面不要进入下一个页面,我只希望它提交数据并刷新当前页面或其他什么,目前它提交数据后进入第2页,我不希望我只需要它提交数据,并停留在当前页面上,如果可能的话!

守则

//第1页代码

<center>
<h1>What Is Jacob Dailey Doing?</h1>

<form method="post" action="jacob_dailey.php">
    <select name="baby_status">
        <option value="playing">Playing</option>
        <option value="awake">Awake</option>
        <option value="sleeping">Sleeping</option>
    </select>

<br />
    <input type="submit" value="Submit"/>
</form>
</center>

//第2页代码

<?php
if (isset($_POST['baby_status'])) {
    $baby = $_POST['baby_status'];
    setcookie("baby_status", $baby, time() + 31556926, '/'); //  Data will Store For 1 Year
    header('Location: ' . $_SERVER['PHP_SELF']);
}
$status = $_COOKIE['baby_status'];
echo '<center> <h1>Baby Jacob Dailey Is Currently ' . ucwords($status) . '</h1>';
if ($status == "playing") {
    echo '<img src="http://cdn.sheknows.com/articles/2013/02/baby-playing-with-blocks.jpg"/>';
}
elseif ($status == "awake") {
    echo '<img src="http://www.westheimphoto.com/lightbox/gallery/TaiwanStockPhotos/TWNhw1221.jpg"/>';
}
elseif ($status == "sleeping") {
    echo '<img src="http://www.babycare.onlymyhealth.com/imported/images/neonatal/2012/July/19_Jul_2012/6-Months-Old-ssl.jpg"/>';
}
echo '</center>';
?>

第2页的代码不应该那么重要,但我只需要它,所以当我点击第1页上的提交时,它会更新第2页上的信息,但不会把我带到第2页。

干杯!

您的表单可以自行提交。仅在action="xyz"中,要么完全忽略它(整个action=...属性),要么命名包含引号之间的表单的页面。

然后,当您加载页面时,您检查$_POST或$_GET数组(取决于方法),以查看是否按下了提交按钮,或者是否有人刚刚导航到该页面。(您需要给提交按钮一个name="foo"。)

action="jacob_diley.php"在您的表单中会带您进入该页面,您可以将php代码粘贴到主页并用"替换action,也可以搜索AJAX并学习如何使用

您可以使用jQuery.ajax()。示例如下:http://www.formget.com/form-submission-using-ajax-php-and-javascript/

本例使用数据库,但您可以使用php文件返回值,并从javascript中的响应中读取这些值。不要对表单执行任何操作,而是在提交按钮上启用单击事件处理程序以启用该函数。

还有我的例子:http://dev.ossipesonen.fi/alkoholilaskuri/一个非常简单的表单,您可以插入值,用$_POST将它们传递到PHP上,然后计算正确的金额和总和,并将它们打印在响应中。

解决方案:使用XHR和文件系统存储在不重新加载页面的情况下更新状态

如果你想让其他计算机上的人看到更新,那么你需要将这些信息存储在服务器上。您可以将信息存储在数据库中,但对于这一小部分信息,我使用的是文件系统。

page1.php

<?php
// get baby status if available
if ( is_readable('baby_status.php') ) {
  include 'baby_status.php';
}
$status =  ( $status )? $status: '??';
// prepare to update select list
list($pl_check, $pl_check, $pl_check) = array('', '', '');
switch ( $status ) {
  case 'playing':  $pl_check = ' selected '; break;
  case 'awake':    $aw_check = ' selected '; break;
  case 'sleeping': $sl_check = ' selected '; break;
}
?>
<center>
<h1>What Is Jacob Dailey Doing?</h1>
<form id="baby_form" method="post" action="update_baby.php">
    <select id="baby_status" name="baby_status">
        <option value="playing" <?php echo $pl_check ?>>Playing</option>
        <option value="awake"   <?php echo $aw_check ?>>Awake</option>
        <option value="sleeping"<?php echo $sl_check ?>>Sleeping</option>
    </select><br />
    <input type="submit" value="Submit"/>
</form>
<a href="page2.php">See Baby Status</a>
</center>
<script>
// XHR/PHP/Filesystem method
function update_baby () {
  var baby_status = document.getElementById('baby_status');
  var status=encodeURIComponent(baby_status.options[baby_status.selectedIndex].value)
  var parameters = 'baby_status=' + status
  // set up XHR object
  var xhr = new XMLHttpRequest()
  xhr.open('POST', 'update_baby.php', true)
  xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded')
  // handle response
  xhr.onload = function () {
    console.log(this.responseText)
    alert(this.responseText)
  }
  xhr.send(parameters) 
}
// hook up baby status function to form submit
document.getElementById('baby_form').addEventListener('submit', function(evt){
  evt.preventDefault()
  update_baby()
})
</script>

page2.php

<?php
// execute baby update code and get current status
include 'update_baby.php';
echo '<center> <h1>Baby Jacob Dailey Is Currently ' . ucwords($status) . '</h1>';
if ($status == "playing") {
    echo '<img src="http://cdn.sheknows.com/articles/2013/02/baby-playing-with-blocks.jpg"/>';
}
elseif ($status == "awake") {
    echo '<img src="http://www.westheimphoto.com/lightbox/gallery/TaiwanStockPhotos/TWNhw1221.jpg"/>';
}
elseif ($status == "sleeping") {
    echo '<img src="http://www.babycare.onlymyhealth.com/imported/images/neonatal/2012/July/19_Jul_2012/6-Months-Old-ssl.jpg"/>';
}
?>
<br>
<a href="page1.php">Update Baby Status</a>
</center>

update_baby.php

<?php
if (isset($_POST['baby_status'])) {
    $status = $_POST['baby_status'];
    // prepare php script text for baby status file
    $status_write = <<<EOT
<?php
'$status = '$status';
?>
EOT;
    // write status to baby_status.php
    if ( $baby_status_file = fopen('baby_status.php', 'w') ) {
        fwrite($baby_status_file, $status_write);
        fclose($baby_status_file);
    }
    echo 'Baby status updated.';
}
else {
    if ( is_readable('baby_status.php') ) {
        include 'baby_status.php';
    }
    $status = ( $status )? $status: '??';
}
?>

注意:若要使用此选项,这些文件所在的目录必须可由web服务器写入。