方法isset在使用AJAX的php站点中不起作用

时间:2016-02-16 07:29:51

标签: php ajax

这是我的header.php页面,其中包含某些页面的链接,我使用ajax来开发我的网站

<li><a href="log.php" class="ajaxtrigger">login</a></li>
<li><a href="chenge_pass.php" class="ajaxtrigger" >chenge password </a></li>
//some codes
<div id="target">  </div>  

这是我的ajax代码

   $(document).ready(function(){
  $('.ajaxtrigger').click(function(){
    var url = $(this).attr('href');
    $('#target').load(url);
    return false;
  });
});

类ajaxtrigger的任何链接都将通过AJAX加载内容并将其显示在具有ID目标的元素中。 我的问题是,当我想要例如更改我的密码并点击链接“更改密码”页面将被调用但文本框未设置(我认为!因为if(isset($ _ REQUEST [“txt2”]))剂量不返回是的!)并且'if'中的所有代码都没有运行 这是我的chenge_pass.php:

<form name="c" action="" method="POST">
last password<input class=fild name="txt2" type="password">
new password<input class=fild name="txt4" type="password" >
repeat new password<input class=fild name="txt3" type="password" >
<input class="btn b2" name="btn" type="submit" value="run">
 </form>
 <?php
   if(isset($_REQUEST["txt2"]))
  {
   if(!empty($_REQUEST["txt3"]) and !empty($_REQUEST["txt4"]) and !empty($_REQUEST["txt2"])  )
   {
    $txt3=($_REQUEST["txt3"]);
    $txt4= ($_REQUEST["txt4"]);
    $txt2=($_REQUEST["txt2"]);
    //code for save changes into mysql database
    }
    }
 ?>

如何设置文本框以便我可以保存对数据库的更改?

6 个答案:

答案 0 :(得分:1)

这个问题有点模糊......但如果我可能试图理解和总结,那就是:“你有一个页面通过AJAX加载 chenge_pass.php 文件。然后提交时,您希望在将字段保存到数据库之前对字段进行一些状态验证。“

如果这是真的......

您的文本字段将无法修复,因为#target中的内容来自PHP文件 chenge_pass.php ,该文件目前无法在浏览器的历史记录中显示(除非您使用推送-state,这里没有说明。)

因此,当提交表单(其规范中的操作默认为浏览器URL指向的页面)时,页面将重新加载...并且您必须重新触发单击以查看密码表单,敢于我说。

现在我们了解到,这有两个解决方案

  1. 完全删除AJAX :这样,您就可以正确加载 chenge_pass.php 文件作为自己的页面。表单提交时,您可以正确查看字段。

  2. 通过AJAX 提交您的密码表单:这是我的首选解决方案,因为无论如何都是通过AJAX加载表单。

  3. 无论您选择哪种方式,都要修理您所说的内容......

      

    页面将被调用但文本框未设置

    ......你必须有这样的东西

    <input class=fild name="txt2" type="password" value="<?php echo $_REQUEST['txt2']?>">
    

    这样,如果您填充了$ _REQUEST ['txt2'],它就会显示在表单中。

答案 1 :(得分:0)

当您点击表单未发布的链接时,您必须点击<input class="btn b2" name="btn" type="submit" value="run">按钮发布表单输入。

如果你想要处理ajax,你应该首先删除你的href:

<a href="javascript:void(0);" class="ajaxtrigger" >chenge password </a>

然后您可以通过以下代码发布数据:

$(document).ready(function(){
  $('.ajaxtrigger').click(function(){
    var url = "chenge_pass.php";

    $.ajax({
      type: "POST",
      url: url,
      data: $("form").serialize()
    });
 });
});

答案 2 :(得分:0)

修改表单: <form name="c" action="chenge_pass.php" method="POST">

答案 3 :(得分:0)

有点不清楚你在问什么,但从我所看到的,你将把你的表格发布到错误的剧本。

使用ajax加载表单时,请加载此表单:

<form name="c" action="" method="POST">

action属性将使表单发布到当前页面/脚本。这是包含您的链接的页面,而不是chenge_pass.php脚本。

首先,你需要改变它:

<form name="c" action="chenge_pass.php" method="POST">

答案 4 :(得分:0)

我发现您的href链接处于活动状态,所以它在ajax运行之前首先运行所以$ _REQUEST中存在空[&#34; txt2&#34;]为null。通过插入onclick返回false

<li><a href="chenge_pass.php" class="ajaxtrigger" onclick="return false;">chenge password </a></li>

答案 5 :(得分:0)

也许您应该重新考虑代码的架构。如果您使用的是ajax,请尝试将您的视图和您的php进程分开,例如:

application | |- controllers | | | - change_passoword.php | |- views | | | - change_password.html | |- index.html

  

的index.html

<html>
    <!-- Your html... -->
    <li><a href="log.php" class="ajaxtrigger">login</a></li>
    <li><a href="chenge_pass.php" class="ajaxtrigger" >chenge password </a></li>
    //some codes
    <div id="target">  </div>  
</html>
<script>
$(document).ready(function(){
  $('.ajaxtrigger').click(function(){
      var url = $(this).attr('href');
      $('#target').load(url);
      e.preventDefault();
  });
});
</script>
  

视图/ change_password.html

<form id="myForm" name="c" action="controllers/change_password" method="POST">
    last password<input class=fild name="txt2" type="password">
    new password<input class=fild name="txt4" type="password" >
    repeat new password<input class=fild name="txt3" type="password" >
    <input class="btn b2" name="btn" type="submit" value="run">
</form>
<script>
    var form = $('#myForm');
    form.submit(function(e) {
        e.preventDefault();
        $.ajax({
            url: form.attr('action'),
            type: "POST",
            dataType: "JSON",
            data: $('#myForm').serialize(),
            success: function(data) {
                // Do something
                // data is an object, data.success is a boolean, data.message is the controller message, see controllers/change_passwords.php to understand why
            },
            error: function(a,b,c) {
                console.error("Error during request", b);
            }
        });
    });
</script>
  

控制器/ change_password.php

<?php
header("Content-Type: application/json");
if (!empty($_POST) && !empty($_POST['txt2']) && !empty($_POST['txt3']) && !empty($_POST['txt4'])) {
    // Do your stuff here
    if ($allIsFine) { //If everything is fine
        echo json_encode(array("success" => true, "message" => "Your password has been changed"));
    } else {
        echo json_encode(array("success" => false, "message" => "Something went wrong"));
    }
} else {
    echo json_encode(array("success" => false, "message" => "Please fill and inputs"));
}