PHP 用于提交会话和更改文本 onclick 的表单按钮
PHP form button to submit session and change text onclick
我想使用提交类型按钮更改会话值和 <p>
文本。
然而,session确实改变了,但文本没有改变。
这是正文中的 PHP 代码。
<?php
if (isset($_POST['lang']) == true && !empty($_POST['lang'])) {
$_SESSION["language"]=$_POST['lang'];
}
?>
<p>My Name is Khan</p>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF'])?>" method="post">
<button type="submit" name="lang" value="jpn" id="jpn">日本語</button>
<button type="submit" name="lang" value="eng" id="eng">English</button>
</form>
这是 Javascript 代码
$(document).ready(function(){
$("#jpn").on('click', function(){
$("p").text("私の名前はハーンです");
});
$("#eng").on('click', function(){
$("p").text("My name is Khan");
});
});
当我点击日语按钮时,文字一闪而过,但又变回原来的样子。
我怎样才能解决这个问题?
谢谢..
问题是您还提交了表单,如果您不想重新加载页面,它会重新加载页面添加 preventDefault()
- 它不会提交表单。
$(document).ready(function(){
$("#jpn").on('click', function(e){
e.preventDefault();
$("p").text("私の名前はハーンです");
});
$("#eng").on('click', function(e){
e.preventDefault();
$("p").text("My name is Khan");
});
});
但是如果您需要重新加载页面来设置您的会话,那么您需要更改段落中的文本 php:
<?php
if (isset($_POST['lang']) == true && !empty($_POST['lang'])) {
$_SESSION["language"]=$_POST['lang'];
if($_POST['lang'] == 'jpn'){
echo '<p>私の名前はハーンです</p>';
}else{
echo '<p>My Name is Khan</p>';
}
}
?>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF'])?>" method="post">
<button type="submit" name="lang" value="jpn" id="jpn">日本語</button>
<button type="submit" name="lang" value="eng" id="eng">English</button>
</form>
$(document).ready(function(){
$("#jpn").on('click', function(){
$("p").text("私の名前はハーンです");
});
$("#eng").on('click', function(){
$("p").text("My name is Khan");
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>My Name is Khan</p>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF'])?>" method="post">
<button type="submit" name="lang" value="jpn" id="jpn">日本語</button>
<button type="submit" name="lang" value="eng" id="eng">English</button>
</form>
1.) php 的 isset
returns 一个布尔值,不需要检查 == true
.
if( isset($_POST['lang']) && !empty($_POST['lang']) )
$_SESSION["language"] = $_POST['lang'];
2.) 如果您想 post 一个表单到同一个文档,您也可以将表单的 action
留空。
<form action="" method="post">
</form>
3.) 应该通过php将初始状态写入文档,防止用户点击reload时显示错误。否则用户将提交表单,变量将被设置,但在重新加载后总是会显示文本 My name is Khan
。
你可以这样做,例如在一行中:
echo "<p>" . ($_SESSION["lang"] == "jpn" ? "私の名前はハーンです" : "My name is Khan") . "</p>";
或完整 if
:
if( $_SESSION["lang"] == "jpn" )
echo "<p>私の名前はハーンです</p>";
else
echo "<p>My name is Khan</p>";
<p><?php echo (isset($_SESSION["language"]) && $_SESSION["language"] == 'jpn') ? '私の名前はハーンです':'My name is Khan';?></p>
只需将此条件放入
标签
这是因为表单动作是伴随着刷新的,需要通过js事件来阻止
$(document).ready(function(){
$("form").on('click','#jpn', function(e){
e.preventDefault();
$("p").text("私の名前はハーンです");
});
$("form").on('click','#eng', function(e){
e.preventDefault();
$("p").text("My name is Khan");
});
});
我想使用提交类型按钮更改会话值和 <p>
文本。
然而,session确实改变了,但文本没有改变。
这是正文中的 PHP 代码。
<?php
if (isset($_POST['lang']) == true && !empty($_POST['lang'])) {
$_SESSION["language"]=$_POST['lang'];
}
?>
<p>My Name is Khan</p>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF'])?>" method="post">
<button type="submit" name="lang" value="jpn" id="jpn">日本語</button>
<button type="submit" name="lang" value="eng" id="eng">English</button>
</form>
这是 Javascript 代码
$(document).ready(function(){
$("#jpn").on('click', function(){
$("p").text("私の名前はハーンです");
});
$("#eng").on('click', function(){
$("p").text("My name is Khan");
});
});
当我点击日语按钮时,文字一闪而过,但又变回原来的样子。
我怎样才能解决这个问题?
谢谢..
问题是您还提交了表单,如果您不想重新加载页面,它会重新加载页面添加 preventDefault()
- 它不会提交表单。
$(document).ready(function(){
$("#jpn").on('click', function(e){
e.preventDefault();
$("p").text("私の名前はハーンです");
});
$("#eng").on('click', function(e){
e.preventDefault();
$("p").text("My name is Khan");
});
});
但是如果您需要重新加载页面来设置您的会话,那么您需要更改段落中的文本 php:
<?php
if (isset($_POST['lang']) == true && !empty($_POST['lang'])) {
$_SESSION["language"]=$_POST['lang'];
if($_POST['lang'] == 'jpn'){
echo '<p>私の名前はハーンです</p>';
}else{
echo '<p>My Name is Khan</p>';
}
}
?>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF'])?>" method="post">
<button type="submit" name="lang" value="jpn" id="jpn">日本語</button>
<button type="submit" name="lang" value="eng" id="eng">English</button>
</form>
$(document).ready(function(){
$("#jpn").on('click', function(){
$("p").text("私の名前はハーンです");
});
$("#eng").on('click', function(){
$("p").text("My name is Khan");
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>My Name is Khan</p>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF'])?>" method="post">
<button type="submit" name="lang" value="jpn" id="jpn">日本語</button>
<button type="submit" name="lang" value="eng" id="eng">English</button>
</form>
1.) php 的 isset
returns 一个布尔值,不需要检查 == true
.
if( isset($_POST['lang']) && !empty($_POST['lang']) )
$_SESSION["language"] = $_POST['lang'];
2.) 如果您想 post 一个表单到同一个文档,您也可以将表单的 action
留空。
<form action="" method="post">
</form>
3.) 应该通过php将初始状态写入文档,防止用户点击reload时显示错误。否则用户将提交表单,变量将被设置,但在重新加载后总是会显示文本 My name is Khan
。
你可以这样做,例如在一行中:
echo "<p>" . ($_SESSION["lang"] == "jpn" ? "私の名前はハーンです" : "My name is Khan") . "</p>";
或完整 if
:
if( $_SESSION["lang"] == "jpn" )
echo "<p>私の名前はハーンです</p>";
else
echo "<p>My name is Khan</p>";
<p><?php echo (isset($_SESSION["language"]) && $_SESSION["language"] == 'jpn') ? '私の名前はハーンです':'My name is Khan';?></p>
只需将此条件放入
标签
这是因为表单动作是伴随着刷新的,需要通过js事件来阻止
$(document).ready(function(){
$("form").on('click','#jpn', function(e){
e.preventDefault();
$("p").text("私の名前はハーンです");
});
$("form").on('click','#eng', function(e){
e.preventDefault();
$("p").text("My name is Khan");
});
});