【问题标题】:How to post both a javascript variable and a html form via $.ajax post?如何通过 $.ajax post 同时发布 javascript 变量和 html 表单?
【发布时间】:2018-08-28 06:30:46
【问题描述】:

我分别使用 Ajax 将两个 javascript 变量发布到一个 php 文件以及一个 html 表单。我想将两个 javascript 变量与已发布的表单值一起使用,但我不知道该怎么做。

<script>
   $(document).ready(function() {
      var aucid = "<?php echo $auctionID; ?>";
      var userid = "<?php echo $userID; ?>";
  $.ajax({
    url: "JqueryPHP/HighestBid.php",
    method: "POST",
    data: {'auctionid': aucid, 'userid' : userid },
    success: function (result) {
        $('#price').html(result);
    }
});


  $('form').bind('submit', function (event) {

 
event.preventDefault();// using this page stop being refreshing 



          $.ajax({
           type: 'POST',
            url: 'JqueryPHP/HighestBid.php',
            data: $('form').serialize(),
            success: function () {
              alert('form was submitted');
            }
          });

        });
        
        
  });

我将这两个 javascript 变量分别发布到表单中。

<form> 

<input type="number" min="<?php echo $startingprice ?>" step="any" style="width: 10em;" size="35" name="newbid" id="newbid" tabindex="1" class="form-control"  placeholder="New Bid €" value="" required>
 <input type="submit" name="submit" id="submit" tabindex="2" class="form-control btn btn-login" style="width: 14em" value="submit">
										                           
 </form>

&lt;h4 class="price"&gt;Highest bid : &lt;span id="price"&gt;&lt;/span&gt;&lt;/h4&gt;

当我将 userID 的值回显到 span 类中时,您可以看到它的值为 2。

//JqueryPHP/HighestBid.php'

$auctionid;
$userID;

  $auctionid = $_POST['auctionid'];
  $userID = $_POST['userid'];
  echo $userID;
  
  
  if (isset($_POST['newbid'])) 
  {
  $newbid=$_POST['newbid'];
 
  
    $conn = new mysqli('localhost', 'root', '', 'auctionsite');
 $sql = 'INSERT INTO auction (useridhighestbid)VALUES("'.$userID.'")';
 if(@$conn->query($sql)){  //execute the query and check it worked    
                            return TRUE;
                        } 
         
  }

但是,当我在提交表单时尝试使用 userID 并尝试将其插入数据库进行测试时,该值为 0。

我将如何使用 javascript 变量发布表单值,以便我可以使用更新语句来更新我的数据库?

【问题讨论】:

  • 您可以在Form Serialize 中附加auciduserid 值。
  • 您为什么需要这样做?在我看来,userid 已经存储在会话中,aucid 由访问的 url 确定。使用用户提供的值只会让您的拍卖被客户操纵。
  • 我也解决了这个问题@jeroen,但有些人似乎不在乎......
  • @will mannix 看到更新的答案。

标签: javascript php jquery ajax post


【解决方案1】:

设置两个隐藏输入来保存auciduserid,如下所示:

<form> 

<input type="number" min="<?php echo $startingprice ?>" step="any" style="width: 10em;" size="35" name="newbid" id="newbid" tabindex="1" class="form-control"  placeholder="New Bid €" value="" required>
 <input type="submit" name="submit" id="submit" tabindex="2" class="form-control btn btn-login" style="width: 14em" value="submit">

        <input name='aucid' style="display:none"/>  
        <input name='userid' style="display:none"/>                                                        
 </form>





<script>
    $(document).ready(function() {
          $("input[name='aucid']").val("<?php echo $auctionID; ?>");
          $("input[name='userid']").val("<?php echo $userID; ?>");

          .......................
    });
</script>

【讨论】:

  • 我通常不推荐使用隐藏字段,因为它可以在客户端进行编辑。这两个变量应该在服务器端处理,即设置为 php 会话变量。否则,太容易“做不该做的事”了。
  • @Martin 我觉得写得像他一样女巫var aucid = "&lt;?php echo $auctionID; ?&gt;"; 也会被看到。
  • 是的,但不妨指出使用的危险,并劝阻使用它,因为它确实会产生安全风险。
