Sostituzione Elemento Html

Emanuele85

Utente Attivo
30 Gen 2021
118
0
16
Buonasera a tutti e buon anno, eccomi qua...alle strette di nuovo... sto perdendo i capelli a questo giro :).
Vi spiego il mio problema, ho una tabella mysql nella quale sono registrate delle info, la tablella è molto semplice, sono 4 campi:
ID Codice Descrizione MacroCategoria
1 10.0.0.1 Lavorazione XXXXX 1
2 10.0.0.2 Lavorazione YYYYY 2
3 10.0.0.3 Lavorazione ZZZZZ 3

Sul mio Form ho una select con l'elendo dei codici ( che popolo con una funzione ogni volta che la pagina fa il load). Con l'evento change chiamo lo stesso file php (è un file contenente tante funzioni) e vado a popolare la casella descrizione e una casella nascosta con MacroCategoria. Quest'ultimo mi serve per stabilire il colore del testo nella casella (1 - verde, 2-giallo, 3-rosso). E' un po contorto ma funziona. In pratica quel codice stabilisce la pericolosità della lavorazione e di conseguenza voglio contrassegnarla con un colore.

Vi posto il codice:

HTML:
<div class="col-2">
    <label for="formFile" class="form-label">Cod. Rischio</label>
    <select class="form-control" aria-label="Default select example" id="txtcod_rischio_azienda" name="txtcod_rischio_azienda">
        <option value="<?php  echo $row1->cod_rischio;?>"><?php  echo $row1->cod_rischio;?></option>
        <option disabled>- - -</option>
        <?php
       GetCodRischio();
        ?>
    </select>
</div>

Pagina Html

<div id ="div_descr_codrisc" class="col-4">
    <label for="formFile" class="form-label">Dettaglio Cod. Rischio</label>
    <input type="text"   id="txtdescr_codris_azienda"  name="txtdescr_codris_azienda " style="font-weight: bold;" value="<?php echo $row1->descr_codrischio;?>"
           <?php
    if ($row1->val_rischio=="1"){
    ?>
    class="text-success form-control "
    <?php
     }elseif ($row1->val_rischio=="2") {
      ?>
    class="text-warning form-control "
    <?php
       }elseif ($row1->val_rischio=="3") {
        ?>
    class="text-danger form-control "
    <?php
        }elseif ($row1->val_rischio=="") {
         ?>
    class="form-control "
    <?php
         }
        ?>
    >
</div>

JavaScript:
  <script type="text/javascript">

  $(function() {
    $('#txtcod_rischio_azienda').on('change', function() {
      
       var txtcod_rischio_azienda = $('#txtcod_rischio_azienda').val();
       var test=1;
       $.ajax({
        type:'post',
        url:'./function/funzioni.php',
        data : {'txtcod_rischio_azienda' : txtcod_rischio_azienda,'test':test},
        success : function(data){

           $('#div_descr_codrisc').html(data);
        }
       });

    });
  });

  </script>

Funzione:
PHP:
if (isset($_POST['txtcod_rischio_azienda'])&& trim($_POST["txtcod_rischio_azienda"]) != "") {
echo '<script type="text/javascript">alert("Sei Passato qui");</script>';
    $txtcod_rischio_azienda = ($_POST['txtcod_rischio_azienda']);
    $test = ($_POST['test']);

    if ($test=="1"){
        $test=="0";
    $sql = "SELECT * FROM codicerischio where Codice =:txtcod_rischio_azienda";

    $query = $dbh -> prepare($sql);
     $query->bindParam(':txtcod_rischio_azienda',$txtcod_rischio_azienda,PDO::PARAM_STR);

    $query->execute();
    $results=$query->fetchAll(PDO::FETCH_OBJ);

    if (($query->rowCount() > 0))    {

        foreach($results as $row)
        {
    
                $html='<label for="formFile" class="form-label">Dettaglio Cod. Rischio</label>';

                if ($row->MacroCategoria=="1"){
                    $html.='<input type="text" class="text-success form-control "  id="txtdescr_codris_azienda"  name="txtdescr_codris_azienda" style="font-weight: bold;" value="'.$row->Descrizione.'">';

                }elseif ($row->MacroCategoria=="2"){
                    $html.='<input type="text" class="text-warning form-control "  id="txtdescr_codris_azienda"  name="txtdescr_codris_azienda" style="font-weight: bold;" value="'.$row->Descrizione.'">';
                }elseif ($row->MacroCategoria=="3"){
                        $html.='<input type="text" class="text-danger form-control "  id="txtdescr_codris_azienda"  name="txtdescr_codris_azienda" style="font-weight: bold;" value="'.$row->Descrizione.'">';
                    }
                    $html.='<input type="hidden" class="text-danger form-control "  id="hidden_codris_azienda"  name="hidden_codris_azienda" style="font-weight: bold;" value="'.$row->MacroCategoria.'">';

                echo $html;
    }

    }else{

    }
}
}

Tutto funziona bene se seleziono il valore del codice... Ma se Salvo i dati senza cambiare selezionare il codice mi succede una cosa strana ( strana per me ovviamente), è come se venisse comunque chiamata la funzione php (non passando per ajax), senza alcun valore per cui mi svuota i campi...ma cosa bellissima, in alto sullo schermo vedo la stessa input corretta, anche nei colori, quindi è come se venisse duplicata (una la vedo al posto giusto del form ma vuota, una in alto sullo schermo con i dati)

PS. Nella funzione passo anche la casella hidden altrimenti non saprebbe al ricaricare della pagina il colore da utilizzare per il testo. Se ci sono altre soluzioni...MAGARI!

Sicuramente il problema nasce dal fatto che passo l'html ma non riesco a risolvere, chiama la funzione anche quando non dovrebbe.
Sapete dirmi dove sto sbagliando?

Grazie mille come al solito
saluti
E
 
Ho fatto altri piccoli test, e sono giunto a conclusione che il tutto funziona fino a quando le due text (Descrizione e Hidden) le invia ajax, nel momento in cui si ricarica la pagina, legge i dati dal db e "usa" le text che ho scritto nell'HTML, se salvo il Post è vuoto. Non capisco perchè dato che se faccio ispeziona da browser vedo praticamente i dati corretti.
Avete qualche info utile?

Grazie mille
 
Dopo questa potete cacciarmi dal Forum...:eek:

Ho trovato il problema... o almeno è l'unica cosa che è cambiata:

name="txtdescr_codris_azienda" e non name="txtdescr_codris_azienda "

Sono 2 sere che perdo tempo per uno spazio dopo la lettera "a"...

Bannatemi pure!!!!

Buonanotte a tutti e grazie cmq...
E
 
Ciao, mi fa piacere che tu abbia risolto. Nessun ban, anzi grazie per aver condiviso queste informazioni che a volte non sono così scontate :)
Buon proseguimento
 

Discussioni simili