[Solved] Assign label value when selecting product in combobox

0

Good morning,

I have this form where in the comboboxes the desired values already appear: [1] [1]

Now I have a problem, because when I select the product, I want the unit of the product to automatically appear on the label "Unit."

This is the code I used to populate the "Product" combobox:

<form name="Registo" action="conexao.php" method="POST">
<b>Produtos:</b>
<br>
<select name="select_Produtos">
<option>Selecione</option>
<?php
$result_Produtos = "SELECT * FROM Produtos";
$resultado_Produtos = mysqli_query($conn, $result_Produtos);
while($row_Produtos = mysqli_fetch_assoc($resultado_Produtos)){ ?>
<option value="<?php echo $row_Produtos['ID']; ?>"><?php echo $row_Produtos['Product']; ?>
</option> <?php
}
?>
</select><br>

And now it's the code for the rest of the form:

<b>Unidade:</b>
<br>
<input type="text" name="TipoUnid" size="20"><br>
    <b>Quantidade:</b>
<br>
<input type="text" name="Amount" size="5"><br>
<b>Observações (Opcional):</b>
<br>
 <textarea name="Comments" cols="30" rows="5"> </textarea><br>
<b>Quarto (Opcional):</b>
<br>
<select name="select_Bedroom">
<option>Selecione</option>
<?php
$result_Quarto = "SELECT * FROM Quarto";
$resultado_Quarto = mysqli_query($conn, $result_Quarto);
 while($row_Quarto = mysqli_fetch_assoc($resultado_Quarto)){ ?>
<option value="<?php echo $row_Quarto['ID']; ?>"><?php echo $row_Quarto['Bedroom']; ?>
</option> <?php
}
?>
</select><br>
<br>
<input type="submit" name="adicionar" value="Adicionar">
</form>    

Can someone help me?

CREATE TABLE 'Estado' (
  'ID' int(11) NOT NULL AUTO_INCREMENT,
  'IDProd' int(11) NOT NULL,
  'Active' tinyint(1) NOT NULL,
  PRIMARY KEY ('ID')
) ENGINE=InnoDB AUTO_INCREMENT=41 DEFAULT CHARSET=latin1;

