Avatar billede dane022 Seniormester
10. februar 2024 - 21:38 Der er 2 kommentarer og
1 løsning

Beregning af sum via PHP og SQL

Lidt forsimplet, så er opgaven at få udregnet en sum af 2 værdier "Nyttrin" + "Sluttrin" som er på en webside. "Sluttrin" hentes fra sql server database, mens "Nyttrin" er et inputfelt på siden.

Det jeg håber på, er at når "Nyttrin" feltet udfyldes i formularen, så foretages beregningen uden at der skal trykkes på Submit. Dvs. det er javascriptet der kalder sql proces siden (simuler.php), der så foretager udregningen og sender resultatet tilbage til inputsiden.

Her er dele af koden:

Hent fra database til tabel og inputformular (dele af koden):
$query1 = "SELECT ID, Sluttrin FROM Testmedarbejdere";
      $results1 = array();
            while ($row = sqlsrv_fetch_array($stmt1, SQLSRV_FETCH_ASSOC)) {  $results1[] = $row; }
$results1; foreach ($results1 as $row) {
echo "<td style='display:none'>" . $row["ID"] . "</td>";
echo "<td style='display:none'>" . $row["Sluttrin"] . "</td>";
echo "<input type='number' id='Nyttrin name='Nyttrin' value='' required></input></td>";
echo "<input type='hidden' name='Sluttrin' value='" . $row["Sluttrin"] . "'>";
echo "<input type='hidden' name='Medarbejdernr' value='" . $row["Medarbejdernr"] . "'>";
echo "<td>" Resultat "</td>"; (her skal resultatet vises)
}

Simuler.php (dele af koden):
if (isset($_POST['Nyttrin']) && isset($_POST['ID'])) {
$Sluttrin = $_POST['Sluttrin'];
$Medarbejdernr = $_POST['Medarbejdernr'];

$sql1 = "select sluttrin + ? AS Nytsluttrin
from Testmedarbejdere
WHERE Medarbejdernr = ?
$params0 = array($Nyttrin, $Medarbejdernr);
$stmt1 = sqlsrv_prepare($conn, $sql1, $params1);
}

Ovenstående virker hvis det køres med Submit, men det jeg gerne vil opnå er at brugeren ser (simuleret) resultatet før der trykkes på Submit. Håber det er til at forstå på trods af al koden ikke er indsat
Avatar billede ejvindh Ekspert
11. februar 2024 - 12:43 #1
Prøv at skifte dine echo-sætninger ud med følgende:

  echo "<td style='display:none'>" . $row["ID"] . "</td>";
  echo "<td style='display:none'>" . $row["Sluttrin"] . "</td>";
  echo "<td><input type='number' id='Nyttrin".$row["ID"]."' name='Nyttrin' value='' required onChange='document.getElementById(\"result".$row["ID"]."\").innerHTML = (Number(this.value) + Number(Sluttrin".$row["ID"].".value)).toString();'></input></td>";
  echo "<input type='hidden' name='Sluttrin' id='Sluttrin".$row["ID"]."' value='" . $row["Sluttrin"] . "'>";
  echo "<input type='hidden' name='Medarbejdernr' value='" . $row["Medarbejdernr"] . "'>";
  echo "<td>Resultat: <span id='result".$row["ID"]."'></span></td>";
Avatar billede dane022 Seniormester
11. februar 2024 - 13:12 #2
Det der ligger i opgaven er at værdierne fra input felterne skal bruges i en sql query (simuler.php) og skal ende med at gøre flere ting end at lægge de 2 tal sammen.
Kan det lade sig gøre med dit forslag, at beregningen foretages af Simuler siden og føres tilbage til input siden?
Avatar billede dane022 Seniormester
12. februar 2024 - 09:41 #3
Opgaven er nu løst. Scriptet kører en php processide, hvor der køres flere sql queries for at udregne værdien. Resultatet føres tilbage til inputisiden

Herunder udpluk af siderne med de dele der er nødvendige:

Input side:
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
foreach ($combinedResults as $index => $row) {
            $rowId = $row['ID'];
            echo "<tr data-row-id='$rowId'>";
echo "<input class='input_mid' type='number' id='Nyttrin_$rowId' name='Nyttrin'>
echo "<input class='input_mid' type='date' id='Ikrafttraedelsesdato_$rowId' name='Ikrafttraedelsesdato'>

Script:
//Simuler løntrin værdi
    $(document).ready(function() {
        $('.input_mid').change(function() {
            var rowId = $(this).closest('tr').attr('data-row-id');
            submitForm(rowId);
            });
        });

        function submitForm(rowId) {
            var NyttrinValue = $('#Nyttrin_' + rowId).val();
            var IkrafttraedelsesdatoValue = $('#Ikrafttraedelsesdato_' + rowId).val();

            $.ajax({
                type: 'POST',
                url: 'insert_lontrin_simuler.php',
                data: {
                    Nyttrin: NyttrinValue,
                    Ikrafttraedelsesdato: IkrafttraedelsesdatoValue
                },
                success: function(response) {
                    console.log(response);
                    $('#result_' + rowId).html(response);
                },
                error: function(xhr, status, error) {
                    // Handle errors
                    console.error(xhr.responseText);
                }
            });
        }

Proces side:
echo $result;
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester