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");
    });
});