问题
我试图在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服务器写入。