Ni,

la query funziona in sql ma portata in php ancora no.

sto cercando di capire perchè ma credo che il problema sia di come va scritto esattamente il parametro @giorno_servizio, 

pensavo di sostituirla con "?" visto che poi con bind_param('s',$fata_servizio) viene sostituito dal valore di $data_servizio, ma sicuro ho capito ancora una volta male qualche cosa

Ti giro lo script:

<?php session_start();?>
<!DOCTYPE html>
<html lang="it">
<head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Script per selezione corse</title>
</head>
<body>
<!-- Questo script sostituisce il file precedente selezionando le corse usando una struttara sql
tale da sostituire e alleggerire il codice php-->

<?php
//serve solo questa variabile php, il resto lo fa totalmente sql.
$data_servizio = $_SESSION['data'];

//echo $data_servizio;

$sql="WITH parametri as (
        SELECT CAST(? AS DATE) AS data_servizio
        ),

        -- Mappatura dinamica di tutte i periodi validi per il giorno di servizio

        periodo AS (
        SELECT
        descrizione_periodo,
        CASE descrizione_periodo
                WHEN 'periodo_pasquale'   THEN 'pasquale'
                WHEN 'periodo_natalizio'  THEN 'natalizio'
                WHEN 'periodo_estivo'     THEN 'estivo'
                WHEN 'periodo_invernale'  THEN 'invernale'
        END AS periodo
        FROM gbgar_periodi gp
        CROSS JOIN parametri x
        WHERE x.data_servizio BETWEEN gp.data_inizio AND gp.data_fine
        ORDER BY
        CASE descrizione_periodo
                WHEN 'periodo_pasquale'   THEN 1
                WHEN 'periodo_natalizio'  THEN 2
                WHEN 'periodo_estivo'     THEN 3
                WHEN 'periodo_invernale'  THEN 4
                ELSE 99
        END
        LIMIT 1
        ),

        -- Mappatura dinamica di tutte le frequenze valide per il giorno di servizio

        giorno_frequenze AS (

        SELECT 'giornaliera' AS frequenza -- Valida sempre, per qualsiasi giorno

        UNION ALL

        SELECT
        CASE 
        -- SE È FESTIVO (Domenica o Tabella Festività)
                WHEN DAYOFWEEK(x.data_servizio) = 1
                OR EXISTS (SELECT 1 FROM gbgar_festivita f WHERE f.GIORNO = x.data_servizio)
                THEN 'festiva'
        
        -- SE È SABATO
                WHEN DAYOFWEEK(x.data_servizio) = 7 
                THEN 'sabato'
        
        -- SE È LUNEDÌ-VENERDÌ
                ELSE 'feriale'
        END AS frequenza
        

        UNION ALL

        -- Aggiungiamo le frequenze specifiche richieste per il periodo invernale scolastico
        SELECT 'scolastica' AS frequenza WHERE DAYOFWEEK(x.data_servizio) BETWEEN 2 AND 7

        UNION ALL

        SELECT 'sab-scol' AS frequenza WHERE DAYOFWEEK(x.data_servizio) = 7

        UNION ALL

        SELECT 'lun-ven-scol' AS frequenza WHERE DAYOFWEEK(x.data_servizio) BETWEEN 2 AND 6

        UNION ALL
        SELECT 'sab-scol' AS frequenza 
        WHERE DAYOFWEEK(x.data_servizio) BETWEEN 2 AND 6
        )
        SELECT
        c.ID_CORSA,
        tm.TABELLA AS ID_TM,
        c.LINEA,
        ic.UBICAZIONE AS PARTENZA,
        c.ORARIO_CORSA,
        fc.UBICAZIONE AS ARRIVO,
        c.FINE_CORSA,
        c.KM,
        p.periodo,
        tm.FREQUENZA AS frequenza_tabella

        FROM gbgar_corse c
        INNER JOIN gbgar_fermate ic   ON c.PARTENZA = ic.ID_FERMATA
        INNER JOIN gbgar_fermate fc   ON c.ARRIVO = fc.ID_FERMATA
        INNER JOIN gbgar_tab_marcia tm ON tm.ID_TM = c.ID_TM    
        CROSS JOIN periodo p
        INNER JOIN giorno_frequenze gf ON tm.FREQUENZA = gf.frequenza
        WHERE
        tm.PERIODO = p.periodo
        AND NOT EXISTS(
        SELECT 1 FROM gbgar_serv_master m
        JOIN gbgar_serv_detail d ON m.id_master=d.id_master
        WHERE d.id_corsa=c.id_corsa
        AND m.data=?)
        ORDER BY
        c.ORARIO_CORSA;
";

$stmt = $Conn->prepare($sql);

if (!$stmt) {
        die("Errore prepare: " . $Conn->error);
}

$stmt->bind_param("s", $data_servizio);

$stmt->execute();

$corse_da_svolgere = $stmt->get_result();

$stmt->close();

?>
</body>
</html>
//il prelievo nel ciclo while qua nn serve, è già nel codice del form.

Sto cercando di individuare l'errore. cosi com'è la pagina del form è vuota e nn appare giustamente il  form, in quanto il file che contiene questo script è incluso nell file del form stesso.

Sempre grazie 

Filippo P.