【解决方案2】:

将表单发送到 php 脚本。当用户登录时,从数据库中检索他的 ID 并像这样将其放入会话中

 switch(isset($_POST['login'])):  
        case 'Register':
        $email = htmlspecialchars(trim($_POST['em']), ENT_QUOTES, 'UTF-8');
        $password = htmlspecialchars(trim($_POST['pw']), ENT_QUOTES, 'UTF-8');

        // check if the combination fname/lname/email is already used
        include('./Models/log_check.php');
        unset($_SESSION['ID'],$_SESSION['role']);
        $_SESSION['ID'] = $row['ID'];
        $_SESSION['role'] = $row['role'];

因此您可以在模型/查询中使用 ID:

<?php
        /* Jointure sama RDV des vets */
        $query =
        "SELECT
        appointment.start,
        appointment.app_day,
        patients.pet_name,
        patients.breed,
        patients.ID,
        clients.last_name,
        clients.first_name,
        appointment.type,
        appointment.canceled
        FROM appointment
        JOIN patients
        JOIN clients
        WHERE clients.users_ID = patients.owner_ID
        AND patients.ID = appointment.patients_ID
        AND appointment.vets_ID = (SELECT ID FROM vets WHERE users_ID = :ID)
        AND appointment.canceled = 'n'
        AND WEEK(appointment.app_day) = WEEK(:date)
        ORDER BY appointment.app_day,appointment.start";
        $query_params = array(':ID' => $_SESSION['ID'],
                                ':date' => $date);
        try {
            $stmt = $db->prepare($query);
            $result = $stmt->execute($query_params);
        }catch(PDOException $ex){
            die("Failed to run query: " . $ex->getMessage());
        }
    ?>

插入而不是选择

【讨论】:

    【解决方案3】:

    假设你正确解析了变量,你可以使用:

    $_POST['JavaScript_variable_name_goes_here'];

    $_GET['JavaScript_variable_name_goes_here'];

    以 PHP 格式检索变量,具体取决于您的 AJAX 方法。

    您的 AJAX 函数的直接示例是:

    <?php $auctionId=$_POST['auctionid']; ?>
    

    但是,我鼓励您做的是,一旦用户登录,您将其 userId 设置为会话变量,您可以在用户“去”的任何地方使用该变量。这样,您就不会通过 JavaScript 解析 crucial 数据元素,该元素由客户端处理,这意味着用户可以通过使用浏览器开发工具对其进行完全编辑。拍卖 ID 也是如此。出于完全相同的原因,我会推荐一个 php 会话变量逻辑。您总是可以根据“正在使用”的拍卖,用另一个拍卖 ID 覆盖拍卖 ID 会话变量。

    为什么将 userId 设置为会话变量的另一个很好的理由是,只要您记得在开始时设置以下内容,您就不会在访问变量任何地方时遇到任何问题PHP 文件:

    <?php session_start(); ?>
    

    mysqli_* 扩展的 PHP/SQL 语法如下:

    $conn=mysqli_connect("localhost", "root", "", "auctionsite");
    $sql="INSERT INTO auction SET useridhighestbid='$userID'";
    mysqli_query($conn, $sql);
    

    如果您需要详细说明,或者遇到任何其他问题,请告诉我。

    【讨论】:

    • 会话不能在 AJAX 中使用。它不在同一边
    • 所以无法执行ajax请求并获取ID
    • Howerver 我会使用完整的 php 并像这样使用 $_SESSION 。检查我的答案
    • @Dice 这就是我这篇文章的全部内容。我做 OP 想要的,并解释为什么这是一种不好的做法,并且他实际上应该使用他在每个单独的页面上获取的会话变量,而不使用 AJAX。我从来没有说过他应该通过 AJAX 解析他的会话变量,因为这实际上与我在回答中提出的观点相矛盾......
    【解决方案4】:

    您可以在 ajax 调用中像这样使用序列化附加数据

    data: $("#form_id").serialize() + '&xyz=' + xyz
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-21
      • 1970-01-01
      • 1970-01-01
      • 2011-10-14
      • 1970-01-01
      相关资源
      最近更新 更多