【问题标题】:How to transfer data from javascript to php with OnChange如何使用 OnChange 将数据从 javascript 传输到 php
【发布时间】:2021-08-09 11:05:55
【问题描述】:

我试图从下拉菜单中获取一些数据,我想在它更改为在第二个下拉菜单中进行查询时使用该值,但直到现在,我无法使用 javascript 将值发送到我的 php。

我正在使用此代码:

<script type="text/javascript" language="javaScript">

  function flow() {
    
    var x = document.getElementById("txt_maq").value;
    document.getElementById("demo").innerHTML = x;
    
    var maq = document.getElementById('txt_maq').value;
    var cat = document.getElementById('txt_catmaterial').value;

    if (maq != "")
    {
      document.getElementById('txt_catmaterial').disabled=false;
    }
    if (cat == "")
    {
      document.getElementById('txt_material').disabled=true;
    }
    if (cat != "")
    {
      document.getElementById('txt_material').disabled=false;
    }
                
                
  }

</script>
<div class="col-2">
      <div class="input-group">
        <label class="label">Maq. Destino</label>
        <div class="rs-select2 js-select-simple select--no-search">
          <select id="txt_maq" name="txt_maq" onchange="flow()">
            <option value="">Selecione</option>
            <option value="E02">E02</option>
            <option value="E03">E03</option>
            <option value="E04">E04</option>
            <option value="E05">E05</option>
            <option value="E06">E06</option>
            <option value="E07">E07</option>
            <option value="E08">E08</option>
            <option value="E04/E07">E04/E07</option>
            <option value="E04/E08">E04/E08</option>
            <option value="E03/E04">E03/E04</option>
            <option value="E03/E07">E03/E07</option>
            <option value="E04/E07/E08">E04/E07/E08</option>
            <option value="E03/E07/E08">E03/E07/E08</option>
            <option value="E07/E08">E07/E08</option>
            <option value="E09">E09</option>
          </select>
          <div class="select-dropdown"></div>
          </div>    
        </div>
      </div>
</div>

<div class="row row-space">
  <div class="col-2">
    <div class="input-group">
      <label class="label">Cat. Material</label>
      <div class="rs-select2 js-select-simple select--no-search">

        <select id="txt_catmaterial" disabled="true" name="txt_catmaterial" onchange="flow()">
            <option value=""></option>
            <?php

              $maquina = $_POST['txt_maquina'];
              $type_te = "";


              if ($maquina == "E09"){
                $type_te= "ET";
              } else {
                $type_te= "EP";
              }
              
              echo $type_te;
              $selecione = "";
              $consulta = "SELECT Cat_Material FROM cat_mat where TE = '".$type_te."' "; //código SQL
                    


                $resultado = mysqli_query($ligacao,$consulta);

                while ($listar = mysqli_fetch_array($resultado)){

                    $catmat = $listar['Cat_Material'];
                    
                    echo "<option value=".$catmat.">$catmat</option>";
                }
            ?>                                          
        </select>   
                    
        <div class="select-dropdown"></div>
      </div>        
    </div>
  </div>
</div>

如果 txt_maq 是 E09,我要做的只是做一个 If,这样我就可以在 txt_catmaterial 中进行查询,但该值不是来自 javascript。

【问题讨论】:

  • 您使用了错误的 POST 索引 $maquina = $_POST['txt_maquina']; 在您的表单中,选择元素的名称是 txt_maq 在您的 php 代码中,它应该是 $maquina = $_POST['txt_maq'];
  • 从下拉列表中选择任何值!= 发布。因此,您需要使用 javascript/jquery 捕获此事件,然后使用 ajax 向您的数据库发出请求,最后使用响应中的值填充您的第二个选择
  • 另外,就像 Angel 和 peter 提到的那样,您将需要使用 ajax/fetch 来使其工作,或者您将需要表单来实际发送数据。 PHP 是一种服务器端语言,它不知道客户端(即 JS)发生了什么。此链接可能会帮助您入门,可能重复:stackoverflow.com/questions/1917576/…

标签: javascript php sql onchange


【解决方案1】:

使用 Ajax 将数据从 Javascript 发送到 PHP


function testEndpoint(){
        $.ajax({
            url: "https://path/to/your-php-script.php",
            type: "POST",
            crossDomain: true,
            data: {"txt_maq": $("#txt_maq").val()},
            dataType: "json",
            error: function(xhr, status, error){
                console.log("Error: " + error);
            },
            success: function(result, status, xhr){
                console.log(result);
            }
        });
}

testEndpoint();

在你的 PHP 脚本your-php-script.php 您可以使用 txt_maq 作为 POST 变量:

$useTxtMag = $_POST['txt_maq'];

【讨论】:

  • 您需要项目中的 jquery 库才能使用 Ajax。给我投票,如果这对你有帮助
  • 在 vanilla JS 中,Ajax 实际上不需要 jQuery。
  • 我有一个关于你的代码的问题 Peter,你放了一个 url,但我在同一个 php 文件中使用所有文件,我需要创建另一个文件还是只添加 $useTxtMag = $_POST[ 'txt_maq'];在php中查询?
  • 您可以将这个:$useTxtMag = $_POST['txt_maq']; 添加到 ajax URL 中引用的 php 脚本中
  • @peter pastebin.com/XM9cH18g 脚本:第 50 到 66 行尝试获取值:第 164 到 190 行我尝试这样但不适合我,如果我做错了什么对不起
【解决方案2】:

应该在包含 jQuery 之后使用 Ajax,或者您可以简单地将 jQuery 包含在您的 head 元素中

【讨论】:

  • 我将 jQuery 包含在我的 head 元素中,但仍然无法正常工作,总是出现相同的错误警告:在线 C:\xampp\htdocs\san\materias_primas\novo_registo.php 中的未定义数组键“txt_maq” 131
  • 你应该只调用Ajax函数onchange of the txt_maq field
  • 我可以证明做错了什么,因为我按照你告诉我的每一步但仍然无法工作,你能从 pastebin 中查看这个链接,看看我的问题在哪里吗? pastebin.com/ULDdSaNJ
猜你喜欢
  • 1970-01-01
  • 2011-03-05
  • 2017-02-05
  • 1970-01-01
  • 1970-01-01
  • 2011-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多