当前位置: 首页 > 知识库问答 >
问题:

在超文本标记语言选择更改后将值传递给PHP

堵琨
2023-03-14

我的html表单有一个选择选项。在我从选项更改数据并提交数据后,将运行Mysql查询。我想要的是,在从select中选择数据之后,它将重新加载并将值传递给php代码。

这是html

<form action='a.php?'>
        <SELECT name="client_id" ID="mySelect">
                <OPTION value="artes>'">artes</OPTION>
                <OPTION value="ingles">inglés</OPTION>
        </SELECT>
<input type="submit" name="chooseclient" value="Select">
</form>

这里是提交后运行的php

        if(isset($_POST['chooseclient'])){  
    $clientid = mysqli_real_escape_string($mysqli, $_POST['client_id']);
MYSQL query here
    }

我试过这个。类型submit(),但它不发送数据。我知道我需要学习Ajax。是否有任何方法可以重新更改表单并将数据传递给php?

共有2个答案

齐宗清
2023-03-14

如果要在字段值更改时由Ajax自动将选定的值发送到a.php,可以使用以下代码:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
      content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
</head>
<body>

<form action='a.php?'>
    <SELECT name="client_id" ID="mySelect">
        <option value="A1>'">A1</option>
        <option value="A2">A2</option>
        <option value="A3">A3</option>
    </SELECT>

</form>

<script type="text/javascript">

    $(document).ready(function() {

        $("#mySelect").change(function(){

            var value =$("#mySelect").val();

            alert(value);
            $.ajax({
                url: 'a.php', 
                type: "POST",
                data: ({chooseclient: value}),
                success: function(){
                    location.reload();
                }
            });

        });
        });
</script>
</body>

如果您不希望页面在发送信息并保存到数据库后重新加载,请注释它location.reload();

a.php

<?php

if(isset($_POST['chooseclient'])){
    $clientid = mysqli_real_escape_string($mysqli, $_POST['chooseclient']);
    #MYSQL query here
    # do something
}
葛景龙
2023-03-14

要实现你所期望的,你必须做一点javascript。据我所知,您不需要发送ajax请求,因为您要求表单在提交时重新加载。但我会给你两种方法。

没有AJAX

首先,我们将在表单中添加一个id。在我的例子中,它将是“我的形式”。和一个onChange事件到您的选择,将调用myFunction();。我们还必须告诉您的表单,以发布当前PHP脚本的数据,否则它将作为获取发送

<form id="my-form" action='a.php?' method="post">
    <SELECT onchange="myFunction()" name="client_id" ID="mySelect">
        <OPTION value="artes>'">artes</OPTION>
        <OPTION value="ingles">inglés</OPTION>
    </SELECT>
    <input type="submit" name="chooseclient" value="Select">
</form>

现在,在javascript文件或脚本标记之间添加函数:

<script>
function myFunction(){
    document.getElementById("my-form").submit();
}
</script>

现在,当您更改select的值时,表单应自行提交。但你会有另一个问题。

if(isset($_POST['chooseclient'])){  
    $clientid = mysqli_real_escape_string($mysqli, $_POST['client_id']);
//MYSQL query here
}

当您通过javascript提交表单时,您的提交按钮将不会和其余数据一起发送。所以if(isset($\u POST['chooseclient'])永远不会为真。要解决这个问题,您有几个选择,我给您两个:

您可以更改PHP以检查client_id(如果这样做,您可以完全删除提交按钮):

if(isset($_POST['client_id'])){  
    $clientid = mysqli_real_escape_string($mysqli, $_POST['client_id']);
//MYSQL query here
}

或将“提交”按钮更改为隐藏字段:

<form id="my-form" action='a.php'>
    <SELECT onchange="myFunction()" name="client_id" ID="mySelect">
        <OPTION value="artes>'">artes</OPTION>
        <OPTION value="ingles">inglés</OPTION>
    </SELECT>
    <input type="hidden" name="chooseclient" value="Select">
</form>

阿贾克斯

与第一种方法一样,我们将在表单中添加一个id,在选择中添加一个onchange事件。您还应删除提交按钮或将其更改为隐藏字段,在本例中,我将删除它:

<form id="my-form" action='a.php'>
    <SELECT onchange="myFunction()" name="client_id" ID="mySelect">
        <OPTION value="artes>'">artes</OPTION>
        <OPTION value="ingles">inglés</OPTION>
    </SELECT>
</form>

而脚本wich将与第一个完全不同:

<script>
function myFunction(){
    var form = document.getElementById("my-form");
    var action = form.getAttribute("action");
    var data = new FormData(form);
    var xhr = new XMLHttpRequest();
    xhr.open("POST", action);
    xhr.send(data);
}
</script>

同样,您必须将PHP修复为不在chooseclient上设置条件(除非将其设置为隐藏字段):

if(isset($_POST['client_id'])){  
    $clientid = mysqli_real_escape_string($mysqli, $_POST['client_id']);
//MYSQL query here
}

如果你选择ajax方法,你可能想对响应做些什么,在stackoverflow上有很多关于这个的线程,这里有一个:如何获得XMLHttpRequest的响应?

 类似资料:
  • 出于某种原因,我通过POST提交的表单发送的是选项文本,而不是表单的选项值。这是我的选择声明: 当我用PHP打印我的$\u POST数组时。我有: 我对jquery特别陌生,我使用jquery以模态的方式呈现表单,因此我将粘贴下面的完整表单/div和javascript,以防相关: return_frequency()是一个php函数,根据输入返回“每2周”或“每周”。 我错过了什么?

  • 这是我的代码: 我正在从数据库中提取信息并将它们放入表中各自的列中。所以它看起来像:|课程---部分---(按钮)| 当我让用户单击提交按钮时,我希望能够传递整行的数据。我尝试过以这种方式隐藏输入: 这只会导致一些奇怪的表格格式,并且不起作用。

  • 我想选择强标签内的文本,但不在其下的div。。。 有没有可能直接与jsoup合作? 我的选择尝试(不工作,选择强标签内的完整内容): HTML:

  • 我试图在HTML的pre标签中包装文本,但它不起作用。我使用下面的CSS作为我的标签。 我从如何在pre标记中换行文本? 我已添加

  • 我对angular很陌生,假设我有一个这样的值数组 我想要不同的html为真值和不同的html为虚假值,而使用ngFor,我遵循这个博客,并实现了这一点,但它不工作 比如。

  • 我正在工作的工具提示和从后端我将获得数据与html标记。我需要在工具提示中显示相应的标签中的相应数据。例如,我将从后端获得Hello用户单击此处。我必须显示为你好用户在h1格式,点击这里应该是一个锚。我尝试了这两个功能,并取代其不工作。 具有以下功能: 替换: https://codesandbox.io/s/serene-fast-u8fie?file=/App.svelte