CREATE TABLE 'Quarto' (
  'ID' int(11) NOT NULL AUTO_INCREMENT,
  'Bedroom' int(11) NOT NULL,
  PRIMARY KEY ('ID')
) ENGINE=InnoDB AUTO_INCREMENT=41 DEFAULT CHARSET=latin1;
CREATE TABLE 'Unidades' (
  'ID' int(11) NOT NULL AUTO_INCREMENT,
  'Description' varchar(30) NOT NULL,
  PRIMARY KEY ('ID')
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1;

CREATE TABLE 'Registo' (
  'ID' int(11) NOT NULL AUTO_INCREMENT,
  'RegistrationDate' date NOT NULL,
  'IDProd' int(11) NOT NULL,
  'Product' varchar(50) NOT NULL,
  'Active' tinyint(1) NOT NULL,
  'IDUnid' int(11) NOT NULL,
  'TipoUnid' varchar(30) NOT NULL,
  'Amount' varchar(20) NOT NULL,
  'Badroom' varchar(15) DEFAULT NULL,
  'Comments' longtext,
  PRIMARY KEY ('ID')
) ENGINE=InnoDB AUTO_INCREMENT=1530 DEFAULT CHARSET=latin1;

CREATE TABLE 'Produtos' (
  'ID' int(10) unsigned NOT NULL AUTO_INCREMENT,
  'Product' varchar(50) NOT NULL,
  'IDDesc' int(11) NOT NULL,
  'Description' varchar(30) NOT NULL,
  PRIMARY KEY ('ID')
) ENGINE=InnoDB AUTO_INCREMENT=64 DEFAULT CHARSET=latin1;

Good morning, I still can not solve my problem, can anyone help?

I leave here the link that allowed me to solve this situation: [ link

But even solving the situation with this video, I appreciate the availability of the community for giving me important tips to reach the solution.

    
asked by anonymous 08.08.2017 / 11:37

2 answers

1

Surely you will need to implement the solution with JavaScript, but using AJAX is unnecessary. You no longer need to make a request to the server to get only a value you already know initially. The easiest solution I see in this situation is to store the respective value of the unit in a data attribute of the option and to fetch it with JavaScript when selecting a certain value.

For example, the HTML generated by your code is something like:

<select name="select_Bedroom" id="select_Bedroom">
    <option>Selecione</option>
    <option value="1">Quarto 1</option>
    <option value="2">Quarto 2</option>
    <option value="3">Quarto 3</option>
</select>

Let's suppose that the description of room 1 is x , room 2 is y and room 3 is z , so what you can do is create the following HTML:

<select name="select_Bedroom" id="select_Bedroom">
    <option>Selecione</option>
    <option value="1" data-desc="x">Quarto 1</option>
    <option value="2" data-desc="y">Quarto 2</option>
    <option value="3" data-desc="z">Quarto 3</option>
</select>

Notice the setting of the data-desc attribute with its values in the option elements. You can do this with PHP itself:

<option value="<?=$row_Quarto['ID']; ?>" data-desc="<?= $row_Quarto['Description'] ?>"><?=$row_Quarto['Bedroom']; ?></option>

With JavaScript, you can then treat the change event of the select element, retrieve the selected option, and check the value of the data-desc attribute. This can be done as follows:

// Objeto para manipulação do DOM:
const select = document.getElementById("select_Bedroom");

// Atribui a função ao evento 'change':
select.addEventListener("change", function (event) {

    // Seleciona a opção selecionada:
    let selectedOption = this.options[this.selectedIndex];

    // Exibe o valor de 'data-desc' da opção selecionada:
    console.log("A unidade da opção selecionada é: " + selectedOption.dataset.desc);
});

See the example working:

// Objeto para manipulação do DOM:
const select = document.getElementById("select_Bedroom");

// Atribui a função ao evento 'change':
select.addEventListener("change", function(event) {

  // Seleciona a opção selecionada:
  let selectedOption = this.options[this.selectedIndex];

  // Exibe o valor de 'data-unidade' da opção selecionada:
  console.log("A unidade da opção selecionada é: " + selectedOption.dataset.desc);
});
<select name="select_Bedroom" id="select_Bedroom">
  <option>Selecione</option>
  <option value="1" data-desc="x">Quarto 1</option>
  <option value="2" data-desc="y">Quarto 2</option>
  <option value="3" data-desc="z">Quarto 3</option>
</select>

In this way, you simply feed the other field of the form with the value obtained and this can be done through JavaScript as well.

// Objeto para manipulação do DOM:
const select = document.getElementById("select_Bedroom");
const unidade = document.getElementById("unidade");

// Atribui a função ao evento 'change':
select.addEventListener("change", function(event) {

  // Seleciona a opção selecionada:
  let selectedOption = this.options[this.selectedIndex];

  // Define o valor da unidade como sendo 'data-desc':
  unidade.value = selectedOption.dataset.desc;
});
<select name="select_Bedroom" id="select_Bedroom">
  <option>Selecione</option>
  <option value="1" data-desc="x">Quarto 1</option>
  <option value="2" data-desc="y">Quarto 2</option>
  <option value="3" data-desc="z">Quarto 3</option>
</select>

<input type="text" id="unidade" />
    
08.08.2017 / 16:12
-1
  

The Form

<form name="Registo" action="conexao.php" method="POST">
<b>Produtos:</b>
<br>
<select name="select_Produtos" id="select_Produtos">
<option>Selecione</option>
<?php
$result_Produtos = "SELECT * FROM Produtos";
$resultado_Produtos = mysqli_query($conn, $result_Produtos);
while($row_Produtos = mysqli_fetch_assoc($resultado_Produtos)){ ?>
<option value="<?php echo $row_Produtos['ID']; ?>"><?php echo $row_Produtos['Product']; ?>
</option> <?php
}
?>
</select><br>
<b>Unidade:</b>
<br>
<input type="text" name="TipoUnid" id="TipoUnid" size="20"><br>
    <b>Quantidade:</b>
<br>
<input type="text" name="Amount" size="5"><br>
<b>Observações (Opcional):</b>
<br>
 <textarea name="Comments" cols="30" rows="5"> </textarea><br>
<b>Quarto (Opcional):</b>
<br>
<select name="select_Bedroom">
<option>Selecione</option>
<?php
$result_Quarto = "SELECT * FROM Quarto";
$resultado_Quarto = mysqli_query($conn, $result_Quarto);
 while($row_Quarto = mysqli_fetch_assoc($resultado_Quarto)){ ?>
<option value="<?php echo $row_Quarto['ID']; ?>"><?php echo $row_Quarto['Bedroom']; ?>
</option> <?php
}
?>
</select><br>
<br>
<input type="submit" name="adicionar" value="Adicionar">
</form>    
  

Jquery + ajax

<script>
        $(document).ready(function() {
        $("#select_Produtos").bind('load change',function() {
        var IDProduto= $(this).val();
            $.ajax({
            url: 'dropAmount.php',
            type: 'POST',
            cache:false,
            data: {IDProduto: IDProduto},
            async: false,
            dataType:'html',
            success: function(data) {
        $("#TipoUnid").html(data);                                                                   
            },
            error: function(jqXHR, textStatus, errorThrown){
            alert(errorThrown);
            }
        });

        });
        });      
    </script>
  

dropAmount.php

     <?php
      include('conetar.php'); 
      if(isset($_POST['IDProduto'])){
       $IDProduto= $_POST['IDProduto'];
       $query= mysqli_query($conn,"SELECT Unidades.Description FROM Produtos RIGHT JOIN Unidades ON Unidades.ID = Produtos.IDDesc where produtos.ID=$IDProduto");
       while($getDescription = mysqli_fetch_array($query)){
        $Description=$getUnidade['Description'];
        echo '<input type="text" name="TipoUnid" size="5" value="'.$Description.'"><br>';
        }
    ?>

Note: Do not forget to put the IDs in the input and in the select.

    
08.08.2017 / 13:12