Avatar billede dane022 Seniormester
24. juli 2023 - 19:02 Der er 5 kommentarer og
1 løsning

PHP/SQL løsning hvor sql query fejler

Jeg har kastet mig over sql server/php og det kan godt være op ad bakke til tider. Så beklager hvis jeg er ret nybegynder.

I nedenstående kode fungerer 1. query som den skal - det er nr. 2 der fejler. (Jeg tænkte det ville give mest overblik hvis jeg postede hele koden). Er der nogen der kan gennemskue hvorfor det fejler?

Koden er taget fra insert_data.php. Originalfilen hedder index.php som henviser til denne side når der trykkes på formularknap.

<?php
if (isset($_POST['Nyttrin']) && isset($_POST['ID'])) {
    // Replace 'your_server_name', 'your_database_name', 'your_username', and 'your_password' with your actual database credentials
    $serverName = 'sql2012r2srv1';
    $connectionOptions = array(
        "Database" => 'Afstemningsdata',
        "UID" => '',
        "PWD" => ''
    );
    $conn = sqlsrv_connect($serverName, $connectionOptions);

    if ($conn === false) {
        die(print_r(sqlsrv_errors(), true));
    }

    //$Nyttrin = $_POST['Nyttrin'];
    $Nyttrin = isset($_POST['Nyttrin']) && $_POST['Nyttrin'] !== '' ? $_POST['Nyttrin'] : null;
    $ID = $_POST['ID'];
    $currentUsername= shell_exec("echo %username%");
    $date = date('d-m-Y H:i:s');
    $status = 'Afventer TR';
   
    // SQL query to update the 'Nyttrin' value based on the 'ID' key
    $sql1 = "UPDATE Medarbejdere SET Nyttrin = ?, Status = '$status', Ledergodkendtaf = '$currentUsername', Ledergodkendttid = ('$date') WHERE ID = ?";

    // Prepare the SQL query
    $params1 = array($Nyttrin, $ID);
    $stmt1 = sqlsrv_prepare($conn, $sql1, $params1);

    // Check if the query was prepared successfully
    if ($stmt1 === false) {
        die(print_r(sqlsrv_errors(), true));
    }

    // Execute the prepared statement
    if (sqlsrv_execute($stmt1) === false) {
        die(print_r(sqlsrv_errors(), true));
    } else {
        echo "Lønoplysninger blev opdateret korrekt<p>";
        echo "<form action='index.php' method='post'><input type='submit' value='Retur'></form>";
    }
    sqlsrv_free_stmt($stmt1);
   
    // The SQL query (modified to use a subquery for the JOIN)
    $sql2 = "UPDATE m
    SET m.oprTrinbeløb = lt.beløb
    FROM Medarbejdere m
    INNER JOIN Løntabel lt ON lt.Trin = m.trin AND lt.løntabel = m.løntabel
    WHERE m.ID = ?";

    // Prepare the SQL query
    $params2 = array($ID);
    $stmt2 = sqlsrv_prepare($conn, $sql2, $params2);

    // Check if the query was prepared successfully
    if ($stmt2 === false) {
    die(print_r(sqlsrv_errors(), true));
    }

    // Execute the prepared statement
    if (sqlsrv_execute($stmt2) === false) {
    die(print_r(sqlsrv_errors(), true));
    }

    sqlsrv_free_stmt($stmt2);
       
    sqlsrv_close($conn);
}
?>
Avatar billede arne_v Ekspert
24. juli 2023 - 19:43 #1
Hvilken fejlbesked får du?
Avatar billede dane022 Seniormester
24. juli 2023 - 20:06 #2
Først får jeg besked fra øverste statement om at lønoplysninger blev opdateret korrekt: Lønoplysninger blev opdateret korrekt

Derefter denne:
Array ( [0] => Array ( [0] => 42000 [SQLSTATE] => 42000 [1] => 102 [code] => 102 [2] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Incorrect syntax near '�'. [message] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Incorrect syntax near '�'. ) [1] => Array ( [0] => 42000 [SQLSTATE] => 42000 [1] => 8180 [code] => 8180 [2] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Statement(s) could not be prepared. [message] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Statement(s) could not be prepared. ) )
Avatar billede arne_v Ekspert
24. juli 2023 - 21:07 #3
Vildt gæt: karakter sæt problemer p.g.a. brugen af danske bogstaver i tabel og felt navne.
Avatar billede dane022 Seniormester
25. juli 2023 - 08:47 #4
Det var et rigtig godt bud for nu virker det :). I Tabelnavne og kolonner blev Ø omdøbt til O og så virkede det. Tak.

Utroligt at det generelt skal være et issue. Den tekst der hentes ind på siden, vises æ , ø og å som spørgsmålstegn. Kan der gøres noget ved det?

Og sidste spørgsmål: jeg skal køre flere querys end det viste 2nd statement, for at kunne udregne lønnen. Kan jeg ikke slå dem sammen fremfor at skulle lave helt ny sektion for hver query?
Avatar billede arne_v Ekspert
25. juli 2023 - 15:14 #5
Spørgsmåls tegn på en web side skyldes også normalt karaktersæt problemer.

Siden er UTF-8 men database indholdet er faktisk ISO-8859-1 eller omvendt.

Bed database driveren om at returnere tekst i den rigtige encoding.
Avatar billede arne_v Ekspert
25. juli 2023 - 15:16 #6
Nogen gange kan man godt kombinere flere querys til en enkelt query. Multiple statements i en query (hvis databasen tillader dette) eller JOIN eller UNION.

Men måske er det bedre bare at organisere PHP koden bedre ved at splitte den op i funktioner og adskille præsentation fra logik.
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