点击PHP表单按钮提交会话并更改文本



我想使用提交类型按钮更改会话值和<p>文本。然而,会议确实发生了变化,但文本没有变化
以下是正文中的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>

以下是Java脚本代码

$(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>

1.(php的isset返回布尔值,无需检查== true

if( isset($_POST['lang']) && !empty($_POST['lang']) )
    $_SESSION["language"] = $_POST['lang'];

2.(如果您想将表格张贴到同一文档,您也可以将表格的action留空。

<form action="" method="post">
</form>

3.(应该通过php将初始状态写入文档,以防止用户点击重载时出现错误显示。否则,用户将提交表单,变量将被设置,但在其他方式重新加载后,将显示文本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>";

$(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>

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

相关内容

最新